If you use these programs you increase your "freedom".
You do not have to check the active jobs every minute.
Just submit the first CL program and it will send you a
message when any job is in the specified status (MSGW, HLD etc.)
The idea is not to only watch the job status. I think it is more.
If you modify the program it can alert you, when a specified
user signed on or a specified subsystem started etc.
- You do not have to use the WRKACTJOB in this program. If you
use WRKCFGSTS you can monitor a LINE,CTL,DEV etc. when became
active.
- The type of alert can be modified too. I use SNDDST to send an
e-mail to my address at my mobile phone provider. I use a
mail notification service and they send me an SMS when I get
an e-mail. The SMS contains the subject of e-mail sent by the AS/400.
It works fine. It is good thing, when I started a lot of jobs
to run for the weekend and those have to finish by Monday
morning. I can be sure there is no MSGW or HLD status!
I use SNDBRKMSG when I'm in a computer room or in my
workshop. Easy to hear a big beep if an MSGW occur while
you use another application!
It is a simple solution for daily problems, made in CL
without API-s and easy to understand. We have used this for about 3 years. It became a standard and helpful tool for us!
If you have any questions about this tip, you can e-mail Jozsef Petrovszki.
Additional tip: If you use serial jobq to run your jobs, submit
an SNDDST or SNDBRKMSG command after the jobs and you will
be notified when all your jobs finished!
Code
1st. Caller program: Compile to name ALERT
the code:
PGM PARM(&STS)
DCL VAR(&ERROR) TYPE(*CHAR) LEN(1)
DCL VAR(&STS) TYPE(*CHAR) LEN(4)
DCL VAR(&TXT) TYPE(*CHAR) LEN(60)
START: OVRPRTF FILE(QPDSPAJB) HOLD(*YES)
WRKACTJOB OUTPUT(*PRINT)
DLTOVR FILE(QPDSPAJB)
CHKOBJ OBJ(QTEMP/ALERTJOB) OBJTYPE(*FILE)
MONMSG MSGID(CPF9801) EXEC(DO)
CRTPF FILE(QTEMP/ALERTJOB) RCDLEN(132)
ENDDO
CPYSPLF FILE(QPDSPAJB) TOFILE(QTEMP/ALERTJOB) +
SPLNBR(*LAST)
DLTSPLF FILE(QPDSPAJB) SPLNBR(*LAST)
CALL PGM(yourlib/ALERTW) PARM(&STS &ERROR &TXT)
IF COND(&ERROR *EQ '1') THEN(DO)
SNDDST TYPE(*LMSG) TOINTNET((yourname@yourmobilephoneprovider.com)) +
DSTD('alert') LONGMSG(B) SUBJECT(&TXT)
SNDBRKMSG MSG(&TXT) TOMSGQ(DSP01 DSP02 DSP06 DSP07)
GOTO CMDLBL(END)
ENDDO
DLYJOB DLY(180)
GOTO CMDLBL(START)
END: ENDPGM
2nd: Finder program: Compile to name ALERTW
This program called by the first CL program (ALERT)
Before you compile it you have to create a
workfile in qtemp with CRTPF FILE(QTEMP/ALERTJOB) RCDLEN(132)
command!
PGM PARM(&STS &ERROR &TXT)
DCL VAR(&STS) TYPE(*CHAR) LEN(4)
DCL VAR(&ERROR) TYPE(*CHAR) LEN(1)
DCL VAR(&TXT) TYPE(*CHAR) LEN(60)
DCLF FILE(QTEMP/ALERTJOB)
CHGVAR VAR(&ERROR) VALUE('0')
READ: RCVF RCDFMT(ALERTJOB)
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(END))
IF COND(%SST(&ALERTJOB 111 4) *EQ &STS) +
THEN(DO)
CHGVAR VAR(&ERROR) VALUE('1')
CHGVAR VAR(&TXT) VALUE(&STS *CAT ' status : ' *CAT +
%SST(&ALERTJOB 29 6) *CAT '/' *CAT +
%SST(&ALERTJOB 17 10) *TCAT '/' *CAT +
%SST(&ALERTJOB 4 10) *CAT '!!!')
ENDDO
GOTO READ
END: ENDPGM