[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 #!/usr/bin/perl 2 3 # 4 ## $Id: warn_invent.pl 6654 2011-11-27 16:35:54Z dbo $ ## 5 # 6 ##### Expédie un mail en fonction des alertes définies dans l'inventaire ##### 7 ## 8 # 9 10 if (($ARGV[0] eq "--help") || ($ARGV[0] eq "-h")) { 11 print "Expédie un mail en fonction des alertes définies dans l'inventaire\n"; 12 print "Usage : aucune option\n"; 13 exit; 14 } 15 16 17 use POSIX; 18 use Net::LDAP; 19 20 my $DEBUG="1"; # 0 désactivé - 1 activé 21 22 require '/etc/SeConfig.ph'; 23 my $se3_db = DBI->connect("DBI:mysql:$connexionDb@$mysqlServerIp", $mysqlServerUsername, $mysqlServerPw) 24 or die "Unable to connect to contacts Database: $se3_db->errstr\n"; 25 $se3_db->{RaiseError} = 1; 26 27 28 $inventaire="Inventaire"; 29 $table = "alertes"; 30 # $requete = "SELECT * FROM $table WHERE menu='inventaire'"; 31 32 $requete = "SELECT * FROM $table WHERE menu='inventaire' AND ACTIVE='1'"; 33 34 $bdd_invent="ocsweb"; 35 $server_sql="localhost"; 36 $user_invent=`cat /var/www/se3/includes/dbconfig.inc.php | grep COMPTE_BASE | cut -d= -f2 | cut -d\\" -f2`; 37 $pass_invent=`cat /var/www/se3/includes/dbconfig.inc.php | grep PSWD_BASE | cut -d= -f2 | cut -d\\" -f2`; 38 $server_sql=`cat /var/www/se3/includes/dbconfig.inc.php | grep SERVEUR_SQL | cut -d= -f2 | cut -d\\" -f2`; 39 40 chomp($user_invent); 41 chomp($bdd_invent); 42 chomp($pass_invent); 43 chomp($server_sql); 44 45 my $sth = $se3_db->prepare($requete); 46 $sth->execute or 47 die "Unable to execute query: $se3_db->errstr\n"; 48 49 50 while (my $ref = $sth->fetchrow_hashref()) 51 { 52 # print $ref->{'Q_ALERT'},"\n"; 53 $test_action=$ref->{'ACTIVE'}; 54 $predef=$ref->{'PREDEF'}; 55 $rights=$ref->{'MAIL'}; 56 if (($test_action) and (!$predef)) { 57 $requete_en_cours=$ref->{'Q_ALERT'}; 58 $choix=$ref->{'CHOIX'}; 59 $value=$ref->{'VALUE'}; 60 $parc=$ref->{'PARC'}; 61 $name=$ref->{'NAME'}; 62 63 if ($DEBUG=="1") { 64 print "\n\nTraitement de l'alerte $name: \n"; 65 } 66 67 my $inventaire_db = DBI->connect("DBI:mysql:$bdd_invent@$server_sql", $user_invent, $pass_invent) 68 or die "Unable to connect to contacts Database: $inventaire_db->errstr\n"; 69 $inventaire_db->{RaiseError} = 1; 70 71 #phase de preparation : on compte les machhines du parc ou presente dans l'inventaire 72 #recherche des machines presentes dans l'inventaire 73 #on cree un tableau avec toutes les machines de l'inventaire 74 my $sthcomp = $inventaire_db->prepare("SELECT DISTINCT NAME FROM hardware"); 75 $sthcomp->execute or 76 die "Unable to execute query: $inventaire_db->errstr\n"; 77 #parcours des valeurs renvoyées par la requete 78 @result_comp=(); 79 while (@enr = $sthcomp -> fetchrow_array) { 80 $machine_invent=@enr[0]; 81 $machine_invent=~ tr /A-Z/a-z/ ; 82 push(@result_comp,"$machine_invent"); 83 # print "dans l'inventaire ".$machine_invent."\n"; 84 } 85 # on a le tableau @result_comp avec tous les elements de l'inventaire 86 #recherche des machines du parc (presentes dans l'inventaire) 87 if ($parc) { 88 $parc =~ tr /A-Z/a-z/ ; 89 $ldap = Net::LDAP->new( 90 "$slapdIp", 91 port => "$slapdPort", 92 debug => "$slapdDebug", 93 timeout => "$slapdTimeout", 94 version => "$slapdVersion" 95 ); 96 $ldap->bind( 97 $adminDn, 98 password => $adminPw 99 ); 100 101 $res_ldap = $ldap->search( base => "$parcDn", 102 scope => "sub", 103 filter => "cn=$parc", 104 ); 105 106 @members_parc_final=(); 107 @members_parc=(); 108 foreach $entry ($res_ldap->entries) { 109 @members_parc = $entry->get_value('member'); 110 111 } 112 foreach $machine (@members_parc) { 113 @cn=split(/,/,$machine); 114 @cn_computer = split (/=/,$cn[0]); 115 116 # print "dans le parc $parc ".@cn_computer[1]."\n"; 117 push(@members_parc_final,"@cn_computer[1]"); 118 } 119 120 #on a le tableau @members_parc_final avec tous les ordi du parc $parc ,trions les elements qui sont aussi dans l'inventaire 121 @intersection = @difference = (); 122 %count = (); 123 foreach $element (@members_parc_final, @result_comp) { $count{$element}++ } 124 foreach $element (keys %count) { 125 push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element; 126 } 127 my $nombre_elements_parc = @intersection; 128 $nombre_elements_parc_final=$nombre_elements_parc; 129 130 if ($DEBUG=="1") { 131 print "elements pris en compte dans le parc".$nombre_elements_parc_final."\n"; 132 } 133 } else { 134 # il faut compter toutes les machines de l'inventaire 135 #il suffit de compter le nombre d'element du tableau @result_comp 136 my $nombre_elements_invent = @result_comp; 137 $nombre_elements_invent_final=$nombre_elements_invent; 138 139 if ($DEBUG=="1") { 140 print "nombre d'elements repertories dans l inventaire : ".$nombre_elements_invent_final." \n"; 141 } 142 } 143 144 145 my $sthi = $inventaire_db->prepare($requete_en_cours); 146 $sthi->execute or 147 die "Unable to execute query: $inventaire_db->errstr\n"; 148 149 150 # parcours des valeurs renvoyées par la requete 151 @result_query = (); 152 while (@enr = $sthi -> fetchrow_array) 153 { 154 $machine_invent=@enr[0]; 155 $machine_invent=~ tr /A-Z/a-z/ ; 156 push(@result_query,$machine_invent); 157 } 158 159 $sthi -> finish; 160 my $nombre_elements_reel = @result_query; 161 162 #print "$nombre_elements_reel renvoyé par la requete dans l'inventaire en tout sans parc \n"; 163 # il ne faut prendre que les elements du parc 164 165 if ($parc) { 166 if($DEBUG=="1") { 167 print "Alerte definie uniquement dans le parc $parc \n"; 168 } 169 @intersection_query = @difference_query = (); 170 %count = (); 171 foreach $element (@members_parc_final, @result_query) { $count{$element}++ } 172 foreach $element (keys %count) { 173 push @{ $count{$element} > 1 ? \@intersection_query : \@difference_query }, $element; 174 } 175 176 my $nombre_elements_reel = @intersection_query; 177 } 178 179 180 if ($DEBUG=="1") { 181 print "$nombre_elements_reel reels trouves grace a la requete \n"; 182 } 183 184 185 186 $inventaire_db -> disconnect; 187 #comptons le nombre d'elements renvoyés par le requete enregistrée 188 189 #comparons le contenu du tableau parc et le contenu des machines de la requete 190 # en fonction de la valeur demandé par l'alertes 191 #si la valeur n'est pas max mais bien fixée au départ dans l'alerte 192 if ($parc) {$nombre_elements=$nombre_elements_parc_final;} else { $nombre_elements=$nombre_elements_invent_final;} 193 194 if ("$value" eq "max") { 195 $new_value=$nombre_elements; print "la valeur cherchee est (max) $new_value \n"; 196 } else { 197 $new_value=$value; print "la valeur cherchee est $new_value\n"; 198 } 199 200 #declenchement de l'alerte ? 201 SWITCH: { 202 ("$choix" eq "egal a") && do { 203 if ($nombre_elements_reel ne $new_value) { 204 @mails=`/usr/share/se3/sbin/mail-ldap.sh "$rights"`; 205 foreach $mel (@mails) { 206 if($DEBUG=="1") { 207 print "mail envoye a $mel \n"; 208 } 209 open(MAIL,"|/usr/sbin/sendmail -t"); 210 print MAIL "To: $mel"; 211 print MAIL "Subject:[SE3] Alerte $name\n"; 212 print MAIL "Alerte $name non valide"; 213 close MAIL; 214 } 215 } else { 216 print $retour="alerte validee (egal)"; 217 } 218 last SWITCH; 219 }; 220 221 ("$choix" eq "<") && do { 222 if ($nombre_elements_reel < $new_value) { 223 print $retour="alerte validee pour <"; 224 } else { 225 @mails=`/usr/share/se3/scripts/mail-ldap.sh "$rights"`; 226 foreach $mel (@mails) { 227 print "mail envoye a $mel \n"; 228 open(MAIL,"|/usr/sbin/sendmail -t"); 229 print MAIL "To: $mel"; 230 print MAIL "Subject: [SE3 Inventaire] Alerte $name\n"; 231 print MAIL "Alerte a preciser"; 232 close MAIL; 233 } 234 } 235 last SWITCH; 236 }; 237 238 ("$choix" eq ">") && do { 239 if ($count > $new_value) { 240 print $retour="alerte validee pour >"; 241 } else { 242 #print $retour="mail a envoyer >"; 243 @mails=`/bin/bash /usr/share/se3/scripts/mail-ldap.sh "$rights"`; 244 foreach $mel (@mails) { 245 if($DEBUG=="1") { 246 print "mail envoye a $mel \n"; 247 } 248 open(MAIL,"|/usr/sbin/sendmail -t"); 249 print MAIL "To: $mel"; 250 print MAIL "Subject: [SE3 Inventaire] Alerte $name\n"; 251 print MAIL "Alerte a preciser"; 252 close MAIL; 253 } 254 } 255 last SWITCH; 256 }; 257 258 $nothing = 1; 259 } 260 261 262 } 263 } 264 265 266 $sth -> finish; 267 268
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 |