*
*  This program creates a graphical user load and dialog step chart 
*  for a specific day.
*
*
REPORT ZUSRLOAD NO STANDARD PAGE HEADING.

PARAMETERS: DATE LIKE AMDS-ANDAT DEFAULT SY-DATUM.

DATA: M(3), CLIN(7) TYPE N, CCLIN(7), DATEC(25), MAX TYPE I,
MONTH(36) VALUE 'JanFebMarAprMayJunJulAugSepOctNovDec',
MONTHNUM(2) TYPE N, DAYNUM(2) TYPE N, ITIM(4), LIN TYPE I,
IDAT(8), A(50), FILE(30) VALUE '/usr/sap/trans/usr_login_log',
LINC(7), X1 TYPE F VALUE 6, X2 TYPE F VALUE 20, Y1 TYPE F VALUE 0,
Y2 TYPE F VALUE 320.

DATA: BEGIN OF ITAB OCCURS 500,
 TIME(4), DB TYPE I, AP1 TYPE I, AP2 TYPE I, AP3 TYPE I, SUM TYPE I,
 DS1 TYPE I, DS2 TYPE I,
END OF ITAB.
DATA: BEGIN OF OPTS OCCURS 1,
 C(80),
END OF OPTS.
DATA: BEGIN OF DATA OCCURS 1,
 W TYPE F,
 F TYPE F,
END OF DATA.
DATA: BEGIN OF TASKTYPE_RES OCCURS 30,
 TIME TYPE F, SUM1 TYPE F, SUM2 TYPE F,
END OF TASKTYPE_RES.
DATA: BEGIN OF TASKTYPE_STATISTIC OCCURS 50.
 INCLUDE STRUCTURE  SAPWLTSKTI.
DATA: END OF TASKTYPE_STATISTIC.
DATA: PERIODTYPE LIKE  SAPWLACCTP-PERIODTYPE VALUE 'D',
 HOSTID     LIKE  SAPWLACCTP-HOSTID.
DATA: BEGIN OF TASKTYPE_SUM OCCURS 50,
 TIME LIKE SAPWLTSKTI-TIME,
 COUNT LIKE SAPWLTSKTI-COUNT,
 CSUM LIKE SAPWLTSKTI-COUNT,
 CNT001 LIKE SAPWLRTDIS-CNT001,
 CNT002 LIKE SAPWLRTDIS-CNT001,
 CNT003 LIKE SAPWLRTDIS-CNT001,
 CNT004 LIKE SAPWLRTDIS-CNT001,
 CNT005 LIKE SAPWLRTDIS-CNT001,
 CNT006 LIKE SAPWLRTDIS-CNT001,
 CNT007 LIKE SAPWLRTDIS-CNT001,
 CNT008 LIKE SAPWLRTDIS-CNT001,
 CNT009 LIKE SAPWLRTDIS-CNT001,
END OF TASKTYPE_SUM.

HOSTID = 'aaaaaaaa'. PERFORM CALCULATE.
HOSTID = 'ssssssss'. PERFORM CALCULATE.
HOSTID = 'dddddddd'. PERFORM CALCULATE.
HOSTID = 'ffffffff'. PERFORM CALCULATE.
LOOP AT TASKTYPE_SUM.
  IF TASKTYPE_SUM-TIME CS '00--06' OR
     TASKTYPE_SUM-TIME CS '21--24' OR
     TASKTYPE_SUM-TIME CS '20--21'.
     DELETE TASKTYPE_SUM.
  ENDIF.
ENDLOOP.

LOOP AT TASKTYPE_SUM.
  SHIFT TASKTYPE_SUM-TIME RIGHT BY 3 PLACES.
  TASKTYPE_SUM-TIME+5(2) = '30'.
  TASKTYPE_RES-TIME = TASKTYPE_SUM-TIME.
  TASKTYPE_RES-SUM1 = TASKTYPE_SUM-CNT001 + TASKTYPE_SUM-CNT002 +
  TASKTYPE_SUM-CNT003 + TASKTYPE_SUM-CNT004 +
  TASKTYPE_SUM-CNT005 + TASKTYPE_SUM-CNT006.
  TASKTYPE_RES-SUM2 = TASKTYPE_SUM-COUNT.
  APPEND TASKTYPE_RES.
ENDLOOP.

MAX = 0.
LOOP AT TASKTYPE_RES.
  IF TASKTYPE_RES-SUM2 > MAX.
    MAX = TASKTYPE_RES-SUM2.
  ENDIF.
ENDLOOP.

LOOP AT TASKTYPE_RES.
 TASKTYPE_RES-SUM1 = TASKTYPE_RES-SUM1 * ( 250 / MAX ).
 TASKTYPE_RES-SUM2 = TASKTYPE_RES-SUM2 * ( 250 / MAX ).
 TASKTYPE_RES-TIME = TASKTYPE_RES-TIME / 100.
 MODIFY TASKTYPE_RES.
ENDLOOP.

READ DATASET FILE INTO A.
OPEN DATASET FILE FOR INPUT IN TEXT MODE.
DO.
  IF A+0(1) <> 'p'.
    M = A+4(3).
    SEARCH MONTH FOR M.
    MONTHNUM = ( SY-FDPOS / 3 ) + 1.
    DAYNUM = A+8(2).
    IDAT = A+24(4). IDAT+4(2) = MONTHNUM. IDAT+6(2) = DAYNUM.
    ITIM = A+11(2). ITIM+2(2) = A+14(2).
    IF IDAT = DATE.
      ITAB-DB = ITAB-AP1 = ITAB-AP2 = ITAB-AP3 = 0.
      DO.
        READ DATASET FILE INTO A.
        IF A+0(1) = 'p'.
        ELSE.
          EXIT.
        ENDIF.
        IF SY-SUBRC <> 0 .EXIT. ENDIF.
        CASE A(8).
          WHEN 'aaaaaaaa'.
            ITAB-DB = A+25(10).
          WHEN 'ssssssss'.
            ITAB-AP1 = A+25(10).
          WHEN 'dddddddd'.
            ITAB-AP2 = A+25(10).
          WHEN 'ffffffff'.
            ITAB-AP3 = A+25(10).
        ENDCASE.
      ENDDO.
      ITAB-TIME = ITIM / 100.
      APPEND ITAB.
    ENDIF.
  ENDIF.
  READ DATASET FILE INTO A.
  IF SY-SUBRC <> 0 .EXIT. ENDIF.
ENDDO.

LOOP AT ITAB.
  ITAB-SUM = ITAB-DB + ITAB-AP1 + ITAB-AP2 + ITAB-AP3.
  MODIFY ITAB.
ENDLOOP.

LOOP AT ITAB.
  DATA-W = ITAB-TIME.
  DATA-F = ITAB-SUM.
  APPEND DATA.
ENDLOOP.
LOOP AT ITAB.
  DATA-W = ITAB-TIME.
  DATA-F = ITAB-DB.
  APPEND DATA.
ENDLOOP.
LOOP AT ITAB.
  DATA-W = ITAB-TIME.
  DATA-F = ITAB-AP1.
  APPEND DATA.
ENDLOOP.
LOOP AT ITAB.
  DATA-W = ITAB-TIME.
  DATA-F = ITAB-AP2.
  APPEND DATA.
ENDLOOP.
LOOP AT ITAB.
  DATA-W = ITAB-TIME.
  DATA-F = ITAB-AP3.
  APPEND DATA.
ENDLOOP.
LOOP AT TASKTYPE_RES.
  DATA-W = TASKTYPE_RES-TIME.
  DATA-F = TASKTYPE_RES-SUM1.
  APPEND DATA.
ENDLOOP.
LOOP AT TASKTYPE_RES.
  DATA-W = TASKTYPE_RES-TIME.
  DATA-F = TASKTYPE_RES-SUM2.
  APPEND DATA.
ENDLOOP.

DESCRIBE TABLE ITAB LINES LIN.
CLIN = LIN. CCLIN = CLIN. CCLIN(1) = '$'.
DATEC = 'USER LOAD '. DATEC+12 = DATE.

OPTS-C = CCLIN .APPEND OPTS.
OPTS-C = 'COLOR=1'.APPEND OPTS.
OPTS-C = 'thick=1'.APPEND OPTS.
OPTS-C = 'LTEXT='.APPEND OPTS.
OPTS-C = 'DTEXT='.APPEND OPTS.

OPTS-C = CCLIN .APPEND OPTS.
OPTS-C = 'COLOR=4'.APPEND OPTS.
OPTS-C = 'thick=1'.APPEND OPTS.
OPTS-C = 'LTEXT='.APPEND OPTS.
OPTS-C = 'DTEXT='.APPEND OPTS.

OPTS-C = CCLIN .APPEND OPTS.
OPTS-C = 'COLOR=2'.APPEND OPTS.
OPTS-C = 'thick=1'.APPEND OPTS.
OPTS-C = 'LTEXT='.APPEND OPTS.
OPTS-C = 'DTEXT='.APPEND OPTS.

OPTS-C = CCLIN .APPEND OPTS.
OPTS-C = 'COLOR=6'.APPEND OPTS.
OPTS-C = 'thick=1'.APPEND OPTS.
OPTS-C = 'LTEXT='.APPEND OPTS.
OPTS-C = 'DTEXT='.APPEND OPTS.

OPTS-C = CCLIN .APPEND OPTS.
OPTS-C = 'COLOR=3'.APPEND OPTS.
OPTS-C = 'thick=1'.APPEND OPTS.
OPTS-C = 'LTEXT='.APPEND OPTS.
OPTS-C = 'DTEXT='.APPEND OPTS.

DESCRIBE TABLE TASKTYPE_RES LINES LIN.
CLIN = LIN. CCLIN = CLIN. CCLIN(1) = '$'.

OPTS-C = CCLIN .APPEND OPTS.
OPTS-C = 'COLOR=7'.APPEND OPTS.
OPTS-C = 'thick=1'.APPEND OPTS.
OPTS-C = 'LTEXT='.APPEND OPTS.
OPTS-C = 'DTEXT='.APPEND OPTS.
OPTS = 'C_ART=1'.APPEND OPTS.
OPTS = 'CTYPE=5'.APPEND OPTS.

OPTS-C = CCLIN .APPEND OPTS.
OPTS-C = 'COLOR=8'.APPEND OPTS.
OPTS-C = 'thick=1'.APPEND OPTS.
OPTS-C = 'LTEXT='.APPEND OPTS.
OPTS-C = 'DTEXT='.APPEND OPTS.
OPTS = 'C_ART=1'.APPEND OPTS.
OPTS = 'CTYPE=5'.APPEND OPTS.

CALL FUNCTION 'STAT_GRAPH'
     EXPORTING
          TTEXT = DATEC
          UTEXT =
     'sum db ap1 ap2 ap3 dstp<1s sumdstp: wht gre blu red yel lblu gray'
          X_ART = 'LIN'
          Y_ART = 'LIN'
          SCALE = 'MAN'
          XRNGL = X1
          XRNGU = X2
          YRNGL = Y1
          YRNGU = Y2
          XTCKS = '15'
          YTCKS = '33'
          XDECS = '0'
          YDECS = '0'
     TABLES
          OPTS  = OPTS
          DATA  = DATA.html

*---------------------------------------------------------------------*
*       FORM CALCULATE                                                *
*---------------------------------------------------------------------*
*       Collect the statistics data                                   *
*---------------------------------------------------------------------*
FORM CALCULATE.
  CLEAR TASKTYPE_STATISTIC.
  REFRESH TASKTYPE_STATISTIC.
  CALL FUNCTION 'SAPWL_WORKLOAD_GET_STATISTIC' DESTINATION 'zzzzzzzz'
       EXPORTING
            PERIODTYPE         = PERIODTYPE
            HOSTID             = HOSTID
            STARTDATE          = DATE
       TABLES
            TASKTYPE_STATISTIC = TASKTYPE_STATISTIC
       EXCEPTIONS
            NO_DATA_FOUND      = 1.
  LOOP AT TASKTYPE_STATISTIC.
    CLEAR TASKTYPE_SUM.
    IF TASKTYPE_STATISTIC-TASKTYPE = 'DIALOG'.
      MOVE-CORRESPONDING TASKTYPE_STATISTIC TO TASKTYPE_SUM.
      COLLECT TASKTYPE_SUM.
    ENDIF.
  ENDLOOP.
ENDFORM.