SAP PI系统响应时间监控, PI响应时间超出一定阈值,邮件提醒相关开发监控人员。
1. 系统响应时间监控
************************************************************************
* TRANSATION ID :
* PROGRAM TITLE : ZABR017
* AUTHOR :
* SUPPLIER :
* DATE :
* DEVELOPMENT ID : ZABR017
* CHANGE REQUEST (CTS) :
* DESCRIPTION :
*=======================================================================
* COPIED FROM : (CLONED PROGRAM)
* TITLE : (PROGRAM TITLE)
* OTHER RELATED OBJ : (OBJECT NAMES)
*=======================================================================
* CHANGE HISTORY LOG
*-----------------------------------------------------------------------
* MOD. NO.| DATE | NAME | CORRECTION NUMBER | CHANGE REFE
*-----------------------------------------------------------------------
* MOD-001 |YYYY.MM.DD| XXXXXXXXXXXXXX | XXXXXXXXXX | XXXXXXXXXX
*
* DESCRIPTION:
*-----------------------------------------------------------------------
* MOD-002 |YYYY.MM.DD| XXXXXXXXXXXXXX | XXXXXXXXXX | XXXXXXXXXX
*
* DESCRIPTION:
************************************************************************
REPORT zabr017 MESSAGE-ID 00 NO STANDARD PAGE HEADING.TABLES:adr6.
DATA lt_ztab014 TYPE TABLE OF ztab014.
DATA ls_ztab014 TYPE ztab014.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.
*----------------------------------------------------------------------*
* SELECTION-SCREEN *
*----------------------------------------------------------------------*
PARAMETERS:
p_time TYPE int4 DEFAULT 1000.
SELECT-OPTIONS:
s_email FOR adr6-smtp_addr NO INTERVALS.*----------------------------------------------------------------------*
* INITIALIZATION *
*----------------------------------------------------------------------*
INITIALIZATION.*--------------------------------------------------------------------- *
* AT SELECTION-SCREEN OUTPUT *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.*----------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*----------------------------------------------------------------------**----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION."报警响应时间
g_max_time = p_time.CLEAR intg_tbl_mail[].
"获取服务器列表
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.
LOOP AT intg_tbl WHERE value1 = 7353. " AND VALUE5 = 3537. "YueIF intg_tbl-value2 > g_max_time.
CLEAR intg_tbl_mail.
intg_tbl_mail = intg_tbl.
APPEND intg_tbl_mail.
ENDIF.ENDLOOP.
MESSAGE 'OK' TYPE 'S'." 调用PI响应时间的逻辑。
IF sy-sysid = 'EP1'.
CALL FUNCTION 'ZGET_RES_TIME_PI0001'DESTINATION 'TO_PI_SYS'
TABLES
intg_tbl = intg_tbl_pi.
LOOP AT intg_tbl_pi WHERE value1 = 7353.
IF intg_tbl_pi-value2 > g_max_time.
CLEAR intg_tbl_mail.
intg_tbl_mail = intg_tbl_pi.
APPEND intg_tbl_mail.
ENDIF.
ENDLOOP.
ENDIF.IF intg_tbl_mail[] IS NOT INITIAL AND s_email[] IS NOT INITIAL.
PERFORM frm_send_email.
ENDIF.*&---------------------------------------------------------------------*
*& Form FRM_SEND_EMAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_send_email .
DATA: l_subject TYPE so_obj_des,
lr_email_body TYPE REF TO cl_document_bcs,
lr_email TYPE REF TO cl_bcs,
l_mail_address TYPE adr6-smtp_addr,
lr_receiver TYPE REF TO cl_cam_address_bcs,
l_sender TYPE REF TO cl_sapuser_bcs,
lo_cx_send_req_bcs TYPE REF TO cx_send_req_bcs,
l_send_result TYPE os_boolean.
DATA: gt_mail_body TYPE soli_tab,
wa_mail_body TYPE soli,
lt_mail_body TYPE soli_tab.
DATA: lt_pernr TYPE zspl_pernr_t,
ls_pernr TYPE zspl_pernr,
lt_pernr_cc TYPE zspl_pernr_t,
ls_pernr_cc TYPE zspl_pernr.
DATA: lo_mr_api TYPE REF TO if_mr_api,
lo_convert TYPE REF TO cl_bcs_convert,
lo_mime_helper TYPE REF TO cl_gbt_multirelated_service,
lt_solix TYPE solix_tab,
l_len TYPE so_obj_len,
lv_is_folder TYPE boole_d,
lv_content TYPE xstring,
lv_loio TYPE skwf_io.
CONSTANTS:
gc_tab TYPE c VALUE cl_bcs_convert=>gc_tab, "CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
gc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf. "CL_ABAP_CHAR_UTILITIES=>CR_LF* 编辑邮件
CLEAR wa_mail_body.
wa_mail_body-line = '<html>'.
APPEND wa_mail_body TO gt_mail_body.CLEAR wa_mail_body.
wa_mail_body-line = '<head>'.
APPEND wa_mail_body TO gt_mail_body.LOOP AT intg_tbl_mail.
IF sy-tabix = 1.
CLEAR wa_mail_body.
wa_mail_body-line = '<meta http-equiv="Content-Type" content="text/html;charset=gb2312">'.
APPEND wa_mail_body TO gt_mail_body.
wa_mail_body-line = '<tr><th colspan="2">' && '应用服务器:' && intg_tbl_mail-name && ',响应时间超标(响应时间): ' && intg_tbl_mail-value2 && '</th></br></tr>'.
APPEND wa_mail_body TO gt_mail_body.CLEAR wa_mail_body.
wa_mail_body-line = '</head>'.
APPEND wa_mail_body TO gt_mail_body.CLEAR wa_mail_body.
wa_mail_body-line = '<body>'.
APPEND wa_mail_body TO gt_mail_body.CONTINUE.
ENDIF.
wa_mail_body-line = '<tr><th colspan="2">' && '应用服务器:' && intg_tbl_mail-name && ',响应时间超标(响应时间): ' && intg_tbl_mail-value2 && '</th></br></tr>'..
APPEND wa_mail_body TO gt_mail_body.
ENDLOOP.CLEAR wa_mail_body.
wa_mail_body-line = '</body>'.
APPEND wa_mail_body TO gt_mail_body.CLEAR wa_mail_body.
wa_mail_body-line = '</html>
远程模块,获取PI响应时间函数
2. 系统响应时间监控报表
REPORT ZABR015 MESSAGE-ID 00 NO STANDARD PAGE HEADING.
INCLUDE ZABR015_TOP.
INCLUDE ZABR015_SCR.
INCLUDE ZABR015_PBO.
INCLUDE ZABR015_PAI.
INCLUDE ZABR015_FRM.
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*& 包含 ZABR015_TOP
*&---------------------------------------------------------------------*
TABLES BKPF.
TYPES BEGIN OF TY_OUTTAB_0100.
TYPES DATUM TYPE SY-DATUM.
TYPES ANSWTIME TYPE I.
TYPES USERNR TYPE I.
TYPES NUM TYPE I.
TYPES ROWCOLOR TYPE C LENGTH 4.
TYPES END OF TY_OUTTAB_0100.
DATA OK_CODE TYPE SY-UCOMM.
DATA ZTABR014 TYPE TABLE OF ZTAB014.
DATA GO_GRID_0100 TYPE REF TO CL_GUI_ALV_GRID.
DATA GO_CONTAINER_0100 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA GS_LAYOUT_0100 TYPE LVC_S_LAYO.
DATA GT_FIELDCAT_0100 TYPE LVC_T_FCAT.
DATA GT_EXCLUBAR_0100 TYPE UI_FUNCTIONS.
DATA GT_HYPERLINK_0100 TYPE LVC_T_HYPE.
DATA GT_SORT_0100 TYPE LVC_T_SORT.
DATA GT_OUTTAB_0100 TYPE TABLE OF TY_OUTTAB_0100.
*&---------------------------------------------------------------------*
*& 包含 ZABR015_SCR
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF SCREEN 0101 AS SUBSCREEN.
SELECT-OPTIONS S_BUDAT FOR BKPF-BUDAT.
SELECTION-SCREEN END OF SCREEN 0101.
*&---------------------------------------------------------------------*
*& 包含 ZABR015_PBO
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS '0100'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module DATA_DISPLAY_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE DATA_DISPLAY_0100 OUTPUT.
PERFORM FRM_ALV_DISPLAY_0100.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZABR015_PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANL'.
CLEAR OK_CODE. LEAVE TO SCREEN 0.
WHEN 'SEARCH'.
PERFORM FRM_GET_DATA.
ENDCASE.
CLEAR OK_CODE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZABR015_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
DATA LS_OUTTAB_0100 TYPE TY_OUTTAB_0100.
CLEAR GT_OUTTAB_0100.
SELECT * INTO TABLE @DATA(LT_ZTABR014) FROM ZTAB014 WHERE DATUM IN @S_BUDAT.
SORT LT_ZTABR014 BY DATUM.
LOOP AT LT_ZTABR014 INTO DATA(LS_ZTABR014) .
LS_OUTTAB_0100-DATUM = LS_ZTABR014-DATUM.
LS_OUTTAB_0100-ANSWTIME = LS_ZTABR014-ANSWTIME.
LS_OUTTAB_0100-USERNR = LS_ZTABR014-USERNR.
LS_OUTTAB_0100-NUM = 1.
COLLECT LS_OUTTAB_0100 INTO GT_OUTTAB_0100.
LS_OUTTAB_0100-DATUM = ''.
LS_OUTTAB_0100-ANSWTIME = LS_ZTABR014-ANSWTIME.
LS_OUTTAB_0100-USERNR = LS_ZTABR014-USERNR.
LS_OUTTAB_0100-NUM = 1.
COLLECT LS_OUTTAB_0100 INTO GT_OUTTAB_0100.
ENDLOOP.
LOOP AT GT_OUTTAB_0100 ASSIGNING FIELD-SYMBOL(<FS>).
<FS>-ANSWTIME = <FS>-ANSWTIME / <FS>-NUM.
<FS>-USERNR = <FS>-USERNR / <FS>-NUM * 9.
IF <FS>-DATUM = ''.
<FS>-ROWCOLOR = 'C310'.
ENDIF.
ENDLOOP.
SORT GT_OUTTAB_0100 BY DATUM ASCENDING.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY_0100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV_DISPLAY_0100 .
DATA LS_STBL TYPE LVC_S_STBL VALUE 'XX'.
IF GO_CONTAINER_0100 IS INITIAL.
CREATE OBJECT GO_CONTAINER_0100
EXPORTING
CONTAINER_NAME = 'CONTAINER_0100'.
CREATE OBJECT GO_GRID_0100
EXPORTING
I_PARENT = GO_CONTAINER_0100.
"格式设置
PERFORM FRM_ALV_SET_LAYOUT_0100.
"注册事件
* PERFORM FRM_ALV_EVENT_REG_0100.
"设置列属性
PERFORM FRM_ALV_SET_FIELDCAT_0100.
"去掉不需要的功能
PERFORM FRM_ALV_EXCLUDE_FUNC_0100 USING GT_EXCLUBAR_0100.
"ALV显示
PERFORM FRM_ALV_FIRST_DISPLAY_0100 USING GO_GRID_0100.
ELSE.
GO_GRID_0100->REFRESH_TABLE_DISPLAY( IS_STABLE = LS_STBL ).
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_SET_LAYOUT_0100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV_SET_LAYOUT_0100 .
GS_LAYOUT_0100-CWIDTH_OPT = SPACE. "自动适用宽度
GS_LAYOUT_0100-COL_OPT = 'X'.
GS_LAYOUT_0100-LANGUAGE = '1'. "语言
GS_LAYOUT_0100-ZEBRA = 'X'. "斑马线显示
GS_LAYOUT_0100-SEL_MODE = SPACE. "选择方式
GS_LAYOUT_0100-INFO_FNAME = 'ROWCOLOR'. "设置行颜色
GS_LAYOUT_0100-CTAB_FNAME = 'CELLCOLORS'. "设置单元格颜色
GS_LAYOUT_0100-STYLEFNAME = 'CELLSTYLE'. "设置单元格格式
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_SET_FIELDCAT_0100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV_SET_FIELDCAT_0100 .
DATA LS_FIELDCAT_0100 TYPE LVC_S_FCAT.
CLEAR: GT_FIELDCAT_0100.
CLEAR LS_FIELDCAT_0100.
LS_FIELDCAT_0100-FIELDNAME = 'DATUM'.
LS_FIELDCAT_0100-REPTEXT = '日期'.
APPEND LS_FIELDCAT_0100 TO GT_FIELDCAT_0100.
CLEAR LS_FIELDCAT_0100.
LS_FIELDCAT_0100-FIELDNAME = 'ANSWTIME'.
LS_FIELDCAT_0100-REPTEXT = '平均响应时间'.
APPEND LS_FIELDCAT_0100 TO GT_FIELDCAT_0100.
CLEAR LS_FIELDCAT_0100.
LS_FIELDCAT_0100-FIELDNAME = 'USERNR'.
LS_FIELDCAT_0100-REPTEXT = '平均用户数'.
APPEND LS_FIELDCAT_0100 TO GT_FIELDCAT_0100.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_EXCLUDE_FUNC_0100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_EXCLUBAR_0100 text
*----------------------------------------------------------------------*
FORM FRM_ALV_EXCLUDE_FUNC_0100 USING IT_EXCLUBAR TYPE UI_FUNCTIONS.
DATA LS_EXCLUDE TYPE UI_FUNC.
* LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW .
* APPEND LS_EXCLUDE TO IT_EXCLUBAR.
*
* LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW .
* APPEND LS_EXCLUDE TO IT_EXCLUBAR.
*
* LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW .
* APPEND LS_EXCLUDE TO IT_EXCLUBAR.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW .
APPEND LS_EXCLUDE TO IT_EXCLUBAR.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT .
APPEND LS_EXCLUDE TO IT_EXCLUBAR.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY .
APPEND LS_EXCLUDE TO IT_EXCLUBAR.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO .
APPEND LS_EXCLUDE TO IT_EXCLUBAR.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_REFRESH .
APPEND LS_EXCLUDE TO IT_EXCLUBAR.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT .
APPEND LS_EXCLUDE TO IT_EXCLUBAR.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE .
APPEND LS_EXCLUDE TO IT_EXCLUBAR.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW .
APPEND LS_EXCLUDE TO IT_EXCLUBAR.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_FIRST_DISPLAY_0100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GO_GRID_0100 text
*----------------------------------------------------------------------*
FORM FRM_ALV_FIRST_DISPLAY_0100 USING LCL_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA LV_VARIANT TYPE DISVARIANT.
DATA LS_STBL TYPE LVC_S_STBL VALUE 'XX'.
LV_VARIANT-REPORT = SY-REPID.
LV_VARIANT-USERNAME = SY-UNAME.
CALL METHOD LCL_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT_0100 "显示格式
IS_VARIANT = LV_VARIANT "变式布局
IT_TOOLBAR_EXCLUDING = GT_EXCLUBAR_0100 "排除按钮
IT_HYPERLINK = GT_HYPERLINK_0100
I_SAVE = 'A'
CHANGING
IT_SORT = GT_SORT_0100 "排序
IT_FIELDCATALOG = GT_FIELDCAT_0100 "显示列
IT_OUTTAB = GT_OUTTAB_0100. "数据
LCL_GRID->REFRESH_TABLE_DISPLAY( IS_STABLE = LS_STBL ).
ENDFORM.
TIPS: 设置ALV单元格颜色背景:ALV绑定内表data Type定义rowcolor颜色字段,layout设置行颜色,绑定内表时赋值颜色代码