[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

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

   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  


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