2
0
Fork 0
Verif_Herezh/Perl/genere_rapport.pl

82 lines
4.1 KiB
Perl
Executable file

#!/usr/bin/env perl -s
use strict;
#use Regexp::Common;#expressions regulieres; par exemples pour reconnaitre un entier $RE{num}{int} ou un reel $RE{num}{real}
use File::Basename;
use English;
my $NOM_PROG = basename $PROGRAM_NAME;#$NOM_PROG contient le nom de ce script (utile pour afficher le nom du script dans les warning (warn) ou les messages d erreur (die) )
#pattern d un reel pour les regex (pour eviter d utiliser $RE{num}{real} du package Regexp::Common qui n est pas toujours disponible)
my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
#affichage de l aide si : le premier argument est -h ou -help ou si le nombre d argument n est pas egal a 2
if ($ARGV[0] =~ /^-h$/i or $ARGV[0] =~ /^-help$/i or $#ARGV != 1) {
print "script $NOM_PROG :\n";
print " USAGE... \n";
print " Ce script Perl s'utilise avec 2 arguments : \n";
print " -> 1- Nom du fichier rapport a creer\n";
print " -> 2- Nom de l executable HZ++\n";
exit;
}
#recuperation des arguments
my $file = $ARGV[0];#argument 1 : nom du fichier rapport a creer
my $exeHZ = $ARGV[1];#argument 2 : executable HZ++
#-------------------------------------------------
#1) Determination de la date de lancement du test
#-------------------------------------------------
my ($sec,$min,$heure,$mjour,$mois,$annee,$sjour,$ajour,$isdst)=localtime();
$annee = $annee + 1900;
$mois = $mois + 1;
$mjour = "0$mjour" if($mjour < 10);#on rajoute un 0 devant si le nombre est inferieur a 10
$mois = "0$mois" if($mois < 10);#on rajoute un 0 devant si le nombre est inferieur a 10
#-------------------------------------------------
#2) Determination de la version HZ++
#-------------------------------------------------
# Methode : on lance Herezh et on exploite l affichage
# - la ligne commencant par " version" suivi du numero permet de saisir le numero de version
# - la ligne "# (version la plus rapide )" permet de reperer si il s agit d une version HZppfast (en l absence de cette ligne, on en deduit qu il s agit d une version HZpp)
#
my @redir = qx(echo f | $exeHZ | grep version);#appel system de l executable HZ++ en redirigeant l affichage dans la variable @redir (affichage filtre par grep pour ne garder que les lignes "version")
system("rm -f ancienNom");#suppression du fichier ancienNom qui est cree par Herezh
my $no_version = 'non lue';#numero de version
my $is_fast = 0;#indicateur pour savoir si c est la version HZppfast ou non
foreach my $line (@redir) {#parcours de chaque ligne de la redirection de l affichage HZ++
$no_version = $1 if($line =~ /version\s+($format_reel)/);
$is_fast = 1 if($line =~ /version la plus rapide/);#si la ligne indique "version la plus rapide", alors il s agit de HZppfast
}
#construction du label de la version
my $LABEL_VERSION;
if($no_version eq 'non lue') {#si le numero de version n a pas pu etre lu => on prepare un message ECHEC pour le rapport (et on affiche un avertissement dans le terminal avec warn)
$LABEL_VERSION = "ECHEC => impossible de lire la version HZ++ (soit c est une erreur liee a l executable HZ++ ($exeHZ), soit c est une erreur liee au script $NOM_PROG)";
warn "\n**ATTENTION (prog:$NOM_PROG) : impossible de lire la version HZ++ (soit c est une erreur liee a l executable HZ++ ($exeHZ), soit c est une erreur liee au script $NOM_PROG)\n\n";
}
elsif($is_fast) {#si $is_fast est vrai => le label de la version sera : HZppfast $no_version
$LABEL_VERSION = "HZppfast $no_version";
}
else {#sinon => le label de la version sera : HZpp $no_version
$LABEL_VERSION = "HZpp $no_version";
}
#-------------------------------------------------
#3) ecriture de l en-tete du fichier rapport
#-------------------------------------------------
open (FSOR,">$file");
print FSOR "---------------------------------------\n";
print FSOR "- RAPPORT DE TEST -\n";
print FSOR "---------------------------------------\n";
print FSOR "- version HZ++ : $LABEL_VERSION\n";
print FSOR "\n";
print FSOR "- Batterie de tests lancee\n";
print FSOR "- le $mjour/$mois/$annee\n";
print FSOR "- a $heure:$min (heure locale)\n";
print FSOR "---------------------------------------\n\n";
close (FSOR);