当前位置: 首页 > article >正文

SAP服务器进程预警通知

在财务月结,HR薪资核算等系统用户集中使用高峰时期。通过判断判断当前系统可用的并行对话框进程数,用户使用过多给出提示,服务器进程预警通知。

1. 根据配置的进程最大可使用率80%,根据进程数判断:当进程可用数少于20%,提示报错【初始化服务器组时,或系统进程高负载】

2. 根据配置的服务器响应时间(ms),获取服务器列表最新数据 ,超出最大响应时间,给出报警提示用户 系统响应慢 ,请稍后再试。

3. 根据CPU判断:如当CPU超出80%,提示 报错

FUNCTION zhrfm_judge_work_process.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(GROUP_NAME) TYPE  RZLLITAB-CLASSNAME DEFAULT SPACE
*"  EXPORTING
*"     VALUE(ES_MESG) TYPE  ZSHR_MESSAGE
*"     REFERENCE(IDLE_CPU) TYPE  ALPNEWVALS
*"----------------------------------------------------------------------

  DATA: ls_pm01 TYPE zthr_pm01.

  SELECT SINGLE * FROM zthr_pm01 INTO ls_pm01.


**************************************************************************************
*                   一、根据进程数判断:当进程可用数少于20%,提示报错
**************************************************************************************
  DATA: lv_max     TYPE i,
        lv_free    TYPE i,
        lv_percent TYPE p DECIMALS 2.

  IF ls_pm01-proc_switch = 'X'.
    CALL FUNCTION 'SPBT_INITIALIZE'
      EXPORTING
        group_name                     = ' '
      IMPORTING
        max_pbt_wps                    = lv_max
        free_pbt_wps                   = lv_free
      EXCEPTIONS
        invalid_group_name             = 1
        internal_error                 = 2
        pbt_env_already_initialized    = 3
        currently_no_resources_avail   = 4
        no_pbt_resources_found         = 5
        cant_init_different_pbt_groups = 6
        OTHERS                         = 7.
    IF sy-subrc = 4.
      es_mesg-msgty = 'E'.
      es_mesg-msgtx = '当前查询人员过多,初始化服务器组时出现错误,请稍后再试!'.
      RETURN.
    ENDIF.

    IF lv_max NE 0.
      lv_percent = ( lv_free / lv_max ) * 100.
      IF lv_percent LT ( 100 - ls_pm01-proc_num ).
        es_mesg-msgty = 'E'.
        es_mesg-msgtx = '当前查询人员过多,系统进程高负载,请稍后再试!'.
        RETURN.
      ENDIF.
    ENDIF.

  ENDIF.

**************************************************************************************
*                   一、根据进程数判断:当进程可用数少于20%,提示报错
**************************************************************************************
  DATA intg_tbl TYPE TABLE OF salstintg WITH HEADER LINE.
  DATA intg_tbl_pi TYPE TABLE OF salstintg WITH HEADER LINE.

  DATA:intg_tbl_mail TYPE TABLE OF salstintg WITH HEADER LINE.

  DATA :g_max_time  TYPE int4, "报警响应时间
        lv_sum_time TYPE int4.

  CLEAR intg_tbl_mail[].

  IF ls_pm01-response_switch = 'X'.

    g_max_time = ls_pm01-response_time."报警响应时间

    "获取服务器列表
    CALL FUNCTION 'RZL_STRG_READALL_I'
      EXPORTING
        srvname  = 'MSGSERVER'
      TABLES
        intg_tbl = intg_tbl
      EXCEPTIONS
        OTHERS   = 01.


    "刷新每个服务器数据
    LOOP AT intg_tbl WHERE value1 = 7353.
      CALL FUNCTION 'RZL_STRG_DEL'
        EXPORTING
          srvname = intg_tbl-name
          name    = 'FAV_COMPUTE_LGIN'
          typ     = 'C'
        EXCEPTIONS
          OTHERS  = 01.

      CALL FUNCTION 'RZL_SUBMIT'
        DESTINATION intg_tbl-name
        EXPORTING
          repid  = 'RSRZLLG0'
        EXCEPTIONS
          OTHERS = 01.
    ENDLOOP.

    "重新获取最新的数据
    CLEAR intg_tbl[].

    CALL FUNCTION 'RZL_STRG_READALL_I'
      EXPORTING
        srvname  = 'MSGSERVER'
      TABLES
        intg_tbl = intg_tbl
      EXCEPTIONS
        OTHERS   = 01.

    DATA lv_num TYPE i.
    CLEAR lv_num.
    LOOP AT intg_tbl WHERE value1 = 7353.   " AND VALUE5 = 3537.  "Yue
      lv_sum_time = lv_sum_time + intg_tbl-value2.
      IF intg_tbl-value2 GE '1000'.
        lv_num = lv_num + 1.
      ENDIF.
    ENDLOOP.

    IF lv_sum_time > g_max_time.
      es_mesg-msgty = 'E'.
      es_mesg-msgtx = '当前查询人员过多,系统响应慢,请稍后再试!'.
      RETURN.
    ENDIF.
    IF lv_num GE '3'.
      es_mesg-msgty = 'E'.
      es_mesg-msgtx = '当前查询人员过多,系统响应慢,请稍后再试!'.
      RETURN.
    ENDIF.
  ENDIF.

**************************************************************************************
*                   三、根据CPU判断:当CPU少于50%、80%,提示 报错
**************************************************************************************
*  DATA: lv_max     TYPE i,
*        lv_free    TYPE i,
*        lv_percent TYPE p DECIMALS 2.

  IF ls_pm01-proc_switch = 'X'.

*   CALL FUNCTION 'GET_CPU_ALL'.

    DATA lt_ccm_data TYPE TABLE OF ccm_data.
    DATA ls_ccm_data TYPE  ccm_data.
    DATA lv_dest_logical TYPE rfcdes-rfcdest.

    CONCATENATE sy-host '_' sy-sysid '_00'INTO  lv_dest_logical.  "ehr01-m-szzb   SY-PAUTH

*    lv_dest_logical = sy-title+4(19).

    CALL FUNCTION 'GET_CCM_DATA'
      EXPORTING
*       LOCAL_REMOTE                   = 'LOCAL'
        logical_destination            = lv_dest_logical  " ehr01-m-szzb_RP1_00
* IMPORTING
*       F_CCM_DATA_READ                =
*       ACTIVEFLAG                     =
*       INTERVAL                       =
*       DETAILSCOLL                    =
*       DETAILSREQI                    =
*       DETAILSMODE                    =
*       LASTCOLLWRT                    =
*       LASTCOLLINT                    =
*       NORMCOLLINT                    =
      TABLES
        tf_ccm_data                    = lt_ccm_data
      EXCEPTIONS
        internal_error_adress_failed   = 1
        internal_error_different_field = 2
        internal_error_no_new_line     = 3
        collector_not_running          = 4
        shared_memory_not_available    = 5
        collector_busy                 = 6
        version_conflict               = 7
        no_network_collector_running   = 8
        system_failure                 = 9
        communication_failure          = 10
        OTHERS                         = 11.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.

    IF lt_ccm_data[] IS NOT INITIAL.

      CLEAR ls_ccm_data.
      READ TABLE lt_ccm_data INTO ls_ccm_data WITH  KEY objectname = 'CPU'  attributename = 'Idle' mteclass = 'CPU_Idle'.   " CPU_UsageUser
      IF sy-subrc = 0.
*        DATA lv_idle2(5).
*        DATA(lv_idle) =   ls_ccm_data-perf_snap_total / ls_ccm_data-perf_snap_number / 10 ** ls_ccm_data-perf_decimals.
*        WRITE lv_idle TO lv_idle2 DECIMALS ls_ccm_data-perf_decimals.

        idle_cpu = ls_ccm_data-perf_snap_total.

*        IF ls_ccm_data-perf_snap_total LE '50'." AND ls_ccm_data-perf_snap_total GT '20' .   " Idle CPU
**          idle_cpu = 'A'.
*        ENDIF.
*        IF ls_ccm_data-perf_snap_total LE '20' .   " Idle CPU
*          idle_cpu = 'B'.
**          es_mesg-msgty = 'E'.
**          es_mesg-msgtx = '当前操作人员过多,请稍后再试!'.
*        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.

ENDFUNCTION.


http://www.kler.cn/a/576481.html

相关文章:

  • 类和对象—多态—案例2—制作饮品
  • 基于javaweb的SpringBoot学生在线考试管理系统设计和实现(源码+文档+部署讲解)
  • 使用Ajax完成与后台服务器的数据交互
  • React基础之useMeno
  • 01计算机视觉学习计划
  • 【算法】矩阵置零
  • 责任链模式+策略模式在项目中的实践
  • ​‌uniqid()函数‌是PHP中用于生成唯一标识符的内置函数​
  • 自学微信小程序的第十四天
  • 前端算法库CryptoJS 有哪些格式转换
  • 【大学生体质】智能 AI 旅游推荐平台(Vue+SpringBoot3)-完整部署教程
  • 2025年03月07日Github流行趋势
  • 【PostgreSQL】如何免密使用PostgreSQL数据库内置工具
  • vue3页面html导出word文档
  • android studio开发文档
  • HarmonyOS 应用程序包结构 (编译态)
  • 低代码平台的后端架构设计与核心技术解析
  • Spring面试问答
  • 鸿蒙生态日日新,夸克、顺丰速运、驾校一点通等多款应用功能更新
  • MC9S12单片机上电初始化过程及BOOTLOADER分析