Superviser QSYSOPR simplement avec un watch !

Il existe beaucoup de techniques pour superviser des files d’attente

La première consiste à faire boucler un robot qui lira les messages par la commande RCVMSG

La deuxième consiste à utiliser une vue SQL AS SERVICE, QSYS2.MESSAGE_QUEUE_INFO en allant boucler dessus

Il en existe d’autres avec des API etc…

J’ai choisi de vous présenter une technique un peu moins connu mais très efficace et très facile à mettre en œuvre, les Watches.

Un watch c’est un peu comme un trigger ou un programme d’exit, on va associer un programme qui se déclenchera sur un événement, ici un message nécessitant une réponse dans la file QSYSOPR.

Vous pouvez voir les sessions de watch actives par la commande
==>WRKWCH WCH(*STRWCH)

Pour démarrer une session c’est la commande STRWCH

dans notre cas on indiquera les paramètres suivants

STRWCH SSNID(ANAWCH)
WCHPGM(ANAWCH)
CALLWCHPGM(WCHEVT) WCHMSG((ALL *NONE *MSGDTA *INQ *GE 00))
WCHMSGQ((QSYS/QSYSOPR))

Ce qui veut dire que quand on a un message avec réponse dans qsysopr lance le programme ANAWCH (attention il devra être en ligne dans la LIBL)

Voici le programme ANAWCH

PGM PARM(&WCHOPTION &SESSIONID &ERROR &EVTDATA)
/—————————————————————–/
/* Ce programme est un watch il avertit quand on a un message dans */

/ *QSYSOPR en attente de réponse , il envoit un mail / /—————————————————————–

/*/ Paramètres recus */

DCL VAR(&WCHOPTION) TYPE(CHAR) LEN(10)
DCL VAR(&SESSIONID) TYPE(CHAR) LEN(10) DCL VAR(&ERROR) TYPE(CHAR) LEN(10)
DCL VAR(&EVTDATA) TYPE(CHAR) LEN(1024) / Variables de travail /

DCL VAR(&MSG) TYPE(CHAR) LEN(173)
DCL VAR(&EMAIL) TYPE(CHAR) LEN(50) value(‘votre@email.fr’)

/*découpage de EVTDATA */

DCL VAR(&MSGID) TYPE(CHAR) STG(DEFINED) LEN(7) + DEFVAR(&EVTDATA 5) DCL VAR(&MSGQ) TYPE(CHAR) STG(DEFINED) LEN(10) + DEFVAR(&EVTDATA 13)

DCL VAR(&MSGQLIB) TYPE(CHAR) STG(DEFINED) + LEN(10) DEFVAR(&EVTDATA 23)

DCL VAR(&MSGKEY) TYPE(CHAR) STG(DEFINED) + LEN(4) DEFVAR(&EVTDATA 387)

ADDLIBLE votrebib

MONMSG CPF0000

/ *Lecture du texte du message */

RCVMSG MSGQ(&MSGQLIB/&MSGQ) MSGKEY(&MSGKEY) + RMV(NO) MSG(&MSG)
/* Envoi d’un mail d’alerte */
SNDSMTPEMM RCP((&mail)) SUBJECT(‘Message avec +
réponse dans qsysopr’) NOTE(&MSG)
CHGVAR VAR(&ERROR) VALUE(‘ ‘)
ENDPGM

Il reçoit 4 paramètres , le plus intéressant est &EVTDATA qui contient la clé du message que vous pourrez alors lire par RCVMSG ça suffit

Pour arrêter la supervision par votre watch c’est la commande


==>ENDWCH SSNID(ANAWCH)

Remarque :


Il est préférable que le programme soit compiler en adoption de droit avec comme propriétaire qsecofr

Si vous envoyez un mail, votre utilisateur doit être inscrit sinon soumettez cette envoi avec un user qui l’est

On pourrait très bien répondre au message par la commande SNDRPY, sur certain messages connus