M-Detect - Analyseur de log pour IBMI

Différence entre versions

De MappingDoc
(Principe de fonctionnement)
(Facultatifs)
 
(94 révisions intermédiaires par un autre utilisateur non affichées)
Ligne 1 : Ligne 1 :
 +
==Prérequis==
 +
Avoir des connaissances sur l'invocation des projets Connect et ses paramètres
 +
 
==Introduction==
 
==Introduction==
 +
Cette documentation décrit le cas d'usage d'un de nos clients de M-Detect permettant de détecter certaines erreurs dans leurs logs QPJOBLOG IBMi.
  
L'analyseur de log M-Detect permet de :
+
De manière générale, l'analyseur de log M-Detect permet de :
 
*Anticiper les incidents
 
*Anticiper les incidents
 
*Identifier les erreurs dans la masse d’information
 
*Identifier les erreurs dans la masse d’information
Ligne 11 : Ligne 15 :
 
==Principe de fonctionnement==
 
==Principe de fonctionnement==
  
[[File:MDE_1.jpg|1000x|center|sans_cadre]]
+
Le fichier spool de log QPJOBLOG est envoyé à un serveur ONYX. Un fichier de paramétrage est utilisé pour déterminer quelles lignes du fichier QPJOBLOG doivoient être incluse et/ou excluse du rapport généré et envoyé par email par M-Detect.
 +
 
 +
[[File:MDE_1.jpg|1000px|center|sans_cadre]]
 +
 
 +
 
 +
 
 +
[[File:MDE_2.jpg|500px|center|sans_cadre]]
 +
 
 +
==Invocation==
 +
 
 +
Côté IBMI-i le spool est envoyé vers le serveur MAPPING Onyx à l'aide de la commande LPR en passant les métadatas nécessairent au traitement via le paramètre LPR DESTOPT.
 +
 
 +
Une fois sur le serveur MAPPING ONYX, M-Detect repose sur le principe de Connect paramétrable. Celui-ci prend en paramètre le fichier de paramétrage et génère en sortie un fichier de données qui sera le contenu du rapport d'analyse de la log ainsi qu'un fichier de métadonnées nécessaire, dans le cas de notre client, au traitement dans le workflow ONYX.
 +
 
 +
Son invocation se fait dans un workflow Onyx à l'aide d'une boite workflow M-Connect TEXT. Le nom du format Connect en question est : SPLFEXTRAC
 +
 
 +
===Connect===
 +
===Paramètres avancés===
 +
 
 +
- Type de sortie : LISTING  (Equivalent à ajouter un paramètre DB.MAPPING_DATASTREAM=LISTING)
 +
 
 +
====Obligatoires====
 +
 
 +
Lors de l'invocation du Connect, les paramètres doivent obligatoirement être passés :
 +
 
 +
*DB.INFILE_DATA : fichier SPOOL (QPJOBLOG) encodé en UCS2
 +
*DB.INFILE_PARAM : fichier de paramètres de filtrage
 +
*DB.OUTFILE_METADATA : fichier XML avec les infos relatives au spool
 +
*DB.OUTFILE_DATA : fichier SPOOL après filtrage des lignes
 +
*DB.MAPPING_WIDTHPAGE=9999
 +
 
 +
====Facultatifs====
 +
 
 +
 
 +
*DB.FROMAS400 : paramètre DESTOPT passé en LPR
 +
  (exemple : USER=SMET;OUTQ=PRT1;SPLF=QPJOBLOG;STARTPAGE=00000;STOPPAGE=000000;JOB=FACPRD;JOBNUM=123456;DATESPL=20201125)
 +
 
 +
Liste des attributs utilisables dans le paramètre "DB.FROMAS400" :
 +
 
 +
::*USER ou U
 +
::*SPLF ou S
 +
::*SPLNUM ou SPLFNUM ou N
 +
::*JOB ou J
 +
::*JOBNUM ou JN
 +
::*OUTQ ou O
 +
::*HOSTNAME ou H
 +
::* USRDTA ou UD
 +
::*DATESPL ou D (date au format AAAAMMJJ)
 +
::*NBPAGES ou P
 +
::*STARTPAGE ou F
 +
::*STOPPAGE ou L
 +
 +
*DB.USER : attribut "USER" du spool AS400
 +
*DB.SPLF : attribut SPLFNAME du spool AS400
 +
*DB.SPLNUM : attribut Numéro du spool AS400
 +
*DB.JOB : attribut JOBNAME du spool AS400
 +
*DB.JOBNUM : attribut JOBNUMBER du spool AS400
 +
*DB.OUTQ : attribut OUTORI du spool AS400
 +
*DB.HOSTNAME : hostname à l'origine du SPLF
 +
*DB.USRDTA : attribut USRDTA du spool AS400
 +
*DB.DATESPL : attribut DATE du spool AS400 (au format AAAAMMJJ)
 +
*DB.NBPAGES : nombre de pages du SPLF (obtenu après comptage avec map_count_page -type:TXT)
 +
*DB.STARTPAGE : numéro de la première page à traiter
 +
*DB.LASTPAGE : numéro de la dernière page à traiter
 +
*DB.MLL_PATH : emplacement des fichiers .mll (sans "/" ni "\" à la fin)
 +
(exemple : D:\Mapping\email) Attention les fichiers .mll doivent être encodés en UCS2
 +
*DB.ADD_MESSAGE_IN_FILE : "true" pour ajouter le message de l'email au début du fichier texte DB.OUTFILE_DATA
 +
 
 +
Les données présentes dans FROMAS400 peuvent être surchargées par les par les paramètres tels que DB.USER , DB.SPLF etc....
 +
 
 +
==Flux impliqués dans le traitement==
 +
===Fichier de paramétrage===
 +
Le fichier de paramétrage permet de paramétrer les remontés de logs. Il est passé au Connect paramétrable via le paramètre '''DB.INFILE_PARAM'''
 +
 
 +
Chaque élément <spool> correspond à une configuration de SPOOL à traiter.
 +
 
 +
Elément <attributes> :
 +
 
 +
Attributs du spools utilisés pour le filtrage niveau SPOOL
 +
 
 +
Eléments fils de <attributes> :
 +
 
 +
*<USER>
 +
*<SPLF>
 +
*<SPLNUM> (ou <SPLFNUM>)
 +
*<JOB>
 +
*<JOBNUM>
 +
*<OUTQ>
 +
*<HOSTNAME>
 +
*<USRDTA>
 +
*<NBPAGES>
 +
 
 +
 
 +
Attributs xml
 +
 
 +
cmp : permet de définir le type de comparaison à effectuer
 +
 
 +
*égalité : cmp="-eq" (valeur par défaut si non spécifié)
 +
*commence par : cmp="begin"
 +
*différent : cmp="-ne"
 +
*supérieur : cmp="-gt"
 +
*supérieur ou égal : cmp="-ge"
 +
*inférieur : cmp="-lt"
 +
*inférieur ou égal : cmp="-le"
 +
*contient : cmp="contains"
 +
*ne contient pas : cmp="not-contains"
 +
 
 +
Attention : les comparaisons "-lt" , "-gt" , "-le" et "-ge" sont de type numériques (1 < 00002)
 +
 
 +
Exemple :
 +
 
 +
Pour traiter les Spools dont le nom commence par QP
 +
 
 +
<attributes>
 +
    <SPLF cmp="begin">QP</SPLF>
 +
</attributes>
 +
 
 +
 
 +
Elément <variables> :
 +
 
 +
Permet de définir une liste de valeurs à récupérer directement dans le spool
 +
et de les nommer afin de les réutiliser pour l'objet, le message du mail,
 +
les adresses d'expéditeur ou de destinataires, mais aussi à partir du workflow
 +
en lisant le XML de réponse.
 +
 
 +
Un élément fils <variable> par variable à récupérer. Chaque variable sera disponible dans le
 +
fichier XML de réponse, mais également utilisables au niveau des propriétés d'envoi de l'email
 +
via la syntaxe suivante : [[NOM_VARIABLE]]
 +
 
 +
Attributs :
 +
*name : nom de la variable
 +
*page : page du spool dans laquelle se trouve la valeur
 +
*line : numéro de la ligne
 +
*col : position du caractère dans la ligne
 +
*len : longueur de la valeur à récupérer
 +
 
 +
Exemple :
 +
<variables>
 +
    <variable name="VARENV" page="1" line="4" col="42" len="3"/>
 +
</variables>
 +
 
 +
 
 +
Elément <email> :
 +
 
 +
 
 +
Propriétés de l'email à envoyer
 +
 
 +
*<from> : expéditeur
 +
*<to> : destinataire(s)
 +
*<cc> : destinataire(s) en copie
 +
*<object> : sujet du message
 +
*<message> : corps du message
 +
*<mll-file> : fichier mailing list (.mll) (5 maximum)  <span style="color:green">//Pour l'utilisation de cette propriété, le paramètre DB.MLL_PATH doit obligatoirement être renseigné</span>
 +
 
 +
Tous ces éléments peuvent contenir des variables sous la forme [[xxxxx]],
 +
que ce soient des attributs du spools ou des valeurs issues du contenu du Spool
 +
 
 +
Les éléments <to> , <cc> et <mll-file> peuvent être multiples, mais 5 maximum pour <mll-file>
 +
 
 +
Exemple :
 +
 
 +
<email>
 +
  <from>citmapping_[[VARENV]]@mappingsuite.com</from>
 +
  <to>nsmet@mappingsuite.com</to>
 +
  <to>test@gmail.com</to>
 +
  <to>mon_fichier_mll.mll</to>
 +
  <cc>jdieu@mappingsuite.com</cc>
 +
  <cc>user2@mappingsuite.com</cc>
 +
  <mll-file>Mailing_list1.mll</mll-file>
 +
  <mll-file>Mailing_list2_425.mll</mll-file>
 +
  <object>ASP1 ANO - Journalière - [[JOB]] de [[USER]] n° [[JOBNUM]] - [[DATESPL]]</object>
 +
  <message>Ceci est le corps de message de mon mail pour [[USER]]</message>
 +
</email>
 +
 
 +
Elément <lines> :
 +
 
 +
Liste les critères de sélection de chaque ligne
 +
 
 +
*<include> : lignes à récupérer
 +
*<exclude> : lignes à éliminer parmi les lignes récupérées
 +
*<nextline> : permet de définir comment reconnaitre une "ligne suivante",
 +
C'est à dire la suite d'une ligne répondant aux critères de sélection.
 +
*<reject-splf> : si une ligne correspond à ce critère, alors le spool est entièrement rejeté
 +
 
 +
 
 +
Attributs :
 +
*cmp : type de comparaison à effectuer
 +
**cmp="contains" : contient (par défaut)
 +
**cmp="not-contains" : ne contient pas
 +
**cmp="empty" : doit être vide (ou uniquement des espaces)
 +
*col : recherche à partir d'une position particulière dans la ligne
 +
*len : longueur de la ligne à prendre en compte pour la recherche
 +
 
 +
====Exemple====
 +
 
 +
<param>
 +
    <spool>
 +
      <attributes>                                      <span style="color:green">//Si le spool reçu depuis IMBI respecte les critères suivants</span>
 +
              <USER cmp="not-contains">MER</USER>                  <span style="color:green">//Le nom de l'utilisateur du spool ne contient pas la valeur "MER"</span>                 
 +
              <SPLF>QPJOBLOG</SPLF>                                <span style="color:green">//Le nom du spool est QPJOBLOG</span>                 
 +
              <SPLF>QPJOBLOG1</SPLF>                              <span style="color:green">//OU Le nom du spool est QPJOBLOG1</span>                               
 +
              <SPLNUM cmp="-le">1<SPLNUM>                          <span style="color:green">//Le numéro de spool est inférieur ou égal à 1</span> 
 +
              <JOB cmp="begin">FACPRD</JOB>                        <span style="color:green">//Le nom du job commence par FACPRD</span>
 +
              <HOSTNAME>ASP2</HOSTNAME>                            <span style="color:green">//Le nom du host vaut FACPRD</span>
 +
              <NBPAGES cmp="-le">500</NBPAGES>                    <span style="color:green">//Le nombre de pages est inférieur ou égal à 500</span>
 +
              <OUTQ cmp="-ne">PRT9</OUTQ>                          <span style="color:green">//L'OUTQ d'origine IBMI est différent de PRT9</span>
 +
              <USRDTA>MY CUSTOM DATA</USRDTA>                      <span style="color:green">//L'attribut du spool Référence utilisateur est égale à MY CUSTOM DATA</span>
 +
      </attributes>
 +
      <variables>                                      <span style="color:green">//On initialise des variables avec le contenu du spool</span>
 +
              <variable name="VARENV" page="1" line="4" col="42" len="3"/>  <span style="color:green">//On crée et initialise la variable VARENV avec le contenu du spool en page 1, ligne 4, colonne 42 sur une longueur de 3</span>
 +
              <variable name="test" page="2" line="9" col="60" len="6"/>    <span style="color:green">//On crée et initialise la variable test avec le contenu du spool en page 2, ligne 9, colonne 60 sur une longueur de 6</span>
 +
      </variables>
 +
      <email>                                          <span style="color:green">//paramétrage de l'envoi d'email</span>
 +
              <from>citmapping@mappingsuite.com</from>
 +
              <to>nsmet@mappingsuite.com</to>
 +
              <to>test@gmail.com</to>
 +
              <cc>jdieu@mappingsuite.com</cc>
 +
              <mll-file>ACH600_ADJHS.mll</mll-file>
 +
              <mll-file>Mailing_list_2.txt</mll-file>
 +
              <nowiki><object>[[test]] [[VARENV]]- ASP1 ANO - Journalière - [[JOB]] de [[USER]] n° [[JOBNUM]] - [[DATESPL]] --&gt; QPJOBLOG</object>
 +
              <message>Ceci est le corps de message de mon mail pour [[USER]]</message></nowiki>
 +
      </email>
 +
      <lines>                                          <span style="color:green">//paramétrage des lignes à inclure/exclure dans le rapport</span>
 +
              <include col="58" cmp="-eq">ERR</include>    <span style="color:green">//Inclure si dans la ligne il y a la valeur "'''ERR'''" en colonne 58</span>
 +
              <include col="40" len="50">err</include>    <span style="color:green">//Inclure si dans la ligne il y a la valeur "'''err'''" entre la colonne 40 et la colonne 90</span>
 +
              <include>non restauré(s) dans</include>      <span style="color:green">//Inclure si dans la ligne il y a la valeur "'''non restauré(s)'''"</span>
 +
              <include>; code fin 40 .</include>          <span style="color:green">//Inclure si dans la ligne il y a la valeur "'''; code fin 40''"'</span>
 +
              <include>; code fin 30 .</include>          <span style="color:green">//Inclure si dans la ligne il y a la valeur "'''; code fin 30'''"</span>
 +
              <include>; code fin 50 .</include>          <span style="color:green">//Inclure si dans la ligne il y a la valeur "'''; code fin 50'''"</span>
 +
              <include>; code fin 20 .</include>          <span style="color:green">//Inclure si dans la ligne il y a la valeur "'''; code fin 20'''"</span>
 +
              <include>; code fin 60 .</include>          <span style="color:green">//Inclure si dans la ligne il y a la valeur "'''; code fin 60'''"</span>
 +
              <include>LOT DEJA TRAITE LE</include>        <span style="color:green">//Inclure si dans la ligne il y a la valeur "'''LOT DEJA TRAITE LE'''"</span>
 +
              <include>lot refuse</include>                <span style="color:green">//Inclure si dans la ligne il y a la valeur "'''lot refuse'''"</span>
 +
              <exclude>: la facture de la précédente</exclude>              <span style="color:green">//Exclure si dans la ligne il y a la valeur "''': la facture de la précédente'''"</span>
 +
              <exclude>Message....: ERR : données GOP incomplètes</exclude>  <span style="color:green">//Exclure si dans la ligne il y a la valeur "'''Message....: ERR : données GOP incomplètes'''"</span>
 +
              <exclude>ERR : impossible de traiter Org</exclude>            <span style="color:green">//Exclure si dans la ligne il y a la valeur "'''ERR : impossible de traiter Org'''"</span>
 +
              <exclude>ERR : Paramètrage non trouvé.</exclude>              <span style="color:green">//Exclure si dans la ligne il y a la valeur '''>"ERR : Paramètrage non trouvé.'''"</span>
 +
              <nextline col="1" len="39" cmp="empty"></nextline>            <span style="color:green">//Si une ligne est vide entre la colonne 11 et la colonne 39, alors la ligne correspond à la suite du message de la ligne d'avant. Celle-ci doit alors être inclus dans le rapport</span>         
 +
              <reject-splf>Spool_demo</reject-splf>                          <span style="color:green">//si une ligne correspond à ce critère, alors le spool est entièrement rejeté</span>
 +
      </lines>
 +
    </spool>
 +
</param>
 +
 
 +
===Fichier de sortie métadata===
 +
 
 +
Ce fichier est généré via le paramètre de sortie du Connect paramétrable '''DB.OUTFILE_METADATA'''. Ce fichier est de manière générale pas obligatoire. Mais pour notre client, celui-ci est bien obligatoire et contient des données pour les traitements à réaliser côté workflows.
 +
 
 +
<metadatas>
 +
    <!--  Attributs de Spool -->
 +
    <USER>SMET</USER>
 +
    <SPLF>QPJOBLOG</SPLF>
 +
    <SPLNUM>1</SPLNUM>
 +
    <JOB>FACPRD</JOB>
 +
    <JOBNUM>123456</JOBNUM>
 +
    <OUTQ>PRT1</OUTQ>
 +
    <HOSTNAME>ASP2</HOSTNAME>
 +
    <USRDTA></USRDTA>
 +
    <DATESPL>20210113</DATESPL>
 +
    <NBPAGES>500</NBPAGES>
 +
    <STARTPAGE>000000</STARTPAGE>
 +
    <STOPPAGE>000000</STOPPAGE>
 +
    <!--  Déclinaisons de la date du spool sous plusieurs formats -->
 +
    <DATESPL_ISO>2021-01-13</DATESPL_ISO>
 +
    <DATESPL_EU>13/01/2021</DATESPL_EU>
 +
    <DATESPL_US>01/13/2021</DATESPL_US>
 +
    <!--  Variables -->
 +
    <variable name="VARENV"><![CDATA[JOB]]></variable>
 +
    <variable name="test"><![CDATA[268967]]></variable>
 +
    <!--  Informations eMail -->
 +
    <from>citmapping@mappingsuite.com</from>
 +
    <to>assistancedf@macompany.fr;DSI_Assistance_GF@macompany.fr;Assistance-fonctionnelle-
 +
groupeGF@macompany.fr;assistancedf@macompany.fr;DSI_Assistance_GF@macompany.fr;Assistance-fonctionnelle-groupeGF@macompany.com</to>
 +
    <cc>jtest@macompany.com;Dtest@macompany.fr;stest@macompany.fr;dtest2@macompany.fr;Atest@macompany.fr</cc>
 +
    <object><![CDATA[268967 JOB- ASP1 ANO - Journalière - FACPRD de SMET n° 123456 - 20201125 --> QPJOBLOG]]></object>
 +
    <message><![CDATA[Ceci est le corps de message de mon mail pour SMET]]></message>
 +
    <!-- Flag Spool pris en charge ou non  -->
 +
    <processed>true</processed>
 +
    <!--  Flag lignes trouvées ou non -->
 +
    <content-found>true</content-found>
 +
    <!-- Infos supplémentaires pour debug  -->
 +
    <mll-files><![CDATA[C:\mapping\temp\MACOMPANY/test_QPJOBLOG.ml2;C:\mapping\temp\MACOMPANY/Mailing_list_2.txt]]></mll-files>
 +
    <param-file><![CDATA[C:\mapping\temp\MACOMPANY\20201215\PARAM_QPJOBLOG.xml]]></param-file>
 +
    <config-position>2</config-position>
 +
</metadatas>
 +
 
 +
===Fichier de sortie de donnée===
 +
Ce fichier '''DB.OUTFILE_DATA''' contient les lignes extraites du fichier de log QPJOBLOG répondant aux critères listés dans le fichier de paramétrage. Ce fichier d'extraction sera utilisé comme contenu de l'email final.
 +
 
 +
 
 +
Please find below the log extract for PRODSNI
 +
 
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/017885/C/000827495.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/042683/C/000301552.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/100251/C/001182500.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/105047/C/001206325.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/105301/C/001207792.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/105380/C/001207900.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/105402/C/001208506.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/127566/C/001195815.
 +
Message . . . . :  ERR: Guichet-BIC(17607/00001/CCBPFRPPSTR)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/148443/C/001347783.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/149033/C/001349110.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/149079/C/001250625.
 +
Message . . . . :  ERR: Guichet-BIC(15607/00010/CCBPFRPPNCE)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/162128/C/001658969.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/170489/C/001387332.
 +
Message . . . . :  ERR: Guichet-BIC(15607/00073/CCBPFRPPNCE)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/182243/C/001378071.
 +
Message . . . . :  ERR: Guichet-BIC(15607/00073/CCBPFRPPNCE)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/182243/C/001378071. 
 +
Message . . . . :  ERR : Mandat sans ICS
 +
Message . . . . :  ERR : payeur L01/185571/C/001562325.
 +
Message . . . . :  ERR: Guichet-BIC(74202/00001/PRNSFRP1XXX)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/187434/C/001372800.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/211115/C/001754827.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/215515/C/001774196.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/231382/C/001892359.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/348757/C/002194119.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/371000/C/002114636.
 +
Message . . . . :  ERR: Guichet-BIC(18025/10501/CEPAFRPP802)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/394697/C/002489654.
 +
Message . . . . :  ERR: Guichet-BIC(74202/00001/PRNSFRP1XXX)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/398221/C/002508753.
 +
Message . . . . :  ERR: Guichet-BIC(74202/00001/PRNSFRP1XXX)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/398221/C/002508753.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/400862/C/002527741.
 +
Message . . . . :  ERR: Guichet-BIC(//NTSBDEB1XXX)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/428481/C/002626022.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/433464/C/002683070.
 +
Message . . . . :  ERR: Guichet-BIC(10178/00017/CCBPFRPPCHX)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/441381/C/002665507.
 +
Message . . . . :  ERR: Guichet-BIC(//CREGBEBB)inexistant ds référentiel Guich-BIC
 +
Message . . . . :  ERR : payeur L01/453860/C/002670858.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/455952/C/002534965.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/464899/C/002018145.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/465221/C/001966120.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/465265/C/002706900.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/465894/C/002705095.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/465962/C/002708612.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/466003/C/001777779.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/466211/C/002489635.
 +
Message . . . . :  ERR : Mandat absent
 +
Message . . . . :  ERR : payeur L01/466363/C/002524605.
 +
 
 +
===Fichier mll===
 +
 
 +
Comme nous l'avons vu précédemment, il est possible de faire référence à des fichiers mailing list (mll).<br>
 +
Leur nom doit être indiqué dans le fichier de paramétrage à l'aide de la balise <mll-file>.<br>
 +
Le chemin du répertoire ayant le ou les fichiers mll doit être stipulé via le paramètre d'entrée '''DB.MLL_PATH'''<br>
 +
Attention : Ce fichier doit être encodé en UCS2<br>
 +
 
 +
</u>Exemple de contenu de fichier mll</u>
 +
 
 +
to:assistancetest@macompany.fr
 +
to:DSI_test@macompany.fr
 +
to:AssistanceF@macompany.fr
 +
cc:dtest@macompany.fr
 +
cc:stest@macompany.fr
 +
cci:test@mappingsuite.com
 +
cc:Dtest@macompany.fr
 +
cc:Atest@macompany.fr
 +
cc:ctest@macompany.fr
 +
cc:ltest@macompany.fr
 +
cc:exploit@macompany.fr

Version actuelle datée du 5 juillet 2021 à 08:11

Prérequis

Avoir des connaissances sur l'invocation des projets Connect et ses paramètres

Introduction

Cette documentation décrit le cas d'usage d'un de nos clients de M-Detect permettant de détecter certaines erreurs dans leurs logs QPJOBLOG IBMi.

De manière générale, l'analyseur de log M-Detect permet de :

  • Anticiper les incidents
  • Identifier les erreurs dans la masse d’information
  • Réduire le temps consacré à l’analyse
  • Prévenir le bon interlocuteur suivant les règles définies


Le but principal étant d'Assurer la qualité de service en anticipant les incidents.

Principe de fonctionnement

Le fichier spool de log QPJOBLOG est envoyé à un serveur ONYX. Un fichier de paramétrage est utilisé pour déterminer quelles lignes du fichier QPJOBLOG doivoient être incluse et/ou excluse du rapport généré et envoyé par email par M-Detect.

MDE 1.jpg


MDE 2.jpg

Invocation

Côté IBMI-i le spool est envoyé vers le serveur MAPPING Onyx à l'aide de la commande LPR en passant les métadatas nécessairent au traitement via le paramètre LPR DESTOPT.

Une fois sur le serveur MAPPING ONYX, M-Detect repose sur le principe de Connect paramétrable. Celui-ci prend en paramètre le fichier de paramétrage et génère en sortie un fichier de données qui sera le contenu du rapport d'analyse de la log ainsi qu'un fichier de métadonnées nécessaire, dans le cas de notre client, au traitement dans le workflow ONYX.

Son invocation se fait dans un workflow Onyx à l'aide d'une boite workflow M-Connect TEXT. Le nom du format Connect en question est : SPLFEXTRAC

Connect

Paramètres avancés

- Type de sortie : LISTING (Equivalent à ajouter un paramètre DB.MAPPING_DATASTREAM=LISTING)

Obligatoires

Lors de l'invocation du Connect, les paramètres doivent obligatoirement être passés :

  • DB.INFILE_DATA : fichier SPOOL (QPJOBLOG) encodé en UCS2
  • DB.INFILE_PARAM : fichier de paramètres de filtrage
  • DB.OUTFILE_METADATA : fichier XML avec les infos relatives au spool
  • DB.OUTFILE_DATA : fichier SPOOL après filtrage des lignes
  • DB.MAPPING_WIDTHPAGE=9999

Facultatifs

  • DB.FROMAS400 : paramètre DESTOPT passé en LPR

(exemple : USER=SMET;OUTQ=PRT1;SPLF=QPJOBLOG;STARTPAGE=00000;STOPPAGE=000000;JOB=FACPRD;JOBNUM=123456;DATESPL=20201125)

Liste des attributs utilisables dans le paramètre "DB.FROMAS400" :

  • USER ou U
  • SPLF ou S
  • SPLNUM ou SPLFNUM ou N
  • JOB ou J
  • JOBNUM ou JN
  • OUTQ ou O
  • HOSTNAME ou H
  • USRDTA ou UD
  • DATESPL ou D (date au format AAAAMMJJ)
  • NBPAGES ou P
  • STARTPAGE ou F
  • STOPPAGE ou L
  • DB.USER : attribut "USER" du spool AS400
  • DB.SPLF : attribut SPLFNAME du spool AS400
  • DB.SPLNUM : attribut Numéro du spool AS400
  • DB.JOB : attribut JOBNAME du spool AS400
  • DB.JOBNUM : attribut JOBNUMBER du spool AS400
  • DB.OUTQ : attribut OUTORI du spool AS400
  • DB.HOSTNAME : hostname à l'origine du SPLF
  • DB.USRDTA : attribut USRDTA du spool AS400
  • DB.DATESPL : attribut DATE du spool AS400 (au format AAAAMMJJ)
  • DB.NBPAGES : nombre de pages du SPLF (obtenu après comptage avec map_count_page -type:TXT)
  • DB.STARTPAGE : numéro de la première page à traiter
  • DB.LASTPAGE : numéro de la dernière page à traiter
  • DB.MLL_PATH : emplacement des fichiers .mll (sans "/" ni "\" à la fin)

(exemple : D:\Mapping\email) Attention les fichiers .mll doivent être encodés en UCS2

  • DB.ADD_MESSAGE_IN_FILE : "true" pour ajouter le message de l'email au début du fichier texte DB.OUTFILE_DATA

Les données présentes dans FROMAS400 peuvent être surchargées par les par les paramètres tels que DB.USER , DB.SPLF etc....

Flux impliqués dans le traitement

Fichier de paramétrage

Le fichier de paramétrage permet de paramétrer les remontés de logs. Il est passé au Connect paramétrable via le paramètre DB.INFILE_PARAM

Chaque élément <spool> correspond à une configuration de SPOOL à traiter.

Elément <attributes> :

Attributs du spools utilisés pour le filtrage niveau SPOOL

Eléments fils de <attributes> :

  • <USER>
  • <SPLF>
  • <SPLNUM> (ou <SPLFNUM>)
  • <JOB>
  • <JOBNUM>
  • <OUTQ>
  • <HOSTNAME>
  • <USRDTA>
  • <NBPAGES>


Attributs xml

cmp : permet de définir le type de comparaison à effectuer

  • égalité : cmp="-eq" (valeur par défaut si non spécifié)
  • commence par : cmp="begin"
  • différent : cmp="-ne"
  • supérieur : cmp="-gt"
  • supérieur ou égal : cmp="-ge"
  • inférieur : cmp="-lt"
  • inférieur ou égal : cmp="-le"
  • contient : cmp="contains"
  • ne contient pas : cmp="not-contains"

Attention : les comparaisons "-lt" , "-gt" , "-le" et "-ge" sont de type numériques (1 < 00002)

Exemple :

Pour traiter les Spools dont le nom commence par QP

<attributes>
   <SPLF cmp="begin">QP</SPLF>
</attributes>


Elément <variables> :

Permet de définir une liste de valeurs à récupérer directement dans le spool

et de les nommer afin de les réutiliser pour l'objet, le message du mail, les adresses d'expéditeur ou de destinataires, mais aussi à partir du workflow en lisant le XML de réponse.

Un élément fils <variable> par variable à récupérer. Chaque variable sera disponible dans le fichier XML de réponse, mais également utilisables au niveau des propriétés d'envoi de l'email via la syntaxe suivante : NOM_VARIABLE

Attributs :

  • name : nom de la variable
  • page : page du spool dans laquelle se trouve la valeur
  • line : numéro de la ligne
  • col : position du caractère dans la ligne
  • len : longueur de la valeur à récupérer

Exemple :

<variables>
   <variable name="VARENV" page="1" line="4" col="42" len="3"/>
</variables>


Elément <email> :


Propriétés de l'email à envoyer

  • <from> : expéditeur
  • <to> : destinataire(s)
  • <cc> : destinataire(s) en copie
  • <object> : sujet du message
  • <message> : corps du message
  • <mll-file> : fichier mailing list (.mll) (5 maximum) //Pour l'utilisation de cette propriété, le paramètre DB.MLL_PATH doit obligatoirement être renseigné

Tous ces éléments peuvent contenir des variables sous la forme xxxxx, que ce soient des attributs du spools ou des valeurs issues du contenu du Spool

Les éléments <to> , <cc> et <mll-file> peuvent être multiples, mais 5 maximum pour <mll-file>

Exemple :

<email>
  <from>citmapping_VARENV@mappingsuite.com</from>
  <to>nsmet@mappingsuite.com</to>
  <to>test@gmail.com</to>
  <to>mon_fichier_mll.mll</to>
  <cc>jdieu@mappingsuite.com</cc>
  <cc>user2@mappingsuite.com</cc>
  <mll-file>Mailing_list1.mll</mll-file>
  <mll-file>Mailing_list2_425.mll</mll-file>
  <object>ASP1 ANO - Journalière - JOB de USERJOBNUM - DATESPL</object>
  <message>Ceci est le corps de message de mon mail pour USER</message>
</email>

Elément <lines> :

Liste les critères de sélection de chaque ligne

  • <include> : lignes à récupérer
  • <exclude> : lignes à éliminer parmi les lignes récupérées
  • <nextline> : permet de définir comment reconnaitre une "ligne suivante",

C'est à dire la suite d'une ligne répondant aux critères de sélection.

  • <reject-splf> : si une ligne correspond à ce critère, alors le spool est entièrement rejeté


Attributs :

  • cmp : type de comparaison à effectuer
    • cmp="contains" : contient (par défaut)
    • cmp="not-contains" : ne contient pas
    • cmp="empty" : doit être vide (ou uniquement des espaces)
  • col : recherche à partir d'une position particulière dans la ligne
  • len : longueur de la ligne à prendre en compte pour la recherche

Exemple

<param>
   <spool>
     <attributes>                                      //Si le spool reçu depuis IMBI respecte les critères suivants
             <USER cmp="not-contains">MER</USER>                  //Le nom de l'utilisateur du spool ne contient pas la valeur "MER"                  
             <SPLF>QPJOBLOG</SPLF>                                //Le nom du spool est QPJOBLOG                  
             <SPLF>QPJOBLOG1</SPLF>                               //OU Le nom du spool est QPJOBLOG1                                
             <SPLNUM cmp="-le">1<SPLNUM>                          //Le numéro de spool est inférieur ou égal à 1  
             <JOB cmp="begin">FACPRD</JOB>                        //Le nom du job commence par FACPRD
             <HOSTNAME>ASP2</HOSTNAME>                            //Le nom du host vaut FACPRD
             <NBPAGES cmp="-le">500</NBPAGES>                     //Le nombre de pages est inférieur ou égal à 500
             <OUTQ cmp="-ne">PRT9</OUTQ>                          //L'OUTQ d'origine IBMI est différent de PRT9
             <USRDTA>MY CUSTOM DATA</USRDTA>                      //L'attribut du spool Référence utilisateur est égale à MY CUSTOM DATA
     </attributes>
     <variables>                                       //On initialise des variables avec le contenu du spool
             <variable name="VARENV" page="1" line="4" col="42" len="3"/>   //On crée et initialise la variable VARENV avec le contenu du spool en page 1, ligne 4, colonne 42 sur une longueur de 3
             <variable name="test" page="2" line="9" col="60" len="6"/>     //On crée et initialise la variable test avec le contenu du spool en page 2, ligne 9, colonne 60 sur une longueur de 6
     </variables>
     <email>                                          //paramétrage de l'envoi d'email
             <from>citmapping@mappingsuite.com</from>
             <to>nsmet@mappingsuite.com</to>
             <to>test@gmail.com</to>
             <cc>jdieu@mappingsuite.com</cc>
             <mll-file>ACH600_ADJHS.mll</mll-file>
             <mll-file>Mailing_list_2.txt</mll-file>
             <object>[[test]] [[VARENV]]- ASP1 ANO - Journalière - [[JOB]] de [[USER]] n° [[JOBNUM]] - [[DATESPL]] --> QPJOBLOG</object>
              <message>Ceci est le corps de message de mon mail pour [[USER]]</message>
     </email>
     <lines>                                          //paramétrage des lignes à inclure/exclure dans le rapport
             <include col="58" cmp="-eq">ERR</include>    //Inclure si dans la ligne il y a la valeur "ERR" en colonne 58
             <include col="40" len="50">err</include>     //Inclure si dans la ligne il y a la valeur "err" entre la colonne 40 et la colonne 90
             <include>non restauré(s) dans</include>      //Inclure si dans la ligne il y a la valeur "non restauré(s)"
             <include>; code fin 40 .</include>           //Inclure si dans la ligne il y a la valeur "'; code fin 40"'
             <include>; code fin 30 .</include>           //Inclure si dans la ligne il y a la valeur "; code fin 30"
             <include>; code fin 50 .</include>           //Inclure si dans la ligne il y a la valeur "; code fin 50"
             <include>; code fin 20 .</include>           //Inclure si dans la ligne il y a la valeur "; code fin 20"
             <include>; code fin 60 .</include>           //Inclure si dans la ligne il y a la valeur "; code fin 60"
             <include>LOT DEJA TRAITE LE</include>        //Inclure si dans la ligne il y a la valeur "LOT DEJA TRAITE LE"
             <include>lot refuse</include>                //Inclure si dans la ligne il y a la valeur "lot refuse"
             <exclude>: la facture de la précédente</exclude>               //Exclure si dans la ligne il y a la valeur ": la facture de la précédente"
             <exclude>Message....: ERR : données GOP incomplètes</exclude>  //Exclure si dans la ligne il y a la valeur "Message....: ERR : données GOP incomplètes"
             <exclude>ERR : impossible de traiter Org</exclude>             //Exclure si dans la ligne il y a la valeur "ERR : impossible de traiter Org"
             <exclude>ERR : Paramètrage non trouvé.</exclude>               //Exclure si dans la ligne il y a la valeur >"ERR : Paramètrage non trouvé."
             <nextline col="1" len="39" cmp="empty"></nextline>             //Si une ligne est vide entre la colonne 11 et la colonne 39, alors la ligne correspond à la suite du message de la ligne d'avant. Celle-ci doit alors être inclus dans le rapport           
             <reject-splf>Spool_demo</reject-splf>                          //si une ligne correspond à ce critère, alors le spool est entièrement rejeté
     </lines>
   </spool>
</param>

Fichier de sortie métadata

Ce fichier est généré via le paramètre de sortie du Connect paramétrable DB.OUTFILE_METADATA. Ce fichier est de manière générale pas obligatoire. Mais pour notre client, celui-ci est bien obligatoire et contient des données pour les traitements à réaliser côté workflows.

<metadatas>
   <USER>SMET</USER>
   <SPLF>QPJOBLOG</SPLF>
   <SPLNUM>1</SPLNUM>
   <JOB>FACPRD</JOB>
   <JOBNUM>123456</JOBNUM>
   <OUTQ>PRT1</OUTQ>
   <HOSTNAME>ASP2</HOSTNAME>
   <USRDTA></USRDTA>
   <DATESPL>20210113</DATESPL>
   <NBPAGES>500</NBPAGES>
   <STARTPAGE>000000</STARTPAGE>
   <STOPPAGE>000000</STOPPAGE>
   <DATESPL_ISO>2021-01-13</DATESPL_ISO>
   <DATESPL_EU>13/01/2021</DATESPL_EU>
   <DATESPL_US>01/13/2021</DATESPL_US>
   <variable name="VARENV"><![CDATA[JOB]]></variable>
   <variable name="test"><![CDATA[268967]]></variable>
   <from>citmapping@mappingsuite.com</from>
   <to>assistancedf@macompany.fr;DSI_Assistance_GF@macompany.fr;Assistance-fonctionnelle- 
groupeGF@macompany.fr;assistancedf@macompany.fr;DSI_Assistance_GF@macompany.fr;Assistance-fonctionnelle-groupeGF@macompany.com</to>
   <cc>jtest@macompany.com;Dtest@macompany.fr;stest@macompany.fr;dtest2@macompany.fr;Atest@macompany.fr</cc>
   <object><![CDATA[268967 JOB- ASP1 ANO - Journalière - FACPRD de SMET n° 123456 - 20201125 --> QPJOBLOG]]></object>
   <message><![CDATA[Ceci est le corps de message de mon mail pour SMET]]></message>
   <processed>true</processed>
   <content-found>true</content-found>
   <mll-files><![CDATA[C:\mapping\temp\MACOMPANY/test_QPJOBLOG.ml2;C:\mapping\temp\MACOMPANY/Mailing_list_2.txt]]></mll-files>
   <param-file><![CDATA[C:\mapping\temp\MACOMPANY\20201215\PARAM_QPJOBLOG.xml]]></param-file>
   <config-position>2</config-position>
</metadatas>

Fichier de sortie de donnée

Ce fichier DB.OUTFILE_DATA contient les lignes extraites du fichier de log QPJOBLOG répondant aux critères listés dans le fichier de paramétrage. Ce fichier d'extraction sera utilisé comme contenu de l'email final.


Please find below the log extract for PRODSNI
 
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/017885/C/000827495.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/042683/C/000301552.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/100251/C/001182500.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/105047/C/001206325.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/105301/C/001207792.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/105380/C/001207900.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/105402/C/001208506.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/127566/C/001195815.
Message . . . . :   ERR: Guichet-BIC(17607/00001/CCBPFRPPSTR)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/148443/C/001347783.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/149033/C/001349110.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/149079/C/001250625.
Message . . . . :   ERR: Guichet-BIC(15607/00010/CCBPFRPPNCE)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/162128/C/001658969.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/170489/C/001387332.
Message . . . . :   ERR: Guichet-BIC(15607/00073/CCBPFRPPNCE)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/182243/C/001378071.
Message . . . . :   ERR: Guichet-BIC(15607/00073/CCBPFRPPNCE)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/182243/C/001378071.  
Message . . . . :   ERR : Mandat sans ICS
Message . . . . :   ERR : payeur L01/185571/C/001562325.
Message . . . . :   ERR: Guichet-BIC(74202/00001/PRNSFRP1XXX)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/187434/C/001372800.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/211115/C/001754827.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/215515/C/001774196.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/231382/C/001892359.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/348757/C/002194119.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/371000/C/002114636.
Message . . . . :   ERR: Guichet-BIC(18025/10501/CEPAFRPP802)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/394697/C/002489654.
Message . . . . :   ERR: Guichet-BIC(74202/00001/PRNSFRP1XXX)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/398221/C/002508753.
Message . . . . :   ERR: Guichet-BIC(74202/00001/PRNSFRP1XXX)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/398221/C/002508753.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/400862/C/002527741.
Message . . . . :   ERR: Guichet-BIC(//NTSBDEB1XXX)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/428481/C/002626022.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/433464/C/002683070.
Message . . . . :   ERR: Guichet-BIC(10178/00017/CCBPFRPPCHX)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/441381/C/002665507.
Message . . . . :   ERR: Guichet-BIC(//CREGBEBB)inexistant ds référentiel Guich-BIC
Message . . . . :   ERR : payeur L01/453860/C/002670858.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/455952/C/002534965.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/464899/C/002018145.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/465221/C/001966120.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/465265/C/002706900.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/465894/C/002705095.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/465962/C/002708612.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/466003/C/001777779.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/466211/C/002489635.
Message . . . . :   ERR : Mandat absent
Message . . . . :   ERR : payeur L01/466363/C/002524605.

Fichier mll

Comme nous l'avons vu précédemment, il est possible de faire référence à des fichiers mailing list (mll).
Leur nom doit être indiqué dans le fichier de paramétrage à l'aide de la balise <mll-file>.
Le chemin du répertoire ayant le ou les fichiers mll doit être stipulé via le paramètre d'entrée DB.MLL_PATH
Attention : Ce fichier doit être encodé en UCS2

Exemple de contenu de fichier mll

to:assistancetest@macompany.fr
to:DSI_test@macompany.fr
to:AssistanceF@macompany.fr
cc:dtest@macompany.fr
cc:stest@macompany.fr
cci:test@mappingsuite.com
cc:Dtest@macompany.fr
cc:Atest@macompany.fr
cc:ctest@macompany.fr
cc:ltest@macompany.fr
cc:exploit@macompany.fr