Rapports (ReportBundle)

De SOS Paris
Aller à : navigation, rechercher


Report.png
Module Report
Nom Rapports & Tableaux de bord
Version 2.0
Github https://github.com/AriiPortal/ReportBundle

Rapports et tableaux de bord

Ce module permet de:

  • d'alimenter des tables génériques dans la base de données
  • consolider les données des différents outils du SI
  • générer directement des tableaux de bord à partir des écrans Arii
  • publier des données de métrologie (décalage, dérive...)
  • créer, générer et publier des rapports JasperReports

Données

Les données sont extraites de différents outils (actuellement Open Source JobScheduler et Autosys).

Elles concernent les aspects suivants:

  • les définitions des traitements (date de création, machine, login...)
  • les exécutions des traitements (début, fin, statut...)
  • les groupes fonctionnels de jobs (synthèse par processus)
  • les groupes applications (synthèse par domaine applicatif)

elles sont liées:

  • dépendances entre traitements
  • regroupement par processus et applications
  • planifications

elles sont triées:

  • en types (ex: type de job)
  • en classe (technique, cyclique, temporaire...)

puis agrégées:

  • exécutions par heure, par mois et par jour
  • cycle de vie des traitements

Traitements

Nom Description Alimentation
report_job Traitements d'ordonnancement
report_job_day Agrégation par jour /report/fr/cron/job2jobdays.html
report_job_month Agrégation par mois /report/fr/cron/job2jobmonths.html

Exécutions

Nom Description Alimentation
report_run Données d'exécution des traitements
report_run_hour Agrégation par heure /report/fr/cron/run2runhours.html
report_run_day Agrégation par jour /report/fr/cron/run2rundays.html
report_run_month Agrégation par mois /report/fr/cron/run2runmonths.html
report_run_year Agrégation par année (non implémentée) /report/fr/cron/run2runyears.html

Report run

Champs

Nom Description
spooler_name Nom de l'instance qui traite les jobs (Ex: ACE pour Autosys, ou l'id pour jobscheduler)
job_name Nom du traitement
app Application (généralement déduit du nom du job ou de l'instance)
env Environnement (généralement déduit du nom du job ou de l'instance)
status Statut du traitement (SUCCES,FAILURE,etc...)
start_time Heure de départ
end_time Heure de fin
run Numéro d'exécution
try Numéro de reprise
exit_code Code de retour du traitement
alarm_time Heure de déclenchement de l'alarme
alarm Code de l'alarme
ack_time Heure d'acquittement (dépend de l'architecture)
ack Code d'acquittement (dépend de l'architecture)
message Texte éventuel envoyé par le serveur

Spécifique

Le principe de ce module est de traiter les données brutes mais il peut être nécessaire de devoir intervenir sur ces données pour faire des ajustements.

Nouvel écran de saisie

Si l'écran n'existe pas, par exemple dans le cas où on souhaite intervenir directement sur une table de jointure, il est possible de la créer en utilisant une utilisant une commande CRUD.

Installation

Mise en place

Pour bénéficier des mises à jours des jobs, il est conseillé de faire un lien symbolique entre les jobs du répertoire resources du module et l'arborescence Arii de JobScheduler. Si vous ne disposez pas de liens symboliques, il faudra copier les jobs dans le répertoire de JobScheduler.

Dans tous les cas, les jobs présents dans ReportBundle/resources/job/OJS/Unix ou ReportBundle/resources/job/OJS/Windows, suivant l'os utilisé, doivent être déplacés dans config/live/Arii/Report de JobScheduler.

Suivant l'organisation, on peut:

  • copier les jobs dans le lice du superviseur dédié à Arii
  • copier dans le répertoire remote du superviseur pour le déployer sur un jobscheduler dédié

Configuration

L'environnement JobScheduler est le suivant:

SCHEDULER_PARAM_ARII_TMP Répertoire temporaire de l'ordonnanceur
SCHEDULER_JOB_CONFIGURATION_DIRECTORY Répertoire de stockage des objets
SCHEDULER_PARAM_SPOOLER_ATS Identifiant de l'instance Autosys (sur 3 lettres)
SCHEDULER_PARAM_ARII_WEB Url Arii

Ces paramètres dépendent du site et sont stockés dans le fichier arii.params.xml déposé dans le répertoire config/live/Arii.

Un exemple de fichier de paramètre pourrait être le suivant:

<params>
<param name="ARII_WEB" value="http://SERVEUR_WEB_ARII/app_dev.php"/>
<param name="ARII_TMP" value="/tmp/MES_FICHIERS_TEMPORAIRES"/>
<param name="SPOOLER_ATS" value="MON_INSTANCE_AUTOSYS"/>
</params>

Alimentation

Autosys

Jobs

Récupération des jobs

autorep -J ALL -q > ${SCHEDULER_PARAM_ARII_TMP}/jobs.jil

Conversion en csv

perl ${SCHEDULER_JOB_CONFIGURATION_DIRECTORY}/autorep-q.pl ${SCHEDULER_PARAM_SPOOLER_ATS} < ${SCHEDULER_PARAM_ARII_TMP}/jobs.jil > ${SCHEDULER_PARAM_ARII_TMP}/jobs.csv

Envoi sur Arii

curl -X POST -Flog=@${SCHEDULER_PARAM_ARII_TMP}/jobs.csv ${SCHEDULER_PARAM_ARII_WEB}/report/fr/post/ats/jobs

Exécutions

Les exécutions sont extraites de l'event_demon.

Conversion de l'event demon en fichier csv

perl ${SCHEDULER_JOB_CONFIGURATION_DIRECTORY}/event_demon.pl ${SCHEDULER_PARAM_SPOOLER_ATS} < ${SCHEDULER_PARAM_ARII_TMP}/event_demon.log > ${SCHEDULER_PARAM_ARII_TMP}/event_demon.csv

Envoi du résultat sur Arii

curl --fail -Flog=@${SCHEDULER_PARAM_ARII_TMP}/event_demon.csv ${SCHEDULER_PARAM_ARII_WEB}/report/fr/post/ats/event_demon

Une synchronisation par base de données est actuellement à l'étude afin de disposer d'un reporting en temps réel.

Audit

L'audit va permettre de compléter les informations sur les définitions jobs et plus particulièrement sur les changements (création, modification et suppression).

Extraction des informations

autotrack -v > ${SCHEDULER_PARAM_ARII_TMP}/audit.txt

Conversion en csv

perl ${SCHEDULER_JOB_CONFIGURATION_DIRECTORY}/autotrack.pl ${SCHEDULER_PARAM_SPOOLER_ATS} < ${SCHEDULER_PARAM_ARII_TMP}/audit.txt > ${SCHEDULER_PARAM_ARII_TMP}/audit.csv

Envoi sur Arii

curl --fail -X POST -Flog=@${SCHEDULER_PARAM_ARII_TMP}/audit.csv ${SCHEDULER_PARAM_ARII_WEB}/report/fr/post/ats/audit

Open Source JobScheduler

Traitement des données

Le traitement des données consiste à reprendre les tables génériques pour compléter ou remplir de nouvelles tables qui serviront aux rapports, le principe est d'utiliser des tables dédiées afin d'accélérer la navigation.

Les actions sont déclenchées pas appel d'url et peuvent être intégrées dans quel outil de planification.

Traitements

Extraction des applications et de l'environnement

curl --fail ${SCHEDULER_PARAM_ARII_WEB}/report/fr/cron/job2rules.html

Agrégation par jour

curl --fail ${SCHEDULER_PARAM_ARII_WEB}/report/fr/cron/job2jobdays.html

Agrégation par mois

curl --fail ${SCHEDULER_PARAM_ARII_WEB}/report/fr/cron/jobs2jobmonths.html

Exécutions

Extraction des applications et de l'environnement

curl --fail ${SCHEDULER_PARAM_ARII_WEB}/report/fr/cron/run2rules.html

Extraction des jobs

curl --fail ${SCHEDULER_PARAM_ARII_WEB}/report/fr/cron/run2jobs.html

Extraction des applications

curl --fail ${SCHEDULER_PARAM_ARII_WEB}/report/fr/cron/run2apps.html

Agrégation par heures

curl --fail ${SCHEDULER_PARAM_ARII_WEB}/report/fr/cron/run2runhours.html

Agrégation par jours

curl --fail ${SCHEDULER_PARAM_ARII_WEB}/report/fr/cron/run2rundays.html

Agrégation par mois

curl --fail ${SCHEDULER_PARAM_ARII_WEB}/report/fr/cron/runs2runmonths.html

Visualisation

Traitements

Exécutions

Calendriers

Publication

Exemple de tableau de bord

Génération automatique

La génération automatique est réalisée par phantomjs qui exécute l'url. Elle est automatisée par le superviseur local à travers un job JobScheduler.

Appel du script phantomjs:

phantomjs dashboard.js <HOST> <APPLICATION> <ENVIRONNEMENT> <MOIS> <JOURS> <DESTINATION> <FICHIER>

avec:

  1. HOST: Nom de la machine qui héberge Ari'i
  2. APPLICATION: __ALL__ pour global pour le code applicatif
  3. ENVIRONNEMENT: T, P, etc (TEST, PROD,...)
  4. MOIS: Numéro du mois dans l'année
  5. JOURS: Nombre de jours dans le passé (Ex: -180 pour les 3 derniers mois)
  6. DESTINATION: Stockage des résultats (Ex: workspace/Report/Dashboards pour qu'il soit accessible dans les documents d'Arii).
  7. FICHIER: Nom du fichier résultat ( Sinon: dashboard_<APPLICATION>_<ENVIRONNEMENT>_<MOIS>).

Code du script phantomjs

var args = require('system').args;
args.forEach(function(arg, i) {
    console.log(i+':	'+arg);
});

var app=args[2];
if (app=='_ALL_') {
	app='*';
}

var page = require("webpage").create(),
     url = 'http://'+args[1]+'/app_dev.php/report/fr/public/dashboard?header=0&app='+app+'&env='+args[3]+'&month='+args[4]+'&ref_past='+args[5]+;
    console.log('url:	'+url);

page.open(url, function (status) {
    function checkReadyState() {
        setTimeout(function () {
            var loaded = page.evaluate(function () {
                return loaded;
            });
			console.log('.');
            if (loaded) {
				var file = 'dashboard_'+args[2]+'_'+args[3]+'_'+args[4];
				page.render(args[6]+'/'+file+'.jpg', {format: 'jpeg', quality: '100'}); 
				page.render(args[6]+'/'+file+'.pdf', {format: 'pdf'});

				phantom.exit();
            } else {
                checkReadyState();
            }
        },1000);
    } 

    checkReadyState();
});

Requêtes

Les requêtes publient les données de la base par défaut ou de bases additionnelles afin de créer des rapports html ou csv. Le rapport csv est pratique dans la mise en place de sonde.

Outils

Import

Base de données

Outils tiers

Le module de Rapports utilise différents outils pour la génération des documents.

Ces outils sont à installer sur le client qui va exécuter la génération, nous utiliserons Open Source JobScheduler pour automatiser cette partie. Les jobs utilisés pour cette partie sont récupérables dans la partie resources du module.

PhantomJS

Site web: http://phantomjs.org/

  • créer un répertoire "addons" dans le répertoire SCHEDULER_HOME de jobscheduler
cd /opt/jobscheduler/arii
mkdir addons
cd addons
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
  • Décompresser l'archive
tar xvf phantomjs-2.1.1-linux-x86_64.tar.bz2
  • créer un lien
ln -s phantomjs-2.1.1-linux-x86_64 phantomjs
  • tester l'installation
cd phantomjs/bin
./phantomjs -v
2.1.1

JasperReport

Ce module utilise JobScheduler en tant que serveur Jasper.

Les configurations de rapport pouvaient être créées par un éditeur graphique nommé iReport qui est maintenant remplacé par JasperStudio. La connexion à la base de données du JobScheduler est utilisée par défaut mais il est évidemment possible d'indiquer d'autres paramètres.

La première étape consiste à configurer Jobcheduler pour qu'il prenne le rôle de serveur Jasper.

  • On télécharge les bibliothèques nécessaire dans le projet SourceForge JasperReports
  • On crée un répertoire Jasper dans le répertoire lib de JobScheduler
  • On copie les fichiers dans le répertoire lib/jasper
  • On indique l'emplacement des jars dans le fichier config/factory.ini
class_path = ${SCHEDULER_HOME}/lib/pgsql/*.jar;${SCHEDULER_HOME}/lib/patches/*.jar;${SCHEDULER_HOME}/lib/user_lib/*.jar;${SCHEDULER_HOME}/lib/sos/*.jar;${SCHEDULER_HOME}/lib/3rd-party/*.jar;${SCHEDULER_HOME}/lib/jdbc/*.jar;${SCHEDULER_HOME}/lib/jasper/*.jar;${SCHEDULER_DATA}/config;${SCHEDULER_HOME}/lib/log/log4j/*.jar

Sur Unix, il faudra remplacer les ; par des :

  • On redémarre le Jobscheduler pour prendre en compte la nouvelle configuration

A titre indicatif, le contenu de lib/jasper devrait contenir ces fichiers:

jasperreports-4.5.0.jar
commons-digester-1.7.jar
groovy-all-1.7.5.jar
iText-2.1.7.jar
jcommon-1.0.22.jar
jfreechart-1.0.12-LICENSE.txt
jfreechart-1.0.12.jar
poi-3.7-20101029.jar
  • Ces fichiers dépendent de l'utilisation des objets inclus dans le rapport, cette liste n'est donc pas exhaustive.*