#!/usr/bin/env perl 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 # (rq : affichage eventuel du nom de la machine si la variable environnement $HOST existe) #------------------------------------------------- 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 "- date : $mjour/$mois/$annee\n"; print FSOR "- heure : $heure:$min (heure locale)\n"; if(defined $ENV{'HOST'}) { print FSOR "- machine : $ENV{'HOST'}\n"; } else { print FSOR "- machine : inconnue (variable environnement \"\$HOST\" non definie)\n"; } print FSOR "---------------------------------------\n\n"; close (FSOR);