Dans cet article


Offres d'emploi

Tags

W7 Logs sous Planisware 5

Les actions et transactions réalisées dans P5 sont loggées dans les fichiers de logs de l’application. (cf. “Les fichiers de log P5”). Ainsi, jusqu’à la version OPX2 R4, le seul moyen d’analyser l’activité de l’application consistait à mettre en place une solution permettant d’analyser les fichiers de logs générés par l’application. Afin de faciliter l’analyse des transactions de P5 (en termes de performances, de nombre d’erreurs, de nombre de connexions etc.) une fonctionnalité de stockage structuré des logs de transactions a été développée depuis la P5 SP1. Il s’agit des W7 Logs.

Principe :

Les W7 Logs permettent de stocker en Base De Données (BDD) de manière structurée les traces des transactions réalisées dans P5 (connexions utilisateur, actions réalisées dans P5…).  A chaque transaction une ligne est créée dans la table W7_LOGS de la BDD de l’application sous P5. Seules les transactions que l’on souhaite tracer seront enregistrées dans la table W7_LOG.

Format de la table des W7_LOG :

<td nowrap="nowrap" valign="bottom" width="115">
  Type de donn&eacute;es
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Valeur Nullable
</td>

<td >
  Description
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(64)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(64)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(64)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(20)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(20)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(8)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(20)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(128)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(20)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(128)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(20)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(128)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(20)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(150)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(110)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(3900)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(256)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(256)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  VARCHAR2(256)
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Serveur h&ocirc;te du processus (IP ou hostname)
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  NUMBER
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Port du processus Planisware
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  NUMBER
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td >
  PID du processus Planisware&nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  DATE
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
<td nowrap="nowrap" valign="bottom" width="115">
  DATE
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  Yes
</td>

<td nowrap="nowrap" valign="bottom" width="104">
  &nbsp;
</td>
Nom de colonne
WHEN
WHOREALNAME
WHOLOGONNAME
WHATVERB
WHATNOUN
WHATSUCCESS
WHERETYPE
WHERENAME
WHEREFROMTYPE
WHEREFROMNAME
WHERETOTYPE
WHERETONAME
ONWHATTYPE
ONWHATPATH
ONWHATNAME
INFO
PERFDATA
PERFDELTA
HOST
PORT
PID
OPX2_DATE
PDATE

 

Paramétrage et pré-requis :

Pour fonctionner les W7_LOGS ont besoin des patchs suivants :

  • sc5976 (3.43)
  • sc5977 (3.36)
  • sc6119 (3.6)
  • sc6222 (3.2)
  • sc6285 (3.2)
  • sc6306 (3.1)
  • sc6307 (3.1)

De plus il est nécessaire d’indiquer dans le fichier de paramétrage « intranet.ini » le fonctionnement souhaité avec les options souhaitées. Voici un exemple de lignes de configuration :

;; W7
(setq w7::*log-list* &#39;(:user-load
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :infos
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :error
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;:DATABASE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;:ACTION
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :APPLET-SESSION
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;:OBJECTS-UPDATE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;:DB-SESSION
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :transaction :transaction-time :transaction-client-time :transaction-client-cpu-time
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :supervision-transactions :supervision-data :supervision-process-size :supervision-load
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))
(setq w7::*log-in-database* t)

;; nil -> delete auto ; 0 -> no delete ; N -> N days
(setq w7::*keep-logs* 2) ;; keep 2 days:

Dans l’exemple précédent les éléments de la “log-list” préfixés par “:” (ex. :infos) sont loggés en BDD et ceux préfixés par “;:” (ex. ;:DATABASE) ne le sont pas car ils sont commentés. Cette configuration permettent de définir les paramètres suivants :

  • log-list
  • log-in-database
  • keep-logs

Purge automatique de la table :

Comme indiqué précédemment la durée de rétention des lignes de W7_LOG est paramétrable dans le fichier « intranet.ini » avec le paramètre “keep-log”.

Pour information la suppression des enregistrements trop anciens est réalisée lors du démarrage des Intranet Server (IS). A noter que chacun des IS supprime les logs qu’il a générés (qu’il soit Master ou Slave). Donc par exemple un IS hébergé par le serveur « my_P5_serveur » et disponible sur le port 8401 va indiquer dans ses logs HOST=my_P5_server et PORT=8401. A chaque (re)démarrage de l’IS celui-ci va supprimer dans la table des W7_LOG tous les enregistrements du type HOST=my_P5_server et PORT=8401 et dont la date est supérieure au paramètre de purge.

Exemple de logs où l’on peut voir les commandes de purge des W7 LOG :

intranet-2012-04-21-8401.log

Transaction SYSTEM 12029-14 SQL Connection test
Transaction SYSTEM 12029-14 SQL done 2 ms
Transaction SYSTEM 12029-14 SQL EXECUTE: delete from W7_LOG
where HOST = &#39;<span >8401</span>&#39; and
OPX2_DATE <
 to_date(&#39;2012/04/19 23:17:01&#39;,&#39;YYYY/MM/DD HH24:MI:SS&#39;)
Transaction SYSTEM 12029-14 SQL done 9912 ms
Transaction SYSTEM 12029-14 SQL COMMIT-WORK:
Transaction SYSTEM 12029-14 SQL done 83 ms
Transaction SYSTEM 12029-14 SQL Connection test
Transaction SYSTEM 12029-14 SQL done 1 ms
Transaction SYSTEM 12029-14 SQL INSERT: W7_LOG
(WHEN WHOREALNAME WHOLOGONNAME WHATVERB WHATNOUN WHATSUCCESS
WHERETYPE WHERENAME WHEREFROMTYPE WHEREFROMNAME WHERETOTYPE
WHERETONAME ONWHATTYPE ONWHATPATH ONWHATNAME INFO PERFDATA
PERFDELTA HOST PORT ...)
Transaction SYSTEM 12029-14 SQL done 2 ms
Transaction SYSTEM 12029-14 SQL Close output
Transaction SYSTEM 12029-14 SQL done 20 ms
Transaction SYSTEM 12029-14 SQL COMMIT-WORK:
Transaction SYSTEM 12029-14 SQL done 3 ms

L'équipe AXOPEN

Voir aussi les articles suivants

Suppression d&rsquo;objets sous P5

Suppression d’objets sous P5

Le 22/03/2012 par Thibault Gonin

Rappels d’architecture : L’architecture du progiciel Planisware 5 repose sur une base de données contenant des tables indépendantes (une par classe d’objet). Les relations entre objets sont gérées exclusivement par la couche logicielle (il n’y a pas de relations directement implémentées dans le SGBD).
Lire l'article

Problème de suppression d’objets liés à un projet P5 supprimé
La suppression d’un projet dans P5 est une action sensible, qu’il faut réaliser avec précautions, car elle peut entrainer de nombreux problèmes. Ces problèmes touchent en général les objets liés au projet supprimé.
Lire l'article

**Description ** Afin d’automatiser l’arrêt-relance du progiciel P5 on peut utiliser OPX Services Scheduler qui fonctionne sur toutes les plateformes. Sur les serveurs UNIX, on peut être amené à utiliser la fonctionnalité CRONTAB pour gérer les arrêt-relances de l’application (en particulier sur des environnements de test ou de recette).
Lire l'article