#!/usr/bin/perl

# v0.8rc2 Programme de Guillaume Lehmann. Programme sous licence GPL v3 (www.gnu.org).

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# ARCHIVAGE DES INFORMATIONS #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

package Historique ;

sub main {

##########################
# Définition du formatage
    format HISTORIQUE =
|@<<<<<<<<<<<<<<<<< |@<<<<<<<<<<<<<<<<< |@<<<<<<<< |@<<<<< |@<<<<<<<< |@<<<<<<<<<<<< |@<<<<<<<<<<<< |@<<<<<<<<<<<< |@<<<<<<<<<<<< |@<<<<<<<<<<<<<<< |@<<<<<<<<<<<<<< @<<<< |@<<<< |@<<<< |@<<<< |@<<<< |
$ResReqLign->{'Elem_AdresseIP'}, $ResReqLign->{'Elem_Nom'}, $ResReqLign->{'Elem_Etat'}, $ResReqLign->{'Elem_NumeroPort'}, $ResReqLign->{'Elem_EtatPort'}, $ResReqLign->{'Elem_NbErreurEntree'}, $ResReqLign->{'Elem_NbErreurSortie'}, $ResReqLign->{'Elem_DebitEntree'}, $ResReqLign->{'Elem_DebitSortie'}, $ResReqLign->{'Elem_Date'}, $ResReqLign->{'Elem_Site'}, $ResReqBisLign->{'Cont_Niveau1'}, $ResReqBisLign->{'Cont_Niveau2'}, $ResReqBisLign->{'Cont_Niveau3'}, $ResReqBisLign->{'Cont_Niveau4'}, $ResReqBisLign->{'Cont_Niveau5'}
.
##########################



#############################
# ARCHIVAGE DES INFORMATIONS
##> Les informations de débits, du nombre d'erreurs, etc sont archivées dans un fichier.
##> Un en-tete est rajouté.

# Récupération des identifiants pour accéder à la base de données.
    open(ACCESBD, 'AccesBD.txt') || die "Problème à l'accès au fichier AccesBD.txt" ;
$resultat = <ACCESBD> ;
close (ACCESBD) ;
($database, $hostname, $login, $password, $typBD) = $resultat =~ /^(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*$/ ;
$dsn = "DBI:$typBD:database=$database;host=$hostname" ;

# Connexion à la base de données.
$dbh = DBI->connect($dsn, $login, $password) ;

# Ouverture des fichiers.
open(HISTORIQUE, '>>Historique.txt') || die "!! Problème à l'ouverture du fichier d'archivage" ;

# Le fichier Historique.txt ne garde que les changements d'états et les relevés de compteurs.
$ResReq = $dbh->prepare("SELECT * FROM Elements, AncienEnreg WHERE (Elem_Nom = Anci_Nom AND Elem_AdresseIP = Anci_AdresseIP AND Elem_NumeroPort = Anci_NumeroPort) AND (Elem_Etat NOT LIKE Anci_AncienEtat OR Elem_NumeroPort <> 0) ;") ;
$ResReq->execute() ;

while ($ResReqLign = $ResReq->fetchrow_hashref()) {
    ## Recherche du numéro dans l'arborescence du site de la machine.
    $ResReqBis = $dbh->prepare("SELECT Cont_Niveau1, Cont_Niveau2, Cont_Niveau3, Cont_Niveau4, Cont_Niveau5 FROM Conteneurs WHERE Conteneurs.Cont_Nom LIKE \"$ResReqLign->{'Elem_Site'}\" ;") ;
    $ResReqBis->execute() ;
    $ResReqBisLign = $ResReqBis->fetchrow_hashref() ;
    
    ## Écriture dans l'historique.
    write HISTORIQUE ;
    
    # Fermeture de la requête SQL.
    $ResReqBis->finish();	

} # fin du while de lecture de chaque ligne de la BD (Elements).


# Fermeture des fichiers
close(HISTORIQUE) ;


# Déconnexion de la BD.
$ResReq->finish() ;
$dbh->disconnect() ;
#############################


} # fin de sub main
1;
