[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |