[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/share/se3/sbin/ -> cron_alertes.pl (source)

   1  #!/usr/bin/perl
   2  
   3  #
   4  ## $Id: cron_alertes.pl 6654 2011-11-27 16:35:54Z dbo $ ##
   5  #
   6  ##### Effectue les actions programmées dans alertes #####
   7  # Philippe Chadefaux
   8  ##
   9  #
  10  # Mode DEBUG
  11  my $DEBUG=0; # Mettre à 0 pour descativer le mode debug
  12  $REP_SCRIPT="/usr/share/se3/scripts-alertes/";
  13  
  14  #
  15  # Modifier dans syslog.conf afin que local5 soit utilisé
  16  # en ajoutant la ligne suivante
  17  # local5.*                        /var/log/se3/alertes
  18  #
  19  # Pour éviter de mettre les logs dans messages modifier 
  20  #
  21  # local5;\
  22  # mail,news.none          -/var/log/messages
  23  #         
  24  
  25  use Sys::Syslog qw(:DEFAULT setlogsock);
  26  use Time::Local;
  27  # use strict;
  28  # 
  29  
  30  
  31  
  32  
  33  if (($ARGV[0] eq  "--help") || ($ARGV[0] eq "-h")) {
  34          print "Effectue les actions programmées dans actionse3\n";
  35      print "Usage : aucune option\n";
  36          exit;
  37  }
  38  
  39  setlogsock('unix');
  40  openlog("Alertes",'pid','local5');
  41  
  42  if ($DEBUG=="1") {
  43      syslog('info','Script cron_alertes');
  44  }
  45  
  46  require '/etc/SeConfig.ph';
  47  my $se3_db = DBI->connect("DBI:mysql:$connexionDb@$mysqlServerIp", $mysqlServerUsername, $mysqlServerPw)
  48  or die "Unable to connect to contacts Database: $se3_db->errstr\n";
  49  $se3_db->{RaiseError} = 1;
  50  
  51  # ($sec,$min,$heure,$mjour,$mois,$annee,$sjour,$ajour,$isdst) =localtime(time);
  52  # ($secbis,$minbis,$heurebis,$mjourbis,$moisbis,$anneebis,$sjourbis,$ajourbis,$isdstbis) =localtime(time+900);
  53  # @jour=('d','l','ma','me','j','v','s');
  54  my $table = "alertes";
  55  
  56  
  57  $requete = "SELECT ID,NAME,MAIL,VARIABLE,TEXT,SCRIPT,FREQUENCE,unix_timestamp(PERIODE_SCRIPT),MAIL_FREQUENCE FROM $table WHERE ACTIVE='1' AND AFFICHAGE='1';";
  58  my $sth = $se3_db->prepare($requete);
  59  $sth->execute or
  60  die "Unable to execute query: $se3_db->errstr\n";
  61  
  62  while (my $ref = $sth->fetchrow_hashref())
  63  {
  64      $id=$ref->{'ID'};
  65      $name=$ref->{'NAME'};
  66      $script=$ref->{'SCRIPT'};
  67      $variable=$ref->{'VARIABLE'};
  68      $rights=$ref->{'MAIL'};
  69      $text=$ref->{'TEXT'};
  70      $frequence=$ref->{'FREQUENCE'};
  71      $periode_script=$ref->{'unix_timestamp(PERIODE_SCRIPT)'};
  72      $frequence_mail=$ref->{'MAIL_FREQUENCE'};
  73      
  74      # Test l'existance du script
  75      @script_only = split(/ /,$script);
  76      $script_test = $REP_SCRIPT.$script_only[0];
  77      if (-f $script_test) { 
  78          if($DEBUG=="1") {
  79              print "Le script $script_test exist\n";
  80          }    
  81      } else {
  82          if($DEBUG=="1") {
  83              print "le script $script_test n'existe pas\n";
  84          }
  85          # Open syslog
  86          syslog('info','Le script '.$script_test.' ne semble pas exister');
  87      }    
  88      
  89      $epoch_now=time();
  90      # Calcul de la frequence
  91      #
  92      # duree  entre maintenant et la derniere remontée
  93      $duree = $epoch_now - $periode_script;
  94      
  95      if ($DEBUG=="1") {
  96          if($duree >= $frequence) { 
  97              print "frequence $frequence plus petit que la dernière cron : $duree donc script lancé\n"; 
  98          }
  99          if ($duree <= $frequence) { 
 100              print "duree $duree plus petit que freq $frequence, donc script non lancé\n"; 
 101          }
 102      }    
 103      
 104      # On lance le script en fonction de la frequence demande par l'admin
 105      # donc chaque fois que duree devient plus grand que frequence
 106      if ($duree >= $frequence) { 
 107          if ($DEBUG=="1") {
 108              print "\nTraitement de l'alerte $name: \n";
 109          }    
 110          $retour=`/usr/share/se3/scripts-alertes/$script  2>&1`;
 111          $retour_err=`echo $?`;
 112      
 113  
 114          # Mode deubug
 115          if ($DEBUG=="1") {
 116              print "retour_err  $retour_err << $retour >>\n";    
 117          }
 118      
 119          if ($retour_err=="0") { # Retour positif pas d'alerte
 120              # Si anciennement variable = 0  alors on avait pas de probleme
 121              if ($variable=="0") {
 122                  # On expédie le mail informant retour normal
 123                  @mails=`/usr/share/se3/sbin/mail-ldap.sh "$rights"`;
 124                  foreach $mel (@mails) {
 125                      if ($DEBUG=="1") {
 126                          print "mail pour $rights envoye a $mel \n";
 127                      }    
 128                      open(MAIL,"|/usr/sbin/sendmail -t");
 129                          print MAIL "To: $mel";
 130                          print MAIL "Subject: [SE3] Fin alerte $name\n\n";
 131                          print MAIL "\n\nFin de alerte  $text";
 132                          close (MAIL);
 133                  }
 134              }    
 135              # On repasse variable a 1
 136              $requete = "UPDATE $table SET VARIABLE='1',PERIODE_SCRIPT=NOW() WHERE `ID`='$id';";
 137              my $sth = $se3_db->prepare($requete);
 138              $sth->execute or
 139              die "Unable to execute query: $se3_db->errstr\n";
 140              # Requete pour mettre VARIABLE à 1 dans la table (en cas de retour à la normal)
 141  
 142              if ($DEBUG=="1") {
 143                  print "\nOK pour script $script\n";
 144              }
 145              
 146              # Open syslog
 147              if ($DEBUG=="1") {
 148                  syslog('info',$name.':'.$retour_err.':'.$retour);
 149               }
 150          
 151          } else {
 152              # Probleme on balance le mail sauf si VARIABLE est déja à 0
 153              # cela voulant dire que le mail est déjà parti.
 154              # + pour pas le renvoyer à chaque cron on passe VARIABLE à 0
 155              # 
 156              # # VARIABLE etant a 1 aucun message n'a encore été envoyé
 157              if ($DEBUG=="1") {
 158                  print "Etat probleme\n\n"; 
 159              }
 160  
 161              # On passe variable a 0
 162              $requete = "UPDATE $table SET VARIABLE='0',PERIODE_SCRIPT=NOW() WHERE `ID`='$id';";
 163              my $sth = $se3_db->prepare($requete);
 164              $sth->execute or
 165              die "Unable to execute query: $se3_db->errstr\n";
 166          
 167              if (($variable == '1') || ($frequence_mail == "1")) {
 168                  # On expédie le mail
 169                  @mails=`/usr/share/se3/sbin/mail-ldap.sh "$rights"`;
 170                  foreach $mel (@mails) {
 171                      if ($DEBUG=="1") {
 172                          print "mail pour $rights envoye a $mel \n";
 173                      }    
 174                      open(MAIL,"|/usr/sbin/sendmail -t");
 175                          print MAIL "To: $mel";
 176                          print MAIL "Subject: [SE3] Alerte $name\n\n";
 177                          print MAIL "\n\nAlerte  $text";
 178                          close (MAIL);
 179                  }
 180                  
 181  
 182                  # Open syslog
 183                  syslog('info',$name.':'.$retour_err.':'.$retour);
 184              }    
 185          }    
 186      
 187      }
 188  }    


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1