ESP Workload Automation

 View Only
  • 1.  REXX SLEEP routine

    Posted Sep 24, 2012 09:51 AM
    Hi. We have a jobend event which runs a rexx called #jobe. We use it to check for successful/unsuccessful complete of a job. We go to JOBONCSF to check for a job since there can be more than one. We found a job can still be listed as in 'EXEC' state even though it has ended. Basically CSF is slow being updated on finished jobs. This has always been the case. We inserted a TIME() function but it is very cpu intensive. We tried to call the SLEEP function for USS but got a return code EC6.

    /* rexx */
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" 5
    CALL SYSCALLS 'OFF'

    Of course SLEEP works under my TSO session.

    Two questions...has anyone used the SLEEP function? Or is there any other function to accomplish this?

    Maybe another question...we are doing this so we can automate failed job alerts. When the code fails it produces a message we can trap upon and then alerts someone a job has failed. Has anyone a better way to do this? Thanks.

    Here is our code:

    REXXON
    trace on
    UID=CLANGVAR('%MNAUTHS') /* APOLIDB */
    JOB=CLANGVAR('%MNJOB') /* LIDFHF69 */
    JOBNO=CLANGVAR('%MNJOBNO') /* 13710 */
    CMPC=CLANGVAR('%MNMXCMPC') /* CCFAIL / JCLERROR / ABENDCODE */
    HCMPC=CLANGVAR('%MNHICMPC') /* RC FOR CCFAILS */
    JSTART=CLANGVAR('%MNRDRX') /* 15.51 2001APR19 */
    SYS=CLANGVAR('%MNSYS') /* 15.51 2001APR19 */
    SDTE=CLANGVAR('%MNJSTART')
    JHH = SUBSTR(JSTART,9,2)
    JMM = SUBSTR(JSTART,11,2)
    JSS = SUBSTR(JSTART,13,2)
    JSTART = JHH':'JMM':'JSS

    /* exit if PB job - lal 10/29/08 */
    CVT = STORAGE(10,4)
    CVTSNAME = D2X(C2D(CVT) + C2D('154'X))
    SYSID=STORAGE(CVTSNAME,8)
    IF SYSID = 'CPUA' and jobno > 99999 then do
    exit
    end

    /* exit if not esp submitted job - lal 11/05/08 */
    if uid <> 'APOLIDB' then do
    exit
    end
    /* exit if RC=0 job - lal 10/29/08 */
    if cmpc = '0' then do
    "SEND 'E48T02I" JOB "ended successfully' cn(01)"
    exit
    end


    DO k = 1 TO 3 /* check 3x for not-EXEC */


    J=JOBONCSF(JOB,'X')
    DO I = 1 TO J

    IF XJOBNO.I = JOBNO THEN DO
    IF XPNODE.i = 'FAIL' THEN CALL FAIL
    else IF XPNODE.i = 'COMPLETE' then do
    "SEND 'E48T02I" JOB "ended successfully' cn(01)"
    EXIT
    end
    else if XPNODE.i = 'EXEC' then leave /* leave I loop */
    else leave /* leave J loop */
    end
    end /* enddo j */

    /* REXX WAIT */
    sec = 5
    rc = Time(R)
    Do Forever
    n = Time(E)
    If n >= sec Then Leave
    End

    end /* enddo k */
    "SEND 'E48T02I" JOB "ended unknown-please check ' cn(01)"
    EXIT

    FAIL:

    X = TRAPOUT('OUT.')
    "ESP LJ "JOB "STEPS"
    X = TRAPOUT('OFF')


    DO I = 1 TO OUT.0


    IF SUBSTR(OUT.I,1,8) = STEPNAME THEN DO
    MODE= 'GO'
    ITERATE
    END
    IF MODE = 'GO' THEN DO
    STEPN = STRIP(SUBSTR(OUT.I,1,8))
    PROCN = STRIP(SUBSTR(OUT.I,10,8))
    PROGN = STRIP(SUBSTR(OUT.I,19,8))
    JRC = STRIP(SUBSTR(OUT.I,64,5))
    JDEF.JRC.STEP=STEPN
    JDEF.JRC.PROC=PROCN
    JDEF.JRC.PROG=PROGN
    IF I = OUT.0 THEN DO
    LSTEPN = STEPN
    LPROCN = PROCN
    LPROGN = PROGN
    END
    END
    END
    IF LSTEPN = 'ESPRM' THEN EXIT
    IF LSTEPN = 'LSTEPN' THEN LSTEPN = ''
    IF LPROCN = 'LPROCN' THEN LPROCN = ''
    IF LPROGN = 'LPROGN' THEN LPROGN = ''
    SELECT
    WHEN CMPC = 'JCLERROR' THEN DO
    STEPNA = LSTEPN
    PROCNA = LPROCN
    PROGNA = LPROGN
    /*------------------------------------------*/
    /* EXIT BECAUSE PROBABLY A REQUEUE OF A JOB */
    /*------------------------------------------*/
    IF STEPNA = '' & PROCNA = '' & PROGNA = '' THEN EXIT
    IF STEPNA = '' THEN STEPNA = 'N/A'
    IF PROCNA = '' THEN PROCNA = 'N/A'
    IF PROGNA = '' THEN PROGNA = 'N/A'
    MSG=SYS JOB JOBNO 'JCLERR' STEPNA PROCNA PROGNA SDTE JSTART TIME()
    MSG='ESP911' MSG ' :X'
    END
    OTHERWISE DO
    STEPNA = JDEF.HCMPC.STEP
    PROCNA = JDEF.HCMPC.PROC
    PROGNA = JDEF.HCMPC.PROG
    IF STEPNA = '' THEN STEPNA = 'N/A'
    IF PROCNA = '' THEN PROCNA = 'N/A'
    IF PROGNA = '' THEN PROGNA = 'N/A'
    MSG=SYS JOB JOBNO HCMPC STEPNA PROCNA PROGNA SDTE JSTART TIME()
    MSG='ESP911' MSG ' :X'
    END
    END
    "SEND '"MSG"' cn(01)"
    "SEND 'E48T02I "JOB "ended unsuccessfully' cn(01)"
    exit
    REXXOFF


  • 2.  RE: REXX SLEEP routine

    Posted Sep 24, 2012 10:39 AM
    In my REXX I include the number inside the tick marks:

    [font=Courier New] ADDRESS SYSCALL 'SLEEP 5' [font]

    In our environment the following also works:

    [font=Courier New] ADDRESS TSO "SLEEPR 5"[font]


  • 3.  RE: REXX SLEEP routine

    Posted Sep 24, 2012 01:33 PM
    Hi. Have you executed REXX SLEEP from any ESP address space? Lloyd