1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
#!c:\perl\bin\perl.exe
use TX2::Tools;
# Le fichier HBSTAUTO.RUN est cr dans le rpertoire c:\wsta ds lors que TX2 est en mode automatique.
# Le script check_TX2_auto_mode.pl scrute l'existence de ce fichier et envoie un mail d'alert si tel n'est pas le cas.
%Job;
#Dfinition des variables
$auto_file="c\:\\wsta\\HBSTAUTO.RUN";
$schedule_job="c\:\\wsta\\SCHEDULE.CMD";
$last_event="c\:\\wsta\\EVENT.TRK";
##Vrification du mode automate
$date=&TX2::Tools::GetDate('franais');
$hour=&TX2::Tools::GetDate('hour');
$NowTime=substr($hour,0,4);
$NowTime_seconde=substr($NowTime,0,2)*3600+substr($NowTime,2,2)*60;
if(!(-e $auto_file))
{
&GetLastEventHour;
&GetNextJobs;
#print "$ListJob\n$last_check\n";
&TX2::Tools::SendMail('Mode automatique arrt',"La station ne fonctionne plus en mode automatique.\nDate de la dernire vrification de l\'automate.\n* Liste des jobs suivants:\n$ListJob\n");
print "\nAutomate arrete\n";
}
else
{
&GetLastEventHour;
#NowTime est utils avec last_hour dans une diffrence qui donnera le temps de raffraichissement de la recherche d'vnement
if($NowTime_seconde>=$last_hour_seconde)
{
$Elapsed_time=$NowTime_seconde-$last_hour_seconde;
print "$Elapsed_time";
}
else
{
$Elapsed_time=(24*3600)-abs($NowTime_seconde-$last_hour_seconde);
print "$Elapsed_time";
}
#Si la diffrence (dernier raffraichissement est suprieur 2 minutes (120 secondes)), on envoie un mail (c'est que la station est bloque)
if($Elapsed_time > 120)
{
$Format_Elapsed_Time=sprintf("%02d",($Elapsed_time/3600));
$Format_Elapsed_Time.=":".sprintf("%02d",(($Elapsed_time-($Format_Elapsed_Time*3600))/60));
&GetNextJobs;
&TX2::Tools::SendMail("Mode automatique arrt ou TX2 crash","La dernire vrification d'vnement remonte $Format_Elapsed_Time.\n* Date de la dernire vrification de l\'automate: $last_check.\n* Liste des jobs suivants:\n$ListJob\n");
print "retard\n";
}
}
###################################################
##Function GetNextJobs()
##Rcupration de la liste des jobs de l'automate
###################################################
sub GetNextJobs()
{
open(fic,"$schedule_job") or die "Impossible d\'ouvrir $schedule_job $!\n";
@tab=<fic>;
close(fic);
foreach(my $i=0;$i<=$#tab;$i++)
{
if($tab[$i]=~/1W0/ || $tab[$i]=~/1W1/ || $tab[$i]=~/2W0/ || $tab[$i]=~/2W1/)
{
@tmp0=split(" ",$tab[$i]);
@tmp1=split(/:/,$tmp0[1]);
@tmp2=split(/=/,$tab[$i+2]);
$cle=$tmp1[0].$tmp1[1];
$Job{$cle}=$tmp2[1];
push(@Time,$tmp1[0].$tmp1[1]);
}
}
@Time=sort(@Time);
foreach(@Time)
{
if($_>=$NowTime)
{
$ListJob.="-".substr($_,0,2).":".substr($_,2,2). "\-\> $Job{$_}\n";
}
}
}
sub GetLastEventHour()
{
#Rcupration de la dernire vrification d'vnement
open(fic,$last_event) or die "Impossible d\'ouvrir $last_event $!\n";
@event=<fic>;
#On isole la date et heure de dernire vrification de l'vnement fait par l'automate (utilis pour le mail)
$last_check=substr($event[0],35,9);
$last_check=~s/at//g;
#On isole l'heure de la dernire vrification de l'vnement fait par l'automate (on l'utilisera pour faire la diffrence avec l'heure de lancement du batch)
$last_hour=substr($event[0],34,5);
$last_hour=~s/://;
$last_hour_seconde=substr($last_hour,0,2)*3600+substr($last_hour,2,2)*60;
close(fic);
} |
Partager