Besoin d'un coup de main (fonction strftime)

Besoin d'un coup de main (fonction strftime) - Perl - Programmation

Marsh Posté le 06-03-2017 à 11:19:44    

Salut à tous !
 
J'ai besoin d'un coup de main ... je suis en galère sur un script en Perl, alors que je ne programme pas du tout dans ce langage (je "dev" en AutoIt, c'est dire :)).
 

Code :
  1. #!/usr/bin/env perl
  2. use warnings;
  3. use strict;
  4. use Sys::Hostname;
  5. use POSIX;
  6. #print strftime("MAG_%Y%M%d_nbcli_%H00.%a", localtime());
  7. #Prefix CodeSoc f1 f2 f3 ...
  8. my $hmin=0;
  9. my $hmax=2400;
  10. my $pivot=0;
  11. while(1) {
  12.   if($ARGV[0] eq "-hmin" || $ARGV[0] eq "hmin" ) {
  13.     shift;
  14.     $hmin=$ARGV[0];
  15.   } elsif($ARGV[0] eq "-hmax" || $ARGV[0] eq "hmax" ) {
  16.     shift;
  17.     $hmax=$ARGV[0];
  18.   } elsif($ARGV[0] eq "-pivot" || $ARGV[0] eq "pivot" ) {
  19.     shift;
  20.     $pivot=$ARGV[0];
  21.   } else {
  22.     last;
  23.   }
  24.   shift;
  25. }
  26. if($#ARGV<2) {
  27. print "$0 Prefix CodeSoc F1 [F2 [F3 ... ]]\n";
  28. exit(3);
  29. }
  30. my $magnum="999";
  31. my $name=hostname();
  32. #$name="SRVSC0150";
  33. if ($name =~ /^POS([0-9]{3})([0-9]{3})/ ) {
  34.   $magnum=$1;
  35. } elsif ($name =~ /^SRVSC[0-9]([0-9]{3})/) {
  36.   $magnum=$1;
  37. }
  38. my $prefix=$ARGV[0];
  39. my $codesoc="$ARGV[1]";
  40. my $msg="Prefix: $prefix, codesoc=$codesoc, ";
  41. my $res=0;
  42. my $now=time();
  43. my @today=localtime($now);
  44. my @fileday;
  45. if($today[2]*100+$today[1]<$pivot) {
  46.    @fileday=localtime($now-3600*24);
  47. } else {
  48.    @fileday=@today;
  49. }
  50. if(!(($today[2]*100+$today[1])>=$hmin && ($today[2]*100+$today[1])<$hmax)) {
  51.   print "En dehors des heures d'export ($hmin-$hmax)\n";
  52.   exit(0);
  53. }
  54. for(my $f=2; $f<=$#ARGV; $f++) {
  55.   my $fn=$ARGV[$f];
  56.   $fn =~ s/%cs/$codesoc/g;
  57.   $fn =~ s/%mg/$magnum/g;
  58.   $fn=strftime($fn, @fileday);
  59.   $msg=$msg.$fn." ";
  60.   $fn=~ s/\.Mon/.Lun/g;
  61.   $fn=~ s/\.Tue/.Mar/g;
  62.   $fn=~ s/\.Wed/.Mer/g;
  63.   $fn=~ s/\.Thu/.Jeu/g;
  64.   $fn=~ s/\.Fri/.Ven/g;
  65.   $fn=~ s/\.Sat/.Sam/g;
  66.   $fn=~ s/\.Sun/.Dim/g;
  67.   if(-f $prefix."/".$fn) {
  68.      $msg.="OK.";
  69.   } else {
  70.     $msg.="KO";
  71.     $res=2;
  72.   }
  73.   $msg.=" ";
  74.   $fn=~ s/\.Lun/.Mon/g;
  75.   $fn=~ s/\.Mar/.Tue/g;
  76.   $fn=~ s/\.Mer/.Wed/g;
  77.   $fn=~ s/\.Jeu/.Thu/g;
  78.   $fn=~ s/\.Ven/.Fri/g;
  79.   $fn=~ s/\.Sam/.Sat/g;
  80.   $fn=~ s/\.Dim/.Sun/g;
  81. }
  82. print $msg."\n";
  83. exit($res);


 
Mon problème est le suivant : ce script (destiné à fonctionner dans Nagios) est censé détecter la présence de fichiers ayant une extension .lun, .mar, .mer, etc. , fichier qui doit être généré côté client suivant le jour de la semaine.
 
Le truc, c'est que le script fait une contrôle sur des .mon, .sun, .wed, etc. car Nagios est hébergé sur une Debian localisée en anglais. Il va de soi que je n'ai pas les droits pour changer la localisation (ce serait trop facile).
 
Donc le coup de main dont j'ai besoin, ce serait d'avoir avant le contrôle du nom du fichier une petite table de correspondance qui modifie la valeur de la variable de telle façon que l'extension soit dans la bonne langue ...
 
Merci d'avance !

 
Edit : voilà qui est implémenté ! Merci gilou :)


Message édité par ghost line le 07-03-2017 à 16:16:59
Reply

Marsh Posté le 06-03-2017 à 11:19:44   

Reply

Marsh Posté le 06-03-2017 à 17:12:34    

Et si tu donnais des exemples de valeurs pour tes f1 f2...
qu'on aie une idée plus précise.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 06-03-2017 à 17:31:23    

Faut que je trouve d'où sort cette valeur ! Les joies de reprendre un truc mal branlé fait par quelqu'un d'autre ...
 
Edit : en fait, au vu des résultat, $codesoc contient un code magasin sur 3 caractères.
 
Voilà une valeur qui sort de ce script :  
 
187_20170306_nb_cli_1700.Mon  
 
(magasin 187, journée du 6/3/2017, fichier nb_cli, 17:00)
 
Le truc, c'est que j'ai besoin de 187_20170306_nb_cli_1700.Lun ...


Message édité par ghost line le 06-03-2017 à 17:35:10
Reply

Marsh Posté le 06-03-2017 à 17:56:35    

Si c'est que ça, a priori, après le  
$msg=$msg.$fn." ";
tu fais un
$msg =~ s/\.Mon/.Lun/g;
$msg =~ s/\.Tue/.Mar/g;
...
$msg =~ s/\.Sun/.Dim/g;
et ça devrait coller
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed