/*'CIBA SC
EUR*/
/*'=================================================================EUR*/
/*'                                                                 EUR*/
/*'PROGRAMM TO LIST ALL JOBS FROM A SPECIFIC SUBSYSTEM AND RETRIEVE EUR*/
/*'THEIR TEMPORARY STORAGE USED (KB). THIS VALUE WILL THEN BE       EUR*/
/*'COMPARED WITH THE LIMIT STORED IN *DTAARA *LIBL/TMPSTGLMTJ.      EUR*/
/*'IF THE MAX VALUE IS REACHED AN APPROPRIATE ACTION CAN BE TAKEN   EUR*/
/*'                                                                 EUR*/
/*'-----------------------------------------------------------------EUR*/
/*'Date       ! Author       ! Description                          EUR*/
/*'-----------+--------------+--------------------------------------EUR*/
/*'23.10.2003 ! JM SAUVAGEOT ! Creation                             EUR*/
/*'===========+==============+======================================EUR*/
/*'----------------------------------------------------------------- */ 

             PGM

             DCL        VAR(&JOBNAME)   TYPE(*CHAR) LEN(10)
             DCL        VAR(&USER)      TYPE(*CHAR) LEN(10)
             DCL        VAR(&JOBNUMBER) TYPE(*CHAR) LEN(6)
             DCL        VAR(&STATUS)    TYPE(*CHAR) LEN(16)
             DCL        VAR(&JOBTYPE)   TYPE(*CHAR) LEN(1)

             /* NUMBER OF TREATED JOBS              */
             DCL        VAR(&JOBCNT) TYPE(*DEC) LEN(15 0)
             DCL        VAR(&JOBCNTC) TYPE(*CHAR) LEN(15)

             /* TEMPORARY STORAGE USED IN KILOBYTES */
             DCL        VAR(&TMPSTGA) TYPE(*CHAR) LEN(4)
             DCL        VAR(&TMPSTG) TYPE(*DEC) LEN(15 0)
             DCL        VAR(&TMPSTGC) TYPE(*CHAR) LEN(15)

             /* PROCESSING UNIT TIME USED IN MILLISECONDS */
             DCL        VAR(&CPUTIMA) TYPE(*CHAR) LEN(4)
             DCL        VAR(&CPUTIM) TYPE(*DEC) LEN(15 0)
             DCL        VAR(&CPUTIMC) TYPE(*CHAR) LEN(15)

             DCL        VAR(&TMPSTGLMTJ) TYPE(*DEC) LEN(15 0)

      /* MESSAGES                                       */
             DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)
             DCL        VAR(&MSGDTALN) TYPE(*DEC) LEN(9 0)
             DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(80)
             DCL        VAR(&NO_ERROR) TYPE(*CHAR) LEN(4) +
                          VALUE(X'00000000')

/* Declares for QUSCRTUS - Create User Space */

             DCL        VAR(&QCUS_NAME) TYPE(*CHAR) LEN(20) +
                          VALUE('ACT_JOBS  QTEMP     ')
             DCL        VAR(&QCUS_EXATR) TYPE(*CHAR) LEN(10) +
                          VALUE('USRSPC    ')
             DCL        VAR(&QCUS_SIZE) TYPE(*CHAR) LEN(4) +
                          VALUE(X'00010000')
             DCL        VAR(&QCUS_INIT) TYPE(*CHAR) LEN(1) VALUE(X'00')
             DCL        VAR(&QCUS_PUBA) TYPE(*CHAR) LEN(10) +
                          VALUE('*ALL      ')
             DCL        VAR(&QCUS_TEXT) TYPE(*CHAR) LEN(50)
             DCL        VAR(&QCUS_REPL) TYPE(*CHAR) LEN(10) +
                          VALUE('*YES      ')
             DCL        VAR(&QCUS_DOMN) TYPE(*CHAR) LEN(10) +
                          VALUE('*DEFAULT  ')

/* Declares for QUSLJOB - List JOB           */

             DCL        VAR(&QLJ_NAME) TYPE(*CHAR) LEN(20) +
                          VALUE('ACT_JOBS  QTEMP     ')
             DCL        VAR(&QLJ_FOMT) TYPE(*CHAR) LEN(8) +
                          VALUE('JOBL0100')
             DCL        VAR(&QLJ_JBNM) TYPE(*CHAR) LEN(10)
             DCL        VAR(&QLJ_USNM) TYPE(*CHAR) LEN(10)
             DCL        VAR(&QLJ_JBNB) TYPE(*CHAR) LEN(6)
             DCL        VAR(&QLJ_QJBN) TYPE(*CHAR) LEN(26)
             DCL        VAR(&QLJ_STAT) TYPE(*CHAR) LEN(10)

/* Declares for QUSRTVUS - Retrieve User Space */

             DCL        VAR(&QRUS_NAME) TYPE(*CHAR) LEN(20) +
                          VALUE('ACT_JOBS  QTEMP     ')
             DCL        VAR(&QRUS_STRT) TYPE(*CHAR) LEN(4)
             DCL        VAR(&QRUS_LENG) TYPE(*CHAR) LEN(4)
             DCL        VAR(&QRUS_HEAD) TYPE(*CHAR) LEN(16)
             DCL        VAR(&QRUS_LINE) TYPE(*CHAR) LEN(82)
             DCL        VAR(&INT_OFFSET) TYPE(*DEC) LEN(9 0)
             DCL        VAR(&INT_NUMBER) TYPE(*DEC) LEN(9 0)
             DCL        VAR(&INT_SIZE) TYPE(*DEC) LEN(9 0)
             DCL        VAR(&INT_POSIT) TYPE(*DEC) LEN(9 0)

/* Variables QUSRJOBI - Retrieve Job Information */

             DCL        VAR(&QRJI_RCV) TYPE(*CHAR) LEN(131)
             DCL        VAR(&QRJI_RCVLN) TYPE(*CHAR) LEN(4) +
                          VALUE(X'00000083')
             DCL        VAR(&QRJI_FOMT) TYPE(*CHAR) LEN(8) +
                          VALUE('JOBI0150')
             DCL        VAR(&QRJI_JOB) TYPE(*CHAR) LEN(26)
             DCL        VAR(&QRJI_IJOB) TYPE(*CHAR) LEN(16)

/* Declares for QUSDLTUS - Delete User Space */

             DCL        VAR(&QDUS_NAME) TYPE(*CHAR) LEN(20) +
                          VALUE('ACT_JOBS  QTEMP     ')

/* Declares for QERRCD - Error Code */

             DCL        VAR(&QERRCD) TYPE(*CHAR) LEN(96)

             MONMSG     MSGID(CPF0000)

/* Retrieve Dataarea TMPSTGLMTJ in *LIBL containing */
/* Limit temporary storage for single job (in KB)   */

             RTVDTAARA  DTAARA(*LIBL/TMPSTGLMTJ) RTNVAR(&TMPSTGLMTJ)
             MONMSG     MSGID(CPF1015) EXEC(DO)
             SNDPGMMSG  MSG('Data area TMPSTGLMTJ not found, +
                          programm ended') MSGTYPE(*DIAG)
             GOTO       CMDLBL(END)
             ENDDO
/* Create Userspace */

             CHGVAR     VAR(%SST(&QERRCD 1 8)) +
                          VALUE(X'0000006000000000')
             CALL       PGM(QUSCRTUS) PARM(&QCUS_NAME &QCUS_EXATR +
                          &QCUS_SIZE &QCUS_INIT &QCUS_PUBA +
                          &QCUS_TEXT &QCUS_REPL &QERRCD &QCUS_DOMN)
             IF         COND(%SST(&QERRCD 5 4) *NE &NO_ERROR) +
                          THEN(GOTO CMDLBL(ERROR_API))

/* List all Jobs in an Output Queue */

             CHGVAR     VAR(&QLJ_JBNM) VALUE('*ALL')
             CHGVAR     VAR(&QLJ_USNM) VALUE('*ALL')
             CHGVAR     VAR(&QLJ_JBNB) VALUE('*ALL')
             CHGVAR     VAR(&QLJ_STAT) VALUE('*ACTIVE')
             CHGVAR     VAR(&QLJ_QJBN) VALUE(&QLJ_JBNM *CAT +
                          &QLJ_USNM *CAT &QLJ_JBNB)
             CHGVAR     VAR(%SST(&QERRCD 1 8)) +
                          VALUE(X'0000006000000000')
             CALL       PGM(QUSLJOB) PARM(&QLJ_NAME &QLJ_FOMT +
                          &QLJ_QJBN &QLJ_STAT +
                          &QERRCD)
             IF         COND(%SST(&QERRCD 5 4) *NE &NO_ERROR) +
                          THEN(GOTO CMDLBL(ERROR_API))

/* Read Headerdata from Userspace */

             CHGVAR     VAR(%BIN(&QRUS_STRT)) VALUE(125)
             CHGVAR     VAR(%BIN(&QRUS_LENG)) VALUE(16)
             CHGVAR     VAR(%SST(&QERRCD 1 8)) +
                          VALUE(X'0000006000000000')
             CALL       PGM(QUSRTVUS) PARM(&QRUS_NAME &QRUS_STRT +
                          &QRUS_LENG &QRUS_HEAD &QERRCD)
             IF         COND(%SST(&QERRCD 5 4) *NE &NO_ERROR) +
                          THEN(GOTO CMDLBL(ERROR_API))

             CHGVAR     VAR(&INT_OFFSET) VALUE(%BIN(&QRUS_HEAD 1 4))
             CHGVAR     VAR(&INT_NUMBER) VALUE(%BIN(&QRUS_HEAD 9 4))
             CHGVAR     VAR(&INT_SIZE) VALUE(%BIN(&QRUS_HEAD 13 4))

/* Loop through the Userspace */

             CHGVAR     VAR(&INT_POSIT) VALUE(0)
 LOOP_SPACE: CHGVAR     VAR(&INT_POSIT) VALUE(&INT_POSIT + 1)
             IF         COND(&INT_POSIT *GT &INT_NUMBER) THEN(GOTO +
                          CMDLBL(END_SPACE))

/* Read next Userspace detail line */

             CHGVAR     VAR(%BIN(&QRUS_STRT)) VALUE(&INT_OFFSET + +
                          ((&INT_POSIT - 1) * &INT_SIZE) + 1)
             CHGVAR     VAR(%BIN(&QRUS_LENG)) VALUE(82)
             CHGVAR     VAR(%SST(&QERRCD 1 8)) +
                          VALUE(X'0000006000000000')
             CALL       PGM(QUSRTVUS) PARM(&QRUS_NAME &QRUS_STRT +
                          &QRUS_LENG &QRUS_LINE &QERRCD)
             IF         COND(%SST(&QERRCD 5 4) *NE &NO_ERROR) +
                          THEN(GOTO CMDLBL(ERROR_API))

/* Retrieve Job Information */

             CHGVAR     VAR(&JOBNAME) VALUE(%SST(&QRUS_LINE 1 10))
             CHGVAR     VAR(&USER) VALUE(%SST(&QRUS_LINE 11 10))
             CHGVAR     VAR(&JOBNUMBER) VALUE(%SST(&QRUS_LINE 21 6))
             CHGVAR     VAR(&JOBTYPE) VALUE(%SST(&QRUS_LINE 53 1))
             IF         COND(&JOBTYPE *EQ 'B' *OR &JOBTYPE *EQ 'I') +
                          THEN(DO)
             CHGVAR     VAR(%SST(&QERRCD 1 8)) +
                          VALUE(X'0000006000000000')

             CHGVAR     VAR(&JOBCNT) VALUE(&JOBCNT+1)

             CHGVAR     VAR(&QRJI_JOB) VALUE(%SST(&QRUS_LINE 1 26))
             CALL       PGM(QUSRJOBI) PARM(&QRJI_RCV &QRJI_RCVLN +
                          &QRJI_FOMT &QRJI_JOB &QRJI_IJOB +
                          &QERRCD)

             IF         COND(%SST(&QERRCD 5 4) *NE &NO_ERROR) +
                          THEN(GOTO CMDLBL(ERROR_API))

             CHGVAR     VAR(&TMPSTGA) VALUE(%SST(&QRJI_RCV 109 4))
             CHGVAR     VAR(&TMPSTG) VALUE(%BIN(&TMPSTGA))
             CHGVAR     VAR(&TMPSTGC) VALUE(&TMPSTG)
             CHGVAR     VAR(&CPUTIMA) VALUE(%SST(&QRJI_RCV 97 4))
             CHGVAR     VAR(&CPUTIM) VALUE(%BIN(&CPUTIMA))
             CHGVAR     VAR(&CPUTIMC) VALUE(&CPUTIM)

             SNDPGMMSG  MSG('Job ' *CAT &JOBNUMBER *TCAT '/' *TCAT +
                          &USER *TCAT '/' *TCAT &JOBNAME *TCAT ' +
                          uses ' *CAT &TMPSTGC *CAT ' KB temp. +
                          space and used ' *CAT &CPUTIMC *CAT ' +
                          milliseconds CPU time') MSGTYPE(*DIAG)

             IF         COND(&TMPSTG *GE &TMPSTGLMTJ) THEN(DO)
             /* PUT HERE CODE FOR SPECIFIC ACTION YOU WANT TO BE */
             /* PROCESSED. FOR EXAMPLE HERE AN EMAIL IS SENT TO ME*/

             SNDPGMMSG  MSG('Job ' *CAT &JOBNUMBER *TCAT '/' *TCAT +
                          &USER *TCAT '/' *TCAT &JOBNAME *TCAT ' +
                          uses ' *CAT &TMPSTGC *CAT ' KB temp. +
                          space over limit') MSGTYPE(*DIAG)

             SNDDST     TYPE(*LMSG) +
                          TOINTNET(('firstname.lastnamet@company.com')) +
                          DSTD('Job temp. storage used +
                          over limit') MSG('Job ' *CAT &JOBNUMBER +
                          *TCAT '/' *TCAT &USER *TCAT '/' *TCAT +
                          &JOBNAME *CAT ' has its temporary storage +
                          used (in KB) over limit set in *DTAARA +
                          *LIBL/TMPSTGLMTJ. See the actual value +
                          for the concerned job in attached +
                          document.') LONGMSG(&TMPSTGC)
             ENDDO
             ENDDO

/* Read next JOIB      */

             GOTO       CMDLBL(LOOP_SPACE)

/* Delete Userspace  */

 END_SPACE:  CHGVAR     VAR(%SST(&QERRCD 1 8)) +
                          VALUE(X'0000006000000000')
             CALL       PGM(QUSDLTUS) PARM(&QDUS_NAME &QERRCD)
             IF         COND(%SST(&QERRCD 5 4) *NE &NO_ERROR) +
                          THEN(GOTO CMDLBL(ERROR_API))
             ELSE       CMD(GOTO CMDLBL(END))
/* Jump */

/* API-Error */

 ERROR_API:  CHGVAR     VAR(&MSGID) VALUE(%SST(&QERRCD 9 7))
             IF         COND(&MSGID *EQ 'CPF3C53') THEN(DO)
             SNDPGMMSG  MSG('Job ' *CAT &JOBNUMBER *TCAT '/' *TCAT +
                          &USER *TCAT '/' *TCAT &JOBNAME *TCAT ' no +
                          more in system. Job not found anymore.') +
                          MSGTYPE(*DIAG)

             GOTO       CMDLBL(LOOP_SPACE)
             ENDDO
             CHGVAR     VAR(&MSGDTALN) VALUE(%BIN(&QERRCD 5 4))
             CHGVAR     VAR(&MSGDTALN) VALUE(&MSGDTALN - 16)
             CHGVAR     VAR(&MSGDTA) VALUE(%SST(&QERRCD 17 &MSGDTALN))
             SNDPGMMSG  MSGID(&MSGID) MSGF(QCPFMSG) MSGDTA(&MSGDTA) +
                          MSGTYPE(*DIAG) /* Bye, bye */ 
 END:
             CHGVAR     VAR(&JOBCNTC) VALUE(&JOBCNT)
             SNDPGMMSG  MSG('Total number of scanned jobs: ' *CAT +
                          &JOBCNTC) MSGTYPE(*DIAG)

ENDPGM