SAP 执行失败JOB及dump日志监控

news2024/10/7 10:24:25

背景

        系统使用时间较长,存在大量的后台作业,用户量较大,需要及时监控后台作业状况及系统dump情况,以便及时处理。

功能

        1. 查询屏幕填写日期前n秒状态为错误及未知的后台作业

        2. 查询屏幕填写日期前n秒系统中的dump记录--客制化程序

        3. 将上述记录发送邮件通知

功能展示

        选择屏幕

        程序输出 

        邮件内容 

 代码 

*&---------------------------------------------------------------------*
*& Report ZSYSLOG_NOTICE
*&---------------------------------------------------------------------*
*& Developer              : Fireworks
*&---------------------------------------------------------------------*
*& Purpose: 获取最近N秒sap中客制化程序dump记录及作业错误记录并发送
*&          邮件至收件人
*&---------------------------------------------------------------------*
REPORT zsyslog_notice.
TABLES sscrfields.
*-----------------------------------------------------------------------
* class lcl_object  DEFINITION
*-----------------------------------------------------------------------
CLASS lcl_object DEFINITION.

  PUBLIC SECTION.

    TYPES: BEGIN OF ty_job_result,
             jobname   TYPE v_op-jobname,
             intreport TYPE v_op-intreport,
             strtdate  TYPE v_op-strtdate,
             strttime  TYPE v_op-strttime,
             status    TYPE v_op-status,
           END OF ty_job_result.

    TYPES: BEGIN OF ty_st22_record,
             datum      TYPE snap-datum,
             uzeit      TYPE snap-uzeit,
             uname      TYPE snap-uname,
             errorid    TYPE rdumpov-errorid,
             rexception TYPE rdumpov-rexception,
             gprogram   TYPE rdumpov-gprogram,
           END OF ty_st22_record.

    DATA: gt_job_result  TYPE TABLE OF ty_job_result,
          gt_st22_record TYPE TABLE OF ty_st22_record.

    DATA: gt_content TYPE soli_tab,   "Email Content
          gv_subject TYPE so_obj_des. "Email Subject

    DATA: gv_ld TYPE datum,
          gv_lt TYPE uzeit,
          gv_cd TYPE datum,
          gv_ct TYPE uzeit.

    METHODS:
      get_job_result  ,

      get_st22_record ,

      email_send          IMPORTING pi_subject TYPE so_obj_des
                                    pi_sender  TYPE ad_smtpadr OPTIONAL
                                    pt_accept  TYPE bcsy_smtpa
                                    pt_content TYPE soli_tab
                          EXPORTING pe_return  TYPE bapiret2,

      send_email_notice   IMPORTING pt_accept TYPE bcsy_smtpa,

      constructor IMPORTING pi_datum TYPE sy-datum
                            pi_uzeit TYPE sy-uzeit
                            pi_sec   TYPE num8.
  PROTECTED SECTION.

  PRIVATE SECTION.

ENDCLASS.


*-----------------------------------------------------------------------
* class lcl_object   IMPLEMENTATION
*-----------------------------------------------------------------------
CLASS lcl_object IMPLEMENTATION.

  METHOD constructor.

    DATA: lv_sec TYPE i.

    lv_sec = pi_sec.
    CALL METHOD cl_abap_tstmp=>td_add
      EXPORTING
        date     = pi_datum
        time     = pi_uzeit
        secs     = lv_sec
      IMPORTING
        res_date = gv_ld
        res_time = gv_lt.

    gv_cd = pi_datum.
    gv_ct = pi_uzeit.

  ENDMETHOD.
  METHOD get_job_result.

    SELECT *
      FROM v_op
      INTO CORRESPONDING FIELDS OF TABLE gt_job_result
      WHERE ( strtdate = gv_ld AND strttime >= gv_lt
             OR strtdate = gv_cd  AND strttime <= gv_ct )
      AND   status IN ( 'A','X' )
      .

  ENDMETHOD." Get the job with error status

  METHOD get_st22_record.

    DATA: lt_snap        TYPE TABLE OF snap,
          ls_snap        TYPE snap,
          ls_st22_record LIKE LINE OF gt_st22_record.

    DATA: BEGIN OF struc,
            id(2)    TYPE c,
            len(3)   TYPE c,
            text(50) TYPE c,
          END OF struc.
    DATA e_line TYPE c LENGTH 400.

    DATA: pointer      TYPE i,
          struc_length TYPE i,
          lv_end       TYPE i.

    FIELD-SYMBOLS: <fs_text> TYPE any.

    SELECT   *
      FROM  snap
      INTO TABLE lt_snap
      WHERE seqno = '000'
        AND ( datum = gv_ld AND uzeit >= gv_lt
             OR datum = gv_cd  AND uzeit <= gv_ct )
      .
    struc_length = 55.
    lv_end       = 345.
    LOOP AT lt_snap INTO ls_snap.

      CLEAR: pointer,ls_st22_record,struc,e_line.
      MOVE-CORRESPONDING ls_snap TO ls_st22_record.
      e_line+0(200)   = ls_snap-flist.
      e_line+200(200) = ls_snap-flist02.
      WHILE pointer < lv_end.
        struc  = e_line+pointer(struc_length).
        IF ( struc-len CO '0123456789' ) AND ( struc-len <> '000' ) AND
         ( struc-len < '050' ).
          ASSIGN struc-text(struc-len) TO <fs_text>.
          CASE struc-id.
            WHEN 'XC'."exception
              ls_st22_record-rexception = <fs_text>.
            WHEN 'AP'."dump program
              ls_st22_record-gprogram = <fs_text>.
            WHEN  'FC'."error id
              ls_st22_record-errorid = <fs_text>.
            WHEN OTHERS.
          ENDCASE.
        ELSE.
          struc-text = '?????'.

          IF struc-len CO '0123456789' AND struc-len <> '000'.
            pointer = pointer + 5 + struc-len.     " Neuer Versuch
            CONTINUE.
          ENDIF.

        ENDIF.
        pointer = pointer + 5 + struc-len.     " Neuer Versuch

        IF ls_st22_record-errorid IS NOT INITIAL AND
            ls_st22_record-gprogram IS NOT INITIAL AND
            ls_st22_record-rexception IS NOT INITIAL.
          EXIT.
        ENDIF.
      ENDWHILE.
      APPEND ls_st22_record TO gt_st22_record.
    ENDLOOP.


  ENDMETHOD. " Get the dump

  METHOD send_email_notice.

    DATA: ls_return  TYPE bapiret2,
          lv_sendder TYPE ad_smtpadr,
          ls_content LIKE LINE OF gt_content.

    DATA: ls_job_result  LIKE LINE OF gt_job_result,
          ls_st22_record LIKE LINE OF gt_st22_record.

    DATA: lv_table_ines  TYPE i,
          lv_status_text TYPE text10.

    gv_subject =  'System' && sy-sysid && sy-mandt && '--'.

    "作业错误
    IF gt_job_result IS NOT INITIAL.

      DESCRIBE TABLE gt_job_result LINES lv_table_ines.
      gv_subject = gv_subject && 'Job With Error Status: ' && lv_table_ines && ' Rows'.

      ls_content-line = cl_bcs_convert=>gc_tab && 'Job With Error Status As Follows:'.
      APPEND ls_content TO gt_content.

      ls_content-line = cl_bcs_convert=>gc_tab && 'Job Name'   && cl_bcs_convert=>gc_tab && 'Start Date'
                     && cl_bcs_convert=>gc_tab && 'Start Time'  && cl_bcs_convert=>gc_tab && 'Job Status'.
      APPEND ls_content TO gt_content.

      LOOP AT gt_job_result INTO ls_job_result.
        CASE ls_job_result-status.
          WHEN 'A'.
            lv_status_text = 'Unknow'.
          WHEN 'X'.
            lv_status_text = 'Canceled'.
          WHEN OTHERS.
        ENDCASE.
        ls_content-line = cl_bcs_convert=>gc_tab && ls_job_result-jobname   && cl_bcs_convert=>gc_tab && ls_job_result-strtdate
                       && cl_bcs_convert=>gc_tab && ls_job_result-strttime  && cl_bcs_convert=>gc_tab && lv_status_text.
        APPEND ls_content TO gt_content.

      ENDLOOP.

    ENDIF.

    "dump
    DELETE gt_st22_record WHERE gprogram+0(1) <> 'Z' AND gprogram+0(1) <> 'Y' .
    IF gt_st22_record IS NOT INITIAL.

      DESCRIBE TABLE gt_st22_record LINES lv_table_ines.
      gv_subject = gv_subject && 'Customer Program Dump: ' && lv_table_ines && ' Rows'.

      ls_content-line = cl_bcs_convert=>gc_tab && 'DUMP As Follows:'.
      APPEND ls_content TO gt_content.

      ls_content-line =   cl_bcs_convert=>gc_tab && 'Program Name' && cl_bcs_convert=>gc_tab && 'Date'
                       && cl_bcs_convert=>gc_tab && 'Time'         && cl_bcs_convert=>gc_tab && 'User Name'
                       && cl_bcs_convert=>gc_tab && 'Exception'    && cl_bcs_convert=>gc_tab && 'Error'.
      APPEND ls_content TO gt_content.

      LOOP AT gt_st22_record INTO ls_st22_record.
        ls_content-line = cl_bcs_convert=>gc_tab && ls_st22_record-gprogram   && cl_bcs_convert=>gc_tab && ls_st22_record-datum
                       && cl_bcs_convert=>gc_tab && ls_st22_record-uzeit      && cl_bcs_convert=>gc_tab && ls_st22_record-uname
                       && cl_bcs_convert=>gc_tab && ls_st22_record-rexception && cl_bcs_convert=>gc_tab && ls_st22_record-errorid.
        APPEND ls_content TO gt_content.
      ENDLOOP.

    ENDIF.

    IF gt_st22_record IS NOT INITIAL OR gt_job_result IS NOT INITIAL.

*      lv_sendder = '123@test.com'.
      email_send(
          EXPORTING
            pi_subject  = gv_subject
            pi_sender   = lv_sendder
            pt_accept   = pt_accept
            pt_content  = gt_content
          IMPORTING
            pe_return   = ls_return
              ).

    ENDIF.
  ENDMETHOD. " Send notification

  METHOD email_send.

*&------Send Email Parameter
    DATA: lt_contents_txt    TYPE soli_tab,
          ls_contents_txt    TYPE soli,
          lt_attach_header   TYPE soli_tab,
          ls_attach_header   TYPE soli,
          lt_att_content_hex TYPE solix_tab,
          lv_outlength       TYPE i,
          lv_attch_size      TYPE so_obj_len,
          lv_content_size    TYPE so_obj_len,
          lv_send_return     TYPE os_boolean.

    DATA: lr_send     TYPE REF TO cl_bcs,
          lr_document TYPE REF TO cl_document_bcs,
          lr_sender   TYPE REF TO cl_cam_address_bcs,
          lr_accept   TYPE REF TO cl_cam_address_bcs,
          lr_ccaccept TYPE REF TO cl_cam_address_bcs,
          lr_sap_user TYPE REF TO cl_sapuser_bcs,
          lr_bcs      TYPE REF TO cx_bcs.

    DATA:lr_cx_send_req_bcs TYPE REF TO cx_send_req_bcs,
         lr_cx_address_bcs  TYPE REF TO cx_address_bcs.

    DATA: lv_accept  TYPE ad_smtpadr,
          lv_message TYPE bapiret2-message.

    DEFINE mcr_fill_return.
      pe_return-id         = sy-msgid.
      pe_return-number     = sy-msgno.
      pe_return-type       = sy-msgty.
      pe_return-message_v1 = sy-msgv1.
      pe_return-message_v2 = sy-msgv2.
      pe_return-message_v3 = sy-msgv3.
      pe_return-message_v4 = sy-msgv4.
      pe_return-message    = &1.
      RETURN.
    END-OF-DEFINITION.

*&------Create Send Request
    TRY.
        CALL METHOD cl_bcs=>create_persistent
          RECEIVING
            result = lr_send.
      CATCH cx_send_req_bcs INTO lr_cx_send_req_bcs.

    ENDTRY.
    IF lr_cx_send_req_bcs IS NOT INITIAL.
      lv_message = lr_cx_send_req_bcs->get_text( ).
      mcr_fill_return lv_message.
    ENDIF.

*&------Get The Sender Email Adress
    IF pi_sender IS NOT INITIAL.
      TRY.
          CALL METHOD cl_cam_address_bcs=>create_internet_address
            EXPORTING
              i_address_string = pi_sender
              i_address_name   = 'System Notification'
*             i_incl_sapuser   =
            RECEIVING
              result           = lr_sender.
        CATCH cx_address_bcs INTO lr_cx_address_bcs.
      ENDTRY.

      IF lr_cx_address_bcs IS NOT INITIAL.
        lv_message = lr_cx_address_bcs->get_text( ).
        mcr_fill_return lv_message.
      ENDIF.

*&---------Set Sender
      TRY.
          CALL METHOD lr_send->set_sender
            EXPORTING
              i_sender = lr_sender.
        CATCH cx_send_req_bcs INTO lr_cx_send_req_bcs.
          lv_message = lr_cx_send_req_bcs->get_text( ).
          mcr_fill_return lv_message.
      ENDTRY.
    ENDIF.

*&------Create Send Document Content
    lt_contents_txt = pt_content.
    TRY.
        IF lr_sender IS NOT INITIAL.
          CALL METHOD cl_document_bcs=>create_document
            EXPORTING
              i_type        = 'RAW'
              i_subject     = pi_subject
              i_length      = lv_content_size
              i_language    = sy-langu
*             i_importance  = '1'
              i_sensitivity = 'O'
              i_text        = lt_contents_txt
*             i_hex         =
*             i_header      =
              i_sender      = lr_sender
*             iv_vsi_profile =
            RECEIVING
              result        = lr_document.
        ELSE.
          CALL METHOD cl_document_bcs=>create_document
            EXPORTING
              i_type        = 'RAW'
              i_subject     = pi_subject
              i_length      = lv_content_size
              i_language    = sy-langu
*             i_importance  = '1'
              i_sensitivity = 'O'
              i_text        = lt_contents_txt
*             i_hex         =
*             i_header      =
*             i_sender      =
*             iv_vsi_profile =
            RECEIVING
              result        = lr_document.
        ENDIF.
      CATCH cx_document_bcs INTO lr_bcs.
    ENDTRY.

    IF lr_bcs IS NOT INITIAL.
      lv_message = lr_bcs->get_text( ).
      mcr_fill_return lv_message.
    ENDIF.

*&------Set Send Document For Send Request
    TRY.
        CALL METHOD lr_send->set_document
          EXPORTING
            i_document = lr_document.
      CATCH cx_send_req_bcs INTO lr_bcs.
    ENDTRY.
    IF lr_bcs IS NOT INITIAL.
      lv_message = lr_bcs->get_text( ).
      mcr_fill_return lv_message.
    ENDIF.

*&------Add Accept For Email
    TRY.
        LOOP AT pt_accept INTO lv_accept.
          CLEAR lr_accept.
          CALL METHOD cl_cam_address_bcs=>create_internet_address
            EXPORTING
              i_address_string = lv_accept
*             i_address_name   =
*             i_incl_sapuser   =
            RECEIVING
              result           = lr_accept.

          CALL METHOD lr_send->add_recipient
            EXPORTING
              i_recipient  = lr_accept
              i_express    = 'X'
              i_copy       = ''
              i_blind_copy = ''
              i_no_forward = ''.
        ENDLOOP.

      CATCH cx_send_req_bcs INTO lr_bcs.
        lv_message = lr_bcs->get_text( ).
        mcr_fill_return lv_message.
      CATCH cx_address_bcs INTO lr_bcs.
        lv_message = lr_bcs->get_text( ).
        mcr_fill_return lv_message.
    ENDTRY.

    TRY.
        CALL METHOD lr_send->set_send_immediately
          EXPORTING
            i_send_immediately = 'X'.

      CATCH cx_send_req_bcs INTO lr_bcs.
        lv_message = lr_bcs->get_text( ).
        mcr_fill_return lv_message.
    ENDTRY.

*&------Send Email
    TRY.
        CALL METHOD lr_send->send
          EXPORTING
            i_with_error_screen = space
          RECEIVING
            result              = lv_send_return.

      CATCH cx_send_req_bcs INTO lr_bcs.
        lv_message = lr_bcs->get_text( ).
        mcr_fill_return lv_message.
    ENDTRY.

    COMMIT WORK AND WAIT.

    SUBMIT rsconn01 WITH mode = '*'"INT'
                  WITH output = ''
                  AND RETURN.

  ENDMETHOD. " Tool methon to send email
ENDCLASS.

*&---------------------------------------------------------------------*
* Data Definition
*&---------------------------------------------------------------------*
DATA: go_program TYPE REF TO lcl_object,
      gt_accept  TYPE bcsy_smtpa,
      gv_email   TYPE char100.

*&---------------------------------------------------------------------*
* Selection Screen definition
*&---------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS: s_emai FOR gv_email NO INTERVALS MEMORY ID mid1 OBLIGATORY DEFAULT '123@321.com'.
PARAMETERS: p_date TYPE sy-datum DEFAULT sy-datum,      " Current date
            p_time TYPE sy-uzeit DEFAULT sy-uzeit,      " Current time
            p_lsec TYPE num8 DEFAULT 86430,             " Lastest N seconds
            p_job  TYPE char1  DEFAULT 'X' AS CHECKBOX,
            p_st22 TYPE char1  DEFAULT 'X' AS CHECKBOX.
SELECTION-SCREEN: END OF BLOCK b1.
*&---------------------------------------------------------------------*
* Initialization
*&---------------------------------------------------------------------*
INITIALIZATION.


*&--------------------------------------------------------------------*
*  at selection screen                                 *
*&--------------------------------------------------------------------*
AT SELECTION-SCREEN.

*&---------------------------------------------------------------------*
* start of selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.

*& Fill accepter from selection screen
  CLEAR gt_accept.
  LOOP AT s_emai.
    gv_email = s_emai-low.
    APPEND gv_email TO gt_accept.
  ENDLOOP.

*& Send notice
  CREATE OBJECT go_program EXPORTING pi_datum = p_date pi_uzeit = p_time pi_sec = p_lsec.
  IF gt_accept IS NOT INITIAL .
    IF p_job IS NOT INITIAL.
      go_program->get_job_result( ).
    ENDIF.
    IF p_st22 IS NOT INITIAL.
      go_program->get_st22_record( ).
    ENDIF.
    go_program->send_email_notice( pt_accept = gt_accept ).
  ENDIF.

*&---------------------------------------------------------------------*
* end of selection
*&---------------------------------------------------------------------*
END-OF-SELECTION.

*& Write the result to screen
  WRITE:/ go_program->gv_subject.
  LOOP AT go_program->gt_content INTO DATA(ls_content_temp).
    WRITE:/ ls_content_temp-line.
  ENDLOOP.

https://blog.csdn.net/xiefireworks/article/details/131610467

PS:展示效果及发送邮件格式较为简陋

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/782685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有关动态内存管理的笔试题

题目一&#xff1a; void GetMemory(char* p) {p (char*)malloc(100); }void test(void) {char* str NULL;GetMemory(str);strcpy(str, "hello world");printf(str); }int main() {test();return 0; } 请问上述代码输出结果是什么&#xff0c;理由是什么&#xf…

leetcode 90. 子集 II

2023.7.23 这道题是上一题子集的升级版&#xff0c;即数组nums包含了相同的元素&#xff0c;这时候需要对集合之间进行去重&#xff0c;可以参考这一题组合总和II的去重方法。 下面直接上代码&#xff1a; class Solution { public:vector<vector<int>> ans;vecto…

Qt QToolBar 添加 换行 添加到底部 左侧 右侧

1. 常用添加&#xff1a; #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);QToolBar *toolBar addToolBar(t…

查找和二叉树(基础知识和基本操作)

查找&#xff1a; 1.二分查找&#xff1a;先定一个大范围&#xff0c;想一个数&#xff0c;看是在起始范围到中间范围还是中间范围到结束范围&#xff0c;依次循环直到确定值&#xff08;相当于一直把范围折半&#xff0c;直到找到&#xff09; while(low<high) {int mid(…

一元多项式的表示及相加

实现思路&#xff1a; 通过链表实现&#xff0c;会更为简单直观。用链表中的每个结点表示多项式中的每一项&#xff0c;多项式每一项都是由数据域&#xff08;包含系数和指数&#xff09;和指针域构成的&#xff0c;所以在定义表示结点的结构体时&#xff0c;可如下所示进行定义…

【Ansible 自动化配置管理实践】01、Ansible 快速入门

目录 一、Ansible 快速入门 1.1 什么是 Ansible ​1.2 Ansible 主要功能 1.3 Ansible 的特点 1.4 Ansible 基础架构 二、Ansible 安装与配置 2.1 Ansible 安装 2.2 确认安装 三、Ansible 配置解读 3.1 Ansible 配置路径 3.2 Ansible 主配置文件 3.3 Ansi…

PHP后台登录功能单账号登录限制

PHP后台登录功能单账号登录限制 单账号登陆是什么第一步创建数据表第二步创建登录页面test2.html第三步创建登录提交test2.php第四步访问后台首页第五步演示 单账号登陆是什么 一个用户只能登录一个账号通常被称为单账号登录限制或单用户单账号限制。这意味着每个用户只能使用…

TCP通信 -- 接收并反馈(全)

TCP通信整体过程&#xff1a; 1.【服务端】启动,创建ServerSocket对象&#xff0c;等待连接。2.【客户端】启动,创建Socket对象&#xff0c;请求连接。3.【服务端】接收连接,调用accept方法&#xff0c;并返回一个Socket对象。4.【客户端】Socket对象&#xff0c;获取OutputStr…

JVM之内存与垃圾回收篇3

文章目录 8 垃圾回收8.1 基本理论8.1.1 对象的finalization机制8.1.2 理解System.gc8.1.3 内存溢出和内存泄漏8.1.4 Stop The World8.1.5 安全点和安全区域8.1.6 Java中的引用 8.2 垃圾回收算法8.2.1 引用计数法8.2.2 可达性分析8.2.2.1 使用MAT查看GC Roots8.2.2.2 使用JProfi…

【docker,typeorm】docker时区与本地时区的不同步【已解决】

前言 我使用账号登陆vuecms.cn网站&#xff0c;查看登陆日志&#xff0c;发现所有时间全部少8个小时。懵逼树上懵逼果&#xff0c;懵逼树下你和我… 我的开源网站后端是基于nestjs&#xff0c;数据库使用typeorm进行连接操作 原因分析&#xff1a; 原因一: docker环境与本地环…

结构型设计模式之适配器模式【设计模式系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…

Type [unknown] not present(主要问题是jar冲突)

解决方案&#xff1a;1选择pom.xml 2鼠标移动到打开的pom.xml点击右键选择maven 显示图 3ctrl鼠标左键移动找到红线 可以看到引入冲突 4按照实际需求对pom.xml的引入进行增删或者版本升级降级&#xff0c;直到以下图标中没有红线冲突即可

SQL注入 三范式

学习目标 了解三范式的要求 1. 什么是范式 设计关系数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数据库&#xff0c;这些不同的规范要求被称为不同的范式&#xff0c;各种范式呈递次规范&#xff0c;越高的范式数据库冗余越小。 实际上家用电器都有…

香农极限是如何影响光纤容量的

1 引言 上世纪末&#xff0c;DWDM技术开始在干线通信中使用并迅速普及。虽然当时DWDM系统的容量只有402.5G&#xff0c;但实验室中DWDM支持的波道数甚至超过了1000波&#xff0c;单波道速率也飙到了惊人的160G&#xff08;超1000波和单波160G是两个独立事件&#xff09;。人们普…

docker快速搭建并使用Zabbix

docker搭建并使用Zabbix 0 zabbix基础知识 zabbix-server zabbix 的server 端&#xff0c;负责接收agent发送过来的监控数据&#xff0c;并且提供zabbix的所有核心功能。database 用于存储监控数据和配置信息的数据库&#xff0c;目前常用的有mysql和postgresql两种数据库。za…

【AutoSAR应用软件设计】

AutoSAR总体架构 是本文讲解内容。 接口类型 AUTOSAR接口 –SWCs和/或BSW模块交换的信息–独立于实施/网络/硬件–端口接口 标准化AUTOSAR接口 –AUTOSAR接口–标准化的语法和语义–标准化端口接口 标准化接口 –标准化API–通常为特定编程语言&#xff08;“C”&#x…

火狐浏览器鼠标点击页面区域文字时,出现光标的问题

点击一些资源卡片和查看别的页面时&#xff0c;发现点击非输入框的地方&#xff0c;出现了光标&#xff0c;误以为光标处可以填写东西&#xff0c;就试着敲了几次键盘&#xff0c;发现没有任何反应&#xff1b;然后就叫开发那个页面的同事过去看看&#xff1b;那个同事按F12各种…

如何监控Linux和Oracle数据库运行状态

背景: 在生产环境中,一般可能会发生服务器宕机或者数据库宕机的情况,如何准确的把握找准”生产事故“的具体发生时间,其实有很多方法,可以借助第三方的监控软件或者其他收费软件。 但是本人就是穷逼一个,不可能买或者使用盗版的三方软件。所有设计了以下流程检测Linux和…

16_LinuxINPUT子系统

目录 input子系统简 input驱动编写流程 注册input_dev 上报输入事件 input_event结构体 按键input驱动程序编写 编写测试APP 运行测试 input子系统简 按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux内核为此专门做了一个叫做input子系统的框架来处理输入事件。…

node中间件-express框架

文章目录 前置 Express安装1. 基本使用2. 中间件2.1 中间件应用 3. 中间件的注册方式3.1 普通中间件的注册3.2 path匹配中间件3.3 method与路径匹配3.4 案列中间件匹配与执行方法 4. 中间件request数据解析4.1 解析request body中间件4.2 urlencoded解析 5. 第三方中间件5.1 mo…