SAP系统监控

&---------------------------------------------------------------------
*& Report ZSAP_BASIS_MONITOR
*&
&---------------------------------------------------------------------
*&
*&
&---------------------------------------------------------------------

REPORT ZSAP_BASIS_MONITOR.

  • global
    DATA: gt_message LIKE TABLE OF zreport WITH HEADER LINE,
    lv_message TYPE char100,
    lv_user_cnt TYPE sy-dbcnt,
    lv_typem03_cnt TYPE sy-dbcnt,
    lv_typem05_cnt TYPE sy-dbcnt,
    lv_typem06_cnt TYPE sy-dbcnt,
    lv_status_cnt TYPE sy-dbcnt,
    lv_reason_cnt TYPE sy-dbcnt,
    lv_st22_cnt TYPE sy-dbcnt,
    i_to_string TYPE string,
    s_to_int TYPE i.

  • mail

  • DATA:

  • lt_content TYPE  soli_tab,
    
  • lv_mail TYPE string,
    
  • lwa_ret TYPE bapireturn.
    
  • sms
    DATA:
    lc_sms_sap TYPE REF TO zytsmsco_smsapi, "接口名称
    lwa_input TYPE zytsmssend_sms, "方法传入参数
    lwa_output TYPE zytsmssend_smsresponse. "方法传出参数
    DATA: l_obj_system TYPE REF TO cx_ai_system_fault,
    l_error_system TYPE string.
    DATA: l_obj_appl TYPE REF TO cx_ai_application_fault,
    l_error_appl TYPE string,
    lc_exc_ref2 TYPE REF TO cx_ai_system_fault,
    lv_error_text TYPE string.

  • SM66
    DATA: gt_list LIKE TABLE OF abaplist WITH HEADER LINE,
    gt_zreport LIKE TABLE OF zreport WITH HEADER LINE.

DATA:
BEGIN OF gh_sm66_list,
name TYPE char100," 名称
wpno TYPE char100,"工作处理号
type TYPE char100,"类型处理
pid TYPE char100,"PID
status TYPE char100,"状态
reason TYPE char100,"stopped或者debug
sem TYPE char100,"信号号码
start TYPE char100,"是否启动
error TYPE char100,"报错数量
cpu TYPE char100,"CPU
time TYPE char100,"执行时间
user TYPE char100,"用户
report TYPE char100,"报告
action TYPE char100,"动作
table TYPE char100,"表
END OF gh_sm66_list,
gt_sm66_list LIKE STANDARD TABLE OF gh_sm66_list.

  • ST22
    DATA:
    BEGIN OF wa_m08,
    st22_user TYPE snap_beg-uname, "ST22对应的user name
    dump_cnt TYPE SY-DBCNT,
    END OF wa_m08.
    DATA itabm08 LIKE TABLE OF wa_m08 WITH HEADER LINE.

  • SM37
    DATA:
    BEGIN OF wa_m12,
    jobname TYPE TBTCO-JOBNAME,
    jobcount TYPE TBTCO-JOBCOUNT,
    END OF wa_m12.
    DATA itabm12 LIKE TABLE OF wa_m12 WITH HEADER LINE.
    --------------------------------------------------------------------

  • START-OF-SELECTION.
    --------------------------------------------------------------------
    SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.

PARAMETERS:

  • SM66 begin
    M02_NO TYPE I DEFAULT 20, " 用户work process阀值
    M03_NO TYPE I DEFAULT 10, " UPD&UPD2总共work process阀值
    M04_NO TYPE I DEFAULT 5, " PRIV总共work process阀值
    M05_NO TYPE I DEFAULT 30, " BTC总共work process阀值
    M06_NO TYPE I DEFAULT 10, " 用户BTC work process阀值
    M07_NO TYPE I DEFAULT 5, " Stopped&Debuged work process阀值
    WT_SM66 AS CHECKBOX DEFAULT ‘X’, " 监控只在工作时间生效
  • SM66 end
    M08_NO TYPE I DEFAULT 100, "ST22 一天内用户short dumps阀值
    M09_NO1 TYPE I DEFAULT 50, M09_NO2 TYPE I DEFAULT 5, "ST22 几分钟内short dumps阀值
    WT_ST22 AS CHECKBOX DEFAULT ‘X’, " 监控只在工作时间生效
    M10_NO TYPE I DEFAULT 20, "SMLG 实例Resp.time(ms)阀值
    M11_NO TYPE I DEFAULT 10, "SMLG 实例用户登录数阀值
    WT_SM37 AS CHECKBOX DEFAULT ‘X’, " 监控只在工作时间生效
  • sms begin
    sysid(3) TYPE c DEFAULT ‘PRD’,
    username(30) TYPE c DEFAULT ‘YTCWBX’,
    pwd(30) TYPE c DEFAULT ‘YTCWBX’,
    phone_no(64) TYPE c DEFAULT ‘15927211294’.
  • sms end
    SELECTION-SCREEN:END OF BLOCK b1.

CONDENSE sysid NO-GAPS.
CONDENSE username NO-GAPS.
CONDENSE pwd NO-GAPS.
CONDENSE phone_no NO-GAPS.

*给方法输入参数值
lwa_input-sysid = sysid. "系统标识
lwa_input-username = username. "user
lwa_input-pwd = pwd. "pwd
lwa_input-phone_nos = phone_no. "手机号 ,号分割,

IF ( WT_SM66 = ‘X’ AND SY-UZEIT >= ‘070000’ AND SY-UZEIT <= ‘180000’) OR WT_SM66 <> ‘X’.
SUBMIT sapmsm66
EXPORTING LIST TO MEMORY
AND RETURN.

CALL FUNCTION 'LIST_FROM_MEMORY'
  TABLES
    listobject = gt_list
  EXCEPTIONS
    not_found  = 1
    OTHERS     = 2.

CALL FUNCTION 'LIST_TO_ASCI'
  EXPORTING
    list_index         = -1
  TABLES
    listasci           = gt_zreport
    listobject         = gt_list
  EXCEPTIONS
    empty_list         = 1
    list_index_invalid = 2
    OTHERS             = 3.

IF sy-subrc <> 0.
  " 信息清单提取失败
  MESSAGE s000(00) WITH text-m01.

ELSE.
  " 读取清单中数据信息内容
  PERFORM frm_get_list_info.

  " 检查清单中数据信息内容
  PERFORM frm_check_list_info.
ENDIF.

ENDIF.

IF ( WT_ST22 = ‘X’ AND SY-UZEIT >= ‘070000’ AND SY-UZEIT <= ‘180000’) OR WT_ST22 <> ‘X’.
PERFORM get_st22.
ENDIF.

IF ( WT_SM37 = ‘X’ AND SY-UZEIT >= ‘070000’ AND SY-UZEIT <= ‘180000’) OR WT_SM37 <> ‘X’.
PERFORM get_sm37.
ENDIF.

PERFORM VRM_SET_VALUES.

PERFORM send_sms.

--------------------------------------------------------------------

  • START-OF-SELECTION.
    --------------------------------------------------------------------
    END-OF-SELECTION.

&---------------------------------------------------------------------
*& Form FRM_GET_LIST_INFO
&---------------------------------------------------------------------

  •   读取清单中数据信息内容
    

----------------------------------------------------------------------
FORM frm_get_list_info .
DATA:
BEGIN OF lh_col,
val TYPE char100,
END OF lh_col,
lt_col LIKE STANDARD TABLE OF lh_col.

LOOP AT gt_zreport[] INTO gt_zreport.
IF gt_zreport-line+0(10) = ‘Sort: Time’.
CONTINUE.
ELSEIF gt_zreport-line+0(10) = ‘----------’.
CONTINUE.
ELSEIF gt_zreport-line+0(15) = ‘排序: 服务器’.
CONTINUE.
ELSEIF gt_zreport-line+0(15) = ‘| 清单中没有数据’.
CONTINUE.

  • ELSEIF gt_zreport-LINE+0(12) = ‘|Server Name’.

  •  CONTINUE.
    

    ELSEIF gt_zreport-line+0(12) = ‘’.
    CONTINUE.
    ELSE.
    SHIFT gt_zreport-line.
    SPLIT gt_zreport-line AT ‘|’
    INTO TABLE lt_col.
    CLEAR gh_sm66_list.
    LOOP AT lt_col INTO lh_col.
    CASE sy-tabix.
    WHEN 1.
    gh_sm66_list-name = lh_col-val.
    WHEN 2.
    gh_sm66_list-wpno = lh_col-val.
    WHEN 3.
    gh_sm66_list-type = lh_col-val.
    WHEN 4.
    gh_sm66_list-pid = lh_col-val.
    WHEN 5.
    gh_sm66_list-status = lh_col-val.
    WHEN 6.
    gh_sm66_list-reason = lh_col-val.
    WHEN 7.
    gh_sm66_list-sem = lh_col-val.
    WHEN 8.
    gh_sm66_list-start = lh_col-val.
    WHEN 9.
    gh_sm66_list-error = lh_col-val.
    WHEN 10.
    gh_sm66_list-cpu = lh_col-val.
    WHEN 11.
    gh_sm66_list-time = lh_col-val.
    WHEN 12.
    gh_sm66_list-user = lh_col-val.
    WHEN 13.
    gh_sm66_list-report = lh_col-val.
    WHEN 14.
    gh_sm66_list-action = lh_col-val.
    WHEN 15.
    gh_sm66_list-table = lh_col-val.
    WHEN OTHERS.
    ENDCASE.
    ENDLOOP.
    APPEND gh_sm66_list TO gt_sm66_list.
    CLEAR gh_sm66_list.
    ENDIF.

    ENDLOOP.

ENDFORM. " FRM_GET_LIST_INFO

&---------------------------------------------------------------------
*& Form FRM_DISPLAY_ALV
&---------------------------------------------------------------------

  •   展示SM66数据信息
    

----------------------------------------------------------------------
FORM frm_display_alv .
DATA:
lr_alv TYPE REF TO zcl_alv_utility.

CREATE OBJECT lr_alv
EXPORTING
pi_table = gt_sm66_list.
lr_alv->display_lvc( ).
ENDFORM. " FRM_DISPLAY_ALV

&---------------------------------------------------------------------
*& Form FRM_CHECK_LIST_INFO
&---------------------------------------------------------------------

  •   检查清单中数据信息内容
    

----------------------------------------------------------------------
FORM frm_check_list_info .
DATA:
lh_sm66_list LIKE gh_sm66_list.

  • 监控 M02 - M07 begin -------------------------------------------------------------
    CLEAR: lv_user_cnt, lv_typem03_cnt, lv_typem05_cnt, lv_typem06_cnt, lv_reason_cnt, lv_status_cnt .
    SORT gt_sm66_list[] BY user.
    LOOP AT gt_sm66_list[] INTO gh_sm66_list.
    MOVE-CORRESPONDING gh_sm66_list TO lh_sm66_list.
    AT NEW user.
    CLEAR: lv_user_cnt, lv_typem06_cnt.
    ENDAT.
    ADD 1 TO lv_user_cnt.

  • summary M06 message begin -----------------------------------------------------
    IF lh_sm66_list-type = ‘BTC’.
    ADD 1 TO lv_typem06_cnt.
    ENDIF.
    IF lv_typem06_cnt = M06_NO.
    lv_message = text-m06.
    REPLACE ‘&1’ IN lv_message WITH lh_sm66_list-user.
    i_to_string = M06_NO.
    REPLACE ‘&2’ IN lv_message WITH i_to_string.
    CLEAR: i_to_string .
    APPEND lv_message TO gt_message. "M02短信内容
    ENDIF.

  • summary M06 message end -------------------------------------------------------

  • summary M02 message begin -----------------------------------------------------
    AT END OF user.
    IF lv_user_cnt > M02_NO.
    lv_message = text-m02.
    REPLACE ‘&1’ IN lv_message WITH lh_sm66_list-user.
    i_to_string = M02_NO.
    REPLACE ‘&2’ IN lv_message WITH i_to_string.
    CLEAR: i_to_string .
    APPEND lv_message TO gt_message. "M02短信内容

  •    APPEND lh_sm66_list TO lt_content .
      " 用户 &1 的进程数超过20个!
    
  •   send mail begin ----------------------------------------------------------
    
  •   MESSAGE s001(00) WITH LV_MESSAGE.
    
  •    lv_mail = '[email protected]'.
    
  •    REFRESH lt_content .
    
  •    CALL FUNCTION 'ZYT_SEND_MAIL'
    
  •      EXPORTING
    
  •        im_to            = lv_mail
    
  •       IM_CC            =
    
  •        im_sub           = '用户进程数超过20个'
    
  •     IMPORTING
    
  •        ex_ret           = lwa_ret
    
  •      TABLES
    
  •        im_content       = lt_content.
    ENDIF.
    

    ENDAT.

  • summary M02 message end -------------------------------------------------------

  • summary M03 message begin ------------------------------------------
    IF lh_sm66_list-type = ‘UPD’ OR lh_sm66_list-type = ‘UPD2’.
    ADD 1 TO lv_typem03_cnt.
    ENDIF.
    IF lv_typem03_cnt = M03_NO.
    lv_message = text-m03.
    i_to_string = M03_NO.
    REPLACE ‘&1’ IN lv_message WITH i_to_string.
    CLEAR: i_to_string .
    APPEND lv_message TO gt_message. "M03短信内容
    ENDIF.

  • summary M03 message end -------------------------------------------

  • summary M04 message begin -----------------------------------------
    IF lh_sm66_list-reason = ‘PRIV’.
    ADD 1 TO lv_reason_cnt.
    ENDIF.
    IF lv_reason_cnt = M04_NO.
    lv_message = text-m04.
    i_to_string = M04_NO.
    REPLACE ‘&1’ IN lv_message WITH i_to_string.
    CLEAR: i_to_string .
    APPEND lv_message TO gt_message. "M04短信内容
    ENDIF.

  • summary M04 message end --------------------------------------------

  • summary M05 message begin ------------------------------------------
    IF lh_sm66_list-type = ‘BTC’.
    ADD 1 TO lv_typem05_cnt.
    ENDIF.
    IF lv_typem05_cnt = M05_NO.
    lv_message = text-m05.
    i_to_string = M05_NO.
    REPLACE ‘&1’ IN lv_message WITH i_to_string.
    CLEAR: i_to_string .
    APPEND lv_message TO gt_message. "M05短信内容
    ENDIF.

  • summary M05 message end ----------------------------------------------

  • summary M07 message begin --------------------------------------------
    IF lh_sm66_list-status = ‘Stopped’ OR lh_sm66_list-status = ‘Debug’ .
    ADD 1 TO lv_status_cnt.
    ENDIF.
    IF lv_status_cnt = M07_NO.
    lv_message = text-m07.
    i_to_string = M07_NO.
    REPLACE ‘&1’ IN lv_message WITH i_to_string.
    CLEAR: i_to_string .
    APPEND lv_message TO gt_message. "M07短信内容
    ENDIF.
    *summary M07 message end -------------------------------------------------

ENDLOOP.

  • 监控 M02 - M07 end -------------------------------------------------------------
    ENDFORM. " FRM_CHECK_LIST_INFO

FORM get_st22.
clear: lv_st22_cnt.
select uname as ST22_USER
COUNT(*) as DUMP_CNT
INTO CORRESPONDING FIELDS OF TABLE itabm08 FROM snap_beg
where seqno = ‘000’
and datum = SY-DATUM
and flist not like ‘%MESSAGE_TYPE_X%’
and flist not like ‘%TIME_OUT%’
group by uname.
LOOP AT itabm08[] INTO wa_m08.
IF wa_m08-dump_cnt > M08_NO.
lv_message = text-m08.
clear i_to_string.
i_to_string = wa_m08-dump_cnt…
REPLACE ‘&1’ IN lv_message WITH wa_m08-st22_user.
REPLACE ‘&2’ IN lv_message WITH i_to_string.
APPEND lv_message TO gt_message. "M08短信内容
ENDIF.
ENDLOOP.

data: lv_time1 type SY-UZEIT, sec type I.
sec = M09_NO2 * 60.
lv_time1 = SY-UZEIT - sec.
select COUNT(*) from snap_beg into lv_st22_cnt
where seqno = ‘000’
and uzeit between lv_time1 and SY-UZEIT
and flist not like ‘%MESSAGE_TYPE_X%’
and flist not like ‘%TIME_OUT%’.

IF lv_st22_cnt > M09_NO1.
lv_message = text-m09.
i_to_string = M09_NO1.
REPLACE ‘&1’ IN lv_message WITH i_to_string.
CLEAR: i_to_string .
i_to_string = M09_NO2.
REPLACE ‘&2’ IN lv_message WITH i_to_string.
CLEAR: i_to_string .
APPEND lv_message TO gt_message. "M09短信内容
ENDIF.
ENDFORM.

FORM get_smlg.

ENDFORM.

FORM get_sm37.
data: lv_date1 type SY-DATUM.
lv_date1 = SY-DATUM - 1.
select jobname jobcount INTO CORRESPONDING FIELDS OF TABLE itabm12 FROM tbtco
where jobname like ‘%MRP%’ and strtdate between lv_date1 and SY-DATUM. "作业实际开始日期

LOOP AT itabm12[] INTO wa_m12.
DATA: abort TYPE c,
finish TYPE c,
prelim TYPE c,
ready TYPE c,
run TYPE c,
sched TYPE c.

  clear: abort, finish, prelim, ready, run,  sched.

  CALL FUNCTION 'SHOW_JOBSTATE'
      EXPORTING
        jobcount         = wa_m12-jobcount
        jobname          = wa_m12-jobname
      IMPORTING
        aborted          = abort
        finished         = finish
        preliminary      = prelim
        ready            = ready
        running          = run
        scheduled        = sched
      EXCEPTIONS
        jobcount_missing = 1
        jobname_missing  = 2
        job_notex        = 3
        OTHERS           = 4.
  IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  •  WRITE :
    
  •      / 'Canceled              :' , abort ,
    
  •      / 'Finished              :' , finish,
    
  •      / 'Scheduled Temporarily :' , prelim,
    
  •      / 'Ready for Execution   :' , ready,
    
  •      / 'Active                :' , run,
    
  •      / 'Scheduling Released   :' , sched.
    
    IF abort = 'X'.
      lv_message = text-m12.
      REPLACE '&1' IN lv_message WITH wa_m12-jobname.
      APPEND lv_message TO gt_message.             "M12短信内容
    ENDIF.
    

    ENDLOOP.

ENDFORM.

&---------------------------------------------------------------------
*& Form VRM_SET_VALUES
&---------------------------------------------------------------------

  •   调试数据信息
    

----------------------------------------------------------------------
FORM VRM_SET_VALUES .
LOOP AT gt_message[] into lv_message.
WRITE lv_message.
ENDLOOP.
ENDFORM. " VRM_SET_VALUES

  • send sms message begin ------------------------------
    FORM send_sms.
    LOOP AT gt_message[] INTO gt_message.
    IF gt_message-line+0(10) = ‘’.
    CONTINUE.
    ELSE.
    lwa_input-message = gt_message-line.
    ENDIF.

    TRY.
    CREATE OBJECT lc_sms_sap
    EXPORTING
    logical_port_name = ‘LP01’.
    CATCH cx_ai_system_fault INTO lc_exc_ref2.
    lv_error_text = lc_exc_ref2->get_text( ).
    ENDTRY.
    IF sy-subrc <> 0 OR lv_error_text IS NOT INITIAL.
    MESSAGE ‘端口连接失败’ TYPE ‘E’.
    EXIT .
    ENDIF.
    TRY.
    CALL METHOD lc_sms_sap->send_sms
    EXPORTING
    input = lwa_input
    IMPORTING
    output = lwa_output.

    CATCH cx_ai_system_fault INTO l_obj_system.
    CALL METHOD l_obj_system->if_message~get_text
    RECEIVING
    result = l_error_system.

    CATCH cx_ai_application_fault INTO l_obj_appl.
    CALL METHOD l_obj_appl->if_message~get_text
    RECEIVING
    result = l_error_appl.
    ENDTRY.
    ENDLOOP.
    ENDFORM.

  • send sms message end ------------------------------

猜你喜欢

转载自blog.csdn.net/qq_41468794/article/details/88184826