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