Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sub Sub_TriEnUnFichier {
- local($DateCourante,$FichierTraitement,$Service) = @_;
- $[ = 1; # set array base to 1
- $, = ' '; # set output field separator
- $\ = "\n"; # set output record separator
- $FichierCourant = 'TriEnUnFichier';
- &Fct_Conf($FichierCourant);
- $FichierListeService = $Tab{'FichierListeService'};
- $RepertoireEntree = $Tab{'RepertoireEntree'};
- $RepertoireSortie = $Tab{'RepertoireSortie'};
- $RepertoireConf = $Tab{'RepertoireConf'};
- $RepertoireProcessus = $Tab{'RepertoireProcessus'};
- $NbreProcess = $Const{'NbreProcess'};
- $MAXNBLIGNES = $Const{'MaxNbLignes'};
- $LIMITEBOUCLE = $Const{'LimiteBoucle'};
- ####################################################################################################
- # Recuperation des parametres passes lors de l'appel
- ####################################################################################################
- # Definition de la date et du service a prendre en compte
- &Fct_DefinitionProfil($FichierListeService, $RepertoireEntree,$Service);
- open(FICHIER1,$FichierListeService) || die "Fichier $FichierListeService non trouvé";
- my @lignesFichierListeService = <FICHIER1>;
- close(FICHIER1);
- unlink($FichierListeService) if -f $FichierListeService;
- print "################################################################################################";
- print "# Concatenation des logs et tri du fichier resultant du ".$DateCourante;
- print "################################################################################################";
- print STDOUT "################################################################################################";
- print STDOUT "# Concatenation des logs et tri du fichier resultant du ".$DateCourante;
- print STDOUT "################################################################################################";
- ####################################################################################################
- # Boucle de gestion des Profils a traiter
- ####################################################################################################
- my $i = 0;
- foreach $domain (@lignesFichierListeService) {
- $i++;
- $domain =~ s/\n//g;
- if( $i == $NbreProcess){
- do {
- $i = `ls $RepertoireProcessus |wc -l`;
- $i =~ s/\n//g;
- } until $i < $NbreProcess;
- }
- if ($pid = fork) {
- push @pid, $pid;
- }else{
- if($domain){
- print STDOUT "Traitement du service : ".$domain;
- $FichierPID = $RepertoireProcessus."Fichier_Compteur_pid_".$$.".tmp";
- `echo "Fichier process $$" > $FichierPID`;
- &Fct_TriEnUnFichier($domain,$DateCourante,$$);
- if (-f $FichierPID) { `rm -f $FichierPID`; }
- }
- exit;
- }
- }
- map {waitpid($_, 0)} (@pid);
- undef @pid;
- }
- sub Fct_TriEnUnFichier {
- local($domain,$DateCouranteEntree,$Pid) = @_;
- $FichierCourant = 'TriEnUnFichier';
- &Fct_Conf($FichierCourant);
- $LIMITEBOUCLE = $Const{'LimiteBoucle'};
- $Annee = $Const{'Annee'};
- &Fct_DefinitionDate(*Date, $DateCouranteEntree);
- $DateCouranteInversee = $Date{$Annee}.'-'.$Date{$Mois}.'-' .$Date{$Jour};
- $DateCourante = $Date{$Jour}.'-'.$Date{$Mois}.'-'.$Date{$Annee};
- $RepertoireScripts = $Tab{'RepertoireScripts'};
- $RepertoireLogs = $Tab{'RepertoireLogs'};
- $RepertoireEntree = $Tab{'RepertoireEntree'};
- $RepertoireTraitement = $Tab{'RepertoireTraitement'};
- #---------------------------------------------------------------
- # Affichage en tete du traitement pour DOMAIN
- #---------------------------------------------------------------
- $date_debut_tri = `date "+%a %Y/%m/%d %H:%M:%S"`;
- $date_debut_tri =~ s/\n//g;
- #---------------------------------------------------------------
- # Init des variables
- #---------------------------------------------------------------
- # Creation du repertoire correspondant au service dans le repertoire de sortie
- $RepSortie = $RepertoireSortie.$domain;
- `mkdir $RepSortie` if !(-d $RepSortie);
- # Fichier resultat : logs apache de la journee tries par ordre chronologique
- $FichierFinal = $RepertoireSortie.$domain.'/'.$domain.'.'.$DateCouranteInversee.'.log';
- `rm -f $FichierFinal` if -f $FichierFinal;
- $FichierFinalgz = $RepertoireSortie.$domain.'/'.$domain.'.'.$DateCouranteInversee.'.log.gz';
- `rm -f $FichierFinalgz` if -f $FichierFinalgz;
- # Repertoire ou se situent tous les logs apache en entree
- $RepertoireService = $RepertoireEntree.$domain;
- # Recupere la liste des fichiers contenant les logs apache de la journee DateCourante
- $MaxNbFichiers = `/bin/ls -1 $RepertoireService/*$DateCourante* |wc -l`;
- $MaxNbFichiers =~ s/\n//g;
- #---------------------------------------------------------------
- # Traitement des logs en fonction du cas
- #---------------------------------------------------------------
- # Affiche l'action qui est entrain d'etre realisee dans les logs
- if ($MaxNbFichiers > 0) {
- # Il existe au moins un fichier de logs pour la journee DateCourante
- if ($MaxNbFichiers == 1) {
- # Il existe un seul fichier de logs donc on ne fait qu'une copie car le fichier est deja trie
- `cp -f $RepertoireService/*$DateCourante* $FichierFinalgz`;
- }else{
- #---------------------------------------------------------------
- # Initialise les variables
- #---------------------------------------------------------------
- # Efface et recree le repertoire temporaire /LogsTemporaire
- $RepertoireFichiersTemporaire = $RepertoireTraitement.'RepertoireFichiersTemporaire_'.$Pid;
- `rm -r $RepertoireFichiersTemporaire` if (-d $RepertoireFichiersTemporaire);
- `mkdir $RepertoireFichiersTemporaire` if !(-d $RepertoireFichiersTemporaire);
- # Efface et recree le repertoire temporaire /LogsTemporaire
- $RepertoireLogTemporaire = $RepertoireTraitement.'LogsTemporaire_'.$Pid;
- `rm -r $RepertoireLogTemporaire` if (-d $RepertoireLogTemporaire);
- `mkdir $RepertoireLogTemporaire` if !(-d $RepertoireLogTemporaire);
- # Efface et recree le repertoire oy se situe les fichiers resultats
- $FichiersTempo = $RepertoireTraitement.'FichiersTempo_'.$Pid;
- `rm -r $FichiersTempo` if (-d $FichiersTempo);
- `mkdir $FichiersTempo` if !(-d $FichiersTempo);
- # Efface tous les fichiers zippes ou non ayant le nom du fichier resultat
- $FichierPouilleme = $RepertoireFichiersTemporaire.'/FichierPouilleme_'.$Pid.'.tmp';
- `rm -f $FichierPouilleme` if -f $FichierPouilleme;
- $FichierPouillemeTmp = $RepertoireFichiersTemporaire.'/FichierPouillemeTmp_'.$Pid.'.tmp';
- `rm -f $FichierPouillemeTmp` if -f $FichierPouillemeTmp;
- $FichierListeTemporaire = $RepertoireFichiersTemporaire.'/FichierListeTemporaire_'.$Pid.'.tmp';
- `rm -f $FichierListeTemporaire` if -f $FichierListeTemporaire;
- # Copie tous les fichiers dans le repertoire temporaire
- #`cp $RepertoireService/*$DateCourante* $RepertoireLogTemporaire`;
- $NbFichiersATransferer = `/bin/ls -1 $RepertoireService/*$DateCourante* |wc -l`;
- while($NbFichiersATransferer > 0)
- {
- $NomFichierATransferer = `/bin/ls -1 $RepertoireService/*$DateCourante* | tail -1`;
- $NomFichierATransferer =~ s/\n//g;
- $Cmd = "wc -l $NomFichierATransferer | awk '{split(\$0,res,\" \");print res[1];}'";
- $NbLignesFichierATransferer = `$Cmd`;
- $RepertoireServiceArchive = "$RepertoireService/ARCHIVE";
- `mkdir -p $RepertoireServiceArchive` if !(-d $RepertoireServiceArchive);
- if($NbLignesFichierATransferer == 0)
- {
- `mv $NomFichierATransferer $RepertoireServiceArchive`;
- }else{
- `cp $NomFichierATransferer $RepertoireLogTemporaire`;
- `mv $NomFichierATransferer $RepertoireServiceArchive`;
- }
- $NbFichiersATransferer = `/bin/ls -1 $RepertoireService/*$DateCourante* |wc -l`;
- }
- $date_debut_gunzip = `date "+%a %Y/%m/%d %H:%M:%S"`;
- $date_debut_gunzip =~ s/\n//g;
- @TabFichiersGunzip = `ls -1 $RepertoireLogTemporaire/*`;
- foreach $fichierAGunzip (@TabFichiersGunzip){
- `gunzip $fichierAGunzip`;
- }
- $NbFichiersATraiter = `ls $RepertoireLogTemporaire | wc -l`;
- $NbFichiersATraiter =~ s/\n//g;
- #---------------------------------------------------------------
- # Traitement du cas ou il y a plus de LIMITEBOUCLE fichiers
- #---------------------------------------------------------------
- if ($NbFichiersATraiter >= $LIMITEBOUCLE) {
- $date_traitement_2par2 = `date "+%a %Y/%m/%d %H:%M:%S"`;
- $date_traitement_2par2 =~ s/\n//g;
- &Fct_TraiementLIMITEBOUCLEfichiers($Pid,$NbFichiersATraiter,$LIMITEBOUCLE,$RepertoireFichiersTemporaire,$domain,*TabDomainIIS,$FichiersTempo,$DateCourante,$FichierPouilleme,$RepertoireLogTemporaire);
- }
- #---------------------------------------------------------------
- # Traitement en parallele des fichiers restants
- #---------------------------------------------------------------
- $date_traitement_parallele = `date "+%a %Y/%m/%d %H:%M:%S"`;
- $date_traitement_parallele =~ s/\n//g;
- &Fct_ConcatenationTrie("1",$Pid,$RepertoireFichiersTemporaire,$domain,*TabDomainIIS,$FichiersTempo,$DateCourante,$FichierPouilleme,$RepertoireLogTemporaire);
- #---------------------------------------------------------------
- # Traitement final du fichier trie concantene
- #---------------------------------------------------------------
- $NombreFichiersResultat = `ls $RepertoireFichiersTemporaire | wc -l`;
- #print STDOUT "ls $RepertoireFichiersTemporaire | wc -l";
- if ($NombreFichiersResultat == 1) {
- $NomFichierTemp = `ls -1 $RepertoireFichiersTemporaire`;
- $NomFichierTemp =~ s/\n//g;
- $FichFinal = $RepertoireFichiersTemporaire.'/'.$NomFichierTemp;
- }else{
- $FichFinal = $RepertoireFichiersTemporaire.'/FichFinal.tmp';
- }
- $date_debut_gzip = `date "+%a %Y/%m/%d %H:%M:%S"`;
- $date_debut_gzip =~ s/\n//g;
- `mv $FichFinal $FichierFinal`;
- system('gzip -1f '.$FichierFinal) if (-f $FichierFinal);
- $Nb_fichiers_RecuperationDeLaVeille = `ls $RepertoireEntree$domain/RecuperationDeLaVeille*.log | wc -l`;
- #print STDOUT "ls $RepertoireEntree$domain/RecuperationDeLaVeille*.log | wc -l";
- system('gzip -1f '.$RepertoireEntree.$domain.'/RecuperationDeLaVeille*.log') if ($Nb_fichiers_RecuperationDeLaVeille>0);
- `rm -r $RepertoireLogTemporaire` if (-d $RepertoireLogTemporaire);
- `rm -r $FichiersTempo` if (-d $FichiersTempo);
- `rm -r $RepertoireFichiersTemporaire` if (-d $RepertoireFichiersTemporaire);
- }
- }
- #---------------------------------------------------------------
- # Affichage fin du traitement pour DOMAIN
- #---------------------------------------------------------------
- select(FICHIER);
- print '';
- print '#####################################################################';
- print '# Traitement du service ' . $domain . ';';
- print '#####################################################################';
- print '';
- print $domain.' => Debut du traitement a : '.$date_debut_tri;
- print $domain.' => Concatenation des differents fichiers ';
- print $domain.' => Le fichier final est : '.$FichierFinal;
- if ($MaxNbFichiers == 0) {
- # Aucun fichier de logs pour la journee DateCourante donc rien a faire
- print $domain.' => Il n\'y a aucun fichier en entree';
- }else{
- # Il existe au moins un fichier de logs pour la journee DateCourante
- if ($MaxNbFichiers == 1) {
- # Il existe un seul fichier de logs donc on ne fait qu'une copie car le fichier est deja trie
- print $domain.' => Il y a un seul fichier en entree';
- }else{
- print $domain.' => Debut de gunzip de tous les fichiers a : '.$date_debut_gunzip;
- if ($NbFichiersATraiter > $LIMITEBOUCLE) {
- print $domain.' => Debut traitement 2 par 2 des '.$NbFichiersATraiter.' fichiers (LIMITEBOUCLE='.$LIMITEBOUCLE.') a : '.$date_traitement_2par2;
- }
- print $domain.' => Debut ConcatenationTrie a : '.$date_traitement_parallele;
- print $domain.' => Debut du gzip du fichier final a : '.$date_debut_gzip;
- }
- }
- $date_fin_tri = `date "+%a %Y/%m/%d %H:%M:%S"`;
- $date_fin_tri =~ s/\n//g;
- print $domain.' => Fin du traitement a : '.$date_fin_tri;
- $_ = $date_debut_tri;
- if(/(....)\/(..)\/(..).(..):(..):(..)$/) {$JourDebut=$3;$TempsDebut=$4*3600+$5*60+$6;}
- $_ = $date_fin_tri;
- if(/(....)\/(..)\/(..).(..):(..):(..)$/) {$JourFin=$3;$TempsFin=$4*3600+$5*60+$6;}
- $JourDiff=$JourFin-$JourDebut;
- if($JourDiff == 0){ $TempsDiff=$TempsFin-$TempsDebut; }else{ $TempsDiff=$TempsFin-$TempsDebut+24*3600; }
- $HeureDiff = int($TempsDiff / 3600);
- $MinuteDiff = int(($TempsDiff - $HeureDiff * 3600) / 60);
- $SecondeDiff = $TempsDiff - $HeureDiff * 3600 - $MinuteDiff * 60;
- print $domain.' => Temps de traitement = '.$HeureDiff.':'.$MinuteDiff.':'.$SecondeDiff;
- }
- sub Fct_TraiementLIMITEBOUCLEfichiers {
- local($Pid,$NbFichiersATraiter,$LIMITEBOUCLE,$RepertoireFichiersTemporaire,$domain,*TabDomainIIS,$FichiersTempo,$DateCourante,$FichierPouilleme,$RepertoireLogTemporaire) = @_;
- #---------------------------------------------------------------
- # Traitement du cas ou il y a plus de LIMITEBOUCLE fichiers
- #---------------------------------------------------------------
- # Limiter le nombre de fichiers a LUMITEBOUCLE avant de les concatener en parallele
- while ($NbFichiersATraiter >= $LIMITEBOUCLE) {
- # Permet d'avoir les deux fichiers de plus petite taille
- @DeuxFichiers = `ls -S1 $RepertoireLogTemporaire | tail -2`;
- $DeuxFichiers[1] =~ s/\n//g;
- $DeuxFichiers[2] =~ s/\n//g;
- $FichierGlobal1 = $RepertoireLogTemporaire.'/'.$DeuxFichiers[1];
- $FichierGlobal2 = $RepertoireLogTemporaire.'/'.$DeuxFichiers[2];
- # Calcule le nbre de lignes des deux fichiers
- $NbreLignesFich1 = 0;
- if( -f $FichierGlobal1 ){ $NbreLignesFich1 = `wc -l $FichierGlobal1 | awk '{print \$1}'`; $NbreLignesFich1 =~ s/\n//g; }
- $NbreLignesFich2 = 0;
- if( -f $FichierGlobal2 ){ $NbreLignesFich2 = `wc -l $FichierGlobal2 | awk '{print \$1}'`; $NbreLignesFich2 =~ s/\n//g; }
- if ($NbreLignesFich1 == 0 && $NbreLignesFich2 == 0) {
- # On supprime les deux fichiers
- if (-f $FichierGlobal1) { `rm -f $FichierGlobal1`; }
- if (-f $FichierGlobal2) { `rm -f $FichierGlobal2`; }
- }else{
- if ($NbreLignesFich1 > 0 && $NbreLignesFich2 == 0) {
- # La concatenation est egal au premier fichier
- if (-f $FichierGlobal2) { `rm -f $FichierGlobal2`; }
- }else{
- if ($NbreLignesFich1 == 0 && $NbreLignesFich2 > 0) {
- # La concatenation est egal au deuxieme fichier
- if (-f $FichierGlobal1) { `rm -f $FichierGlobal1`; }
- }else{
- # Les fichiers ont des données, on les concatene
- &Fct_ConcatenationTrie("2",$Pid,$RepertoireFichiersTemporaire,$domain,*TabDomainIIS,$FichiersTempo,$DateCourante,$FichierPouilleme,$RepertoireLogTemporaire);
- if (-f $FichierGlobal1) { `rm -f $FichierGlobal1`; }
- if (-f $FichierGlobal2) { `rm -f $FichierGlobal2`; }
- }
- }
- }
- $NbFichiersATraiter = `ls $RepertoireLogTemporaire | wc -l`;
- $NbFichiersATraiter =~ s/\n//g;
- }
- }
- sub Fct_ConcatenationTrie {
- local($Cas,$Pid,$RepertoireFichiersTemporaire,$domain,*TabDomainIIS,$FichiersTempo,$DateCourante,$FichierPouilleme,$RepertoireLogTemporaire) = @_;
- # Nombre de fichiers ayant un contenu
- # CAS DU TRAITEMETN DE TOUS LES FICHIERS DU REPERTOIRE
- $FichierTmpListeFichiers = $RepertoireFichiersTemporaire.'/FichierTmpListeFichiers'.$Pid.'.tmp';
- if($Cas == 1) {
- $MaxNbFichiers = `ls $RepertoireLogTemporaire | wc -l`;
- $MaxNbFichiers =~ s/\n//g;
- $CmdListeFichiers = 'ls -Sr1 '.$RepertoireLogTemporaire.'/* > '.$FichierTmpListeFichiers;
- $FichTemp = $RepertoireFichiersTemporaire.'/FichFinal.tmp';
- }
- # CAS DU TRAITEMENT 2 FICHIERS PAR 2 FICHIERS
- if($Cas == 2) {
- $MaxNbFichiers = 2;
- $CmdListeFichiers = 'ls -S1 '.$RepertoireLogTemporaire.'/* | tail -'.$MaxNbFichiers.' > '.$FichierTmpListeFichiers;
- $NbFichConcatene = `ls $RepertoireLogTemporaire | wc -l`;
- $NbFichConcatene =~ s/\n//g;
- $FichTemp = $RepertoireLogTemporaire.'/FichConcatene'.$NbFichConcatene.'.tmp';
- }
- $MaxNbFichiers =~ s/\n//g;
- # Traitement des logs en fonction du cas
- if($MaxNbFichiers == 0) {
- # Aucun fichier de logs pour la journee DateCourante donc rien a faire
- $DateTemp = `date`;
- $DateTemp =~ s/\n//g;
- }else{
- # Il existe au moins un fichier de logs pour la journee DateCourante
- if($MaxNbFichiers == 1) {
- # Il existe un seul fichier de logs donc on ne fait qu'une copie car le fichier est deja trie
- $DateTemp = `date`;
- $DateTemp =~ s/\n//g;
- $FichTemp = $RepertoireFichiersTemporaire.'/FichFinal.tmp';
- `cat $RepertoireLogTemporaire/* > $FichTemp`;
- }else{
- # Il y a plus d'un fichier de logs donc concatenation des differents fichiers
- # Initialisation du tableau @TabFichComplet contenant l'ensemble des fichiers
- `$CmdListeFichiers`;
- open(FICHIERRLT,$FichierTmpListeFichiers) || die "Fichier $FichierTmpListeFichiers non trouvé";
- my @ListeFichAConcatener = <FICHIERRLT>;
- close(FICHIERRLT);
- if (-f $FichierTmpListeFichiers) { `rm -f $FichierTmpListeFichiers`; }
- my $NumeroFichier = 0;
- my $ligne = "";
- for($indice = 0 ; $indice < $LIMITEBOUCLE ; $indice++){
- $F[$indice] = "Ferme";
- }
- foreach $FichAConcatener (@ListeFichAConcatener){
- $FichAConcatener =~ s/\n//g;
- $NbLignesFichAConcatener = `wc -l $FichAConcatener | awk '{print \$1}'`;
- $NbLignesFichAConcatener =~ s/\n//g;
- $TabFichComplet_env{$NumeroFichier} = [ 0 , $NbLignesFichAConcatener , $FichAConcatener];
- if($NumeroFichier == 0 ) { open(FILE0,$FichAConcatener) || die "Fichier $FichAConcatener non trouvé"; }
- if($NumeroFichier == 1 ) { open(FILE1,$FichAConcatener) || die "Fichier $FichAConcatener non trouvé"; }
- if($NumeroFichier == 2 ) { open(FILE2,$FichAConcatener) || die "Fichier $FichAConcatener non trouvé"; }
- if($NumeroFichier == 3 ) { open(FILE3,$FichAConcatener) || die "Fichier $FichAConcatener non trouvé"; }
- if($NumeroFichier == 4 ) { open(FILE4,$FichAConcatener) || die "Fichier $FichAConcatener non trouvé"; }
- if($NumeroFichier == 5 ) { open(FILE5,$FichAConcatener) || die "Fichier $FichAConcatener non trouvé"; }
- if($NumeroFichier == 6 ) { open(FILE6,$FichAConcatener) || die "Fichier $FichAConcatener non trouvé"; }
- if($NumeroFichier == 7 ) { open(FILE7,$FichAConcatener) || die "Fichier $FichAConcatener non trouvé"; }
- if($NumeroFichier == 8 ) { open(FILE8,$FichAConcatener) || die "Fichier $FichAConcatener non trouvé"; }
- if($NumeroFichier == 9 ) { open(FILE9,$FichAConcatener) || die "Fichier $FichAConcatener non trouvé"; }
- $F[$NumeroFichier] = "Ouvert";
- $NumeroFichier++;
- }
- # Boucle du traitement
- `touch $FichTemp`;
- open(FICHIERCOURANT,">>$FichTemp") || die "Fichier $FichTemp non trouvé";
- select(FICHIERCOURANT);
- $Premiere_Initialisation = 0;
- $Boucle = 1;
- $ligne = "";
- $dateinit = `date +%Y%m%d%H%M%S`;
- $dateinit =~ s/\n//g;
- while ($Boucle == 1) {
- if($Premiere_Initialisation == 0){
- for($indice = 0 ; $indice < $NumeroFichier ; $indice++) {
- $TabFichComplet_valeurs{$indice} = [ "" , $dateinit ];
- $ligne = "";
- if($indice == 0) { $ligne = <FILE0>; }
- if($indice == 1) { $ligne = <FILE1>; }
- if($indice == 2) { $ligne = <FILE2>; }
- if($indice == 3) { $ligne = <FILE3>; }
- if($indice == 4) { $ligne = <FILE4>; }
- if($indice == 5) { $ligne = <FILE5>; }
- if($indice == 6) { $ligne = <FILE6>; }
- if($indice == 7) { $ligne = <FILE7>; }
- if($indice == 8) { $ligne = <FILE8>; }
- if($indice == 9) { $ligne = <FILE9>; }
- if(!$ligne) { $ligne = ""; }else{ $ligne =~ s/\n//g; }
- $dateligne = &Fct_RecupererDate($ligne,*TabDomainIIS,$domain);
- if($dateligne != 10000100100100100100) { $TabFichComplet_valeurs{$indice} = [ $ligne , $dateligne ]; }
- }
- $DateMin = $TabFichComplet_valeurs{0}[2];
- $LigneMin = $TabFichComplet_valeurs{0}[1];
- $IndiceMin = 0;
- $Premiere_Initialisation = 1;
- }
- # Prise en compte de tous les fichiers logs Apache
- for ($i = 0; $i < $NumeroFichier; $i++) {
- # Si la date de la ligne du fichier i est anterieure a celle de DateMin alors on change toutes les variables xxxMin
- # Cette action se fait si le fichier n'est pas celui qui est deja pris par defaut
- if ($i != $IndiceMin && $DateMin > $TabFichComplet_valeurs{$i}[2]) {
- $DateMin = $TabFichComplet_valeurs{$i}[2];
- $LigneMin = $TabFichComplet_valeurs{$i}[1];
- $IndiceMin = $i;
- }
- # Si l'on a atteint le dernier fichier et que l'on a donc compare toutes les lignes des differents curseurs
- if ($i == ($MaxNbFichiers - 1)) {
- # Impression de la ligne Min dans le fichier final
- $_ = $DateMin;
- if(/^(....)(..)(..)......$/) {
- $datecourtedefinitive = $3.'-'.$2.'-'.$1;
- if ($datecourtedefinitive eq $DateCourante) {
- if($LigneMin) { print FICHIERCOURANT $LigneMin; }
- }else{
- #$FichierPouillemeTmp = $RepertoireFichiersTemporaire.'/FichierPouillemeTmp.tmp';
- #$FichierListeTemporaire = $RepertoireFichiersTemporaire.'/FichierListeTemporaire.tmp';
- #$FichierNomFichierPouilleme = $RepertoireConf.'/NomFichierPouilleme.txt';
- #`echo "RecuperationDeLaVeille*$datecourtedefinitive.log.gz" > $FichierNomFichierPouilleme`;
- #`echo "RecuperationDeLaVeille*$datecourtedefinitive.log" > $FichierPouillemeTmp`;
- #`sort -u $FichierPouillemeTmp > $FichierPouilleme`;
- $FichierDuLendemain = $RepertoireEntree.$domain.'/RecuperationDeLaVeille'.$domain.'.'.$datecourtedefinitive.'.log';
- $LigneAEcrire = $LigneMin; $LigneAEcrire =~ s/\"/\\\"/g;
- if($LigneAEcrire){
- if(-f $FichierDuLendemain ){
- open(FICHIERDULENDEMAIN,">>$FichierDuLendemain") || die "Fichier $FichierDuLendemain non trouvé";
- print FICHIERDULENDEMAIN $LigneAEcrire;
- close(FICHIERDULENDEMAIN);
- }else{
- open(FICHIERDULENDEMAIN,">$FichierDuLendemain") || die "Fichier $FichierDuLendemain non trouvé";
- print FICHIERDULENDEMAIN $LigneAEcrire;
- close(FICHIERDULENDEMAIN);
- }
- # `echo "$LigneAEcrire" >> $FichierDuLendemain`; }else{ `echo "$LigneAEcrire" > $FichierDuLendemain`; }
- }
- }
- }
- # Changement du curseur dans le fichier Min
- # Si numero de ligne courante inferieur ou egal au nombre maximum de lignes du fichier
- if($TabFichComplet_env{$IndiceMin}[1]<=$TabFichComplet_env{$IndiceMin}[2]){
- $TabFichComplet_env{$IndiceMin}[1]++;
- # Deux cas :
- # la ligne lue est une ligne du fichier donc on change les variables Min
- # OU la ligne lue est la derniere ligne du fichier (ligne vide) et donc le fichier ne doit plus etre pris en compte dans les comparaison
- if($TabFichComplet_env{$IndiceMin}[1]<=$TabFichComplet_env{$IndiceMin}[2]){
- $ligne = "";
- if($IndiceMin == 0) { $ligne = <FILE0>; }
- if($IndiceMin == 1) { $ligne = <FILE1>; }
- if($IndiceMin == 2) { $ligne = <FILE2>; }
- if($IndiceMin == 3) { $ligne = <FILE3>; }
- if($IndiceMin == 4) { $ligne = <FILE4>; }
- if($IndiceMin == 5) { $ligne = <FILE5>; }
- if($IndiceMin == 6) { $ligne = <FILE6>; }
- if($IndiceMin == 7) { $ligne = <FILE7>; }
- if($IndiceMin == 8) { $ligne = <FILE8>; }
- if($IndiceMin == 9) { $ligne = <FILE9>; }
- if($ligne){
- $ligne =~ s/\n//g;
- $dateligne = &Fct_RecupererDate($ligne,*TabDomainIIS,$domain);
- if($dateligne != 10000100100100100100){
- $TabFichComplet_valeurs{$IndiceMin} = [ $ligne , $dateligne ];
- # Les variables Min sont initialisees avec les donnees de la ligne suivante du fichier d'entree Min si la ligne n'est pas vide
- $DateMin = $TabFichComplet_valeurs{$IndiceMin}[2];
- $LigneMin = $TabFichComplet_valeurs{$IndiceMin}[1];
- }
- }else{
- $TabFichComplet_env{$IndiceMin}[1]++;
- $TabFichComplet_valeurs{$IndiceMin}[2] = "99999999999999";
- $DateMin = $TabFichComplet_valeurs{$IndiceMin}[2];
- $LigneMin = "";
- }
- }else{
- # On a atteint la fin du fichier donc on positionne la DateCourant Min comme MAX=99999999999999
- $TabFichComplet_valeurs{$IndiceMin}[2] = "99999999999999";
- $DateMin = $TabFichComplet_valeurs{$IndiceMin}[2];
- $LigneMin = "";
- }
- }else{
- # On a atteint la fin du fichier donc on positionne la DateCourant Min comme MAX=99999999999999
- $TabFichComplet_valeurs{$IndiceMin}[2] = "99999999999999";
- $DateMin = $TabFichComplet_valeurs{$IndiceMin}[2];
- $LigneMin = "";
- }
- }
- }
- $Boucle = 0;
- for($indice = 0; $indice < $NumeroFichier ; $indice++) {
- if($TabFichComplet_env{$indice}[1]<=$TabFichComplet_env{$indice}[2]){ $Boucle = 1; }
- }
- }
- if($F[0] eq "Ouvert"){ close(FILE0); }
- if($F[1] eq "Ouvert"){ close(FILE1); }
- if($F[2] eq "Ouvert"){ close(FILE2); }
- if($F[3] eq "Ouvert"){ close(FILE3); }
- if($F[4] eq "Ouvert"){ close(FILE4); }
- if($F[5] eq "Ouvert"){ close(FILE5); }
- if($F[6] eq "Ouvert"){ close(FILE6); }
- if($F[7] eq "Ouvert"){ close(FILE7); }
- if($F[8] eq "Ouvert"){ close(FILE8); }
- if($F[9] eq "Ouvert"){ close(FILE9); }
- close(FICHIERCOURANT);
- select(FICHIER);
- }
- }
- }
- sub Fct_RecupererDate {
- local($ligne,*TabDomainIIS,$domain) = @_;
- my $DateFct = $Jour = $Mois = $Annee = $Temps = '';
- if (defined $TabDomainIIS{$domain}) {
- if(!$ligne){
- return "10000100100100100100";
- }else{
- # regexp = '....-..-.....:..:..';
- $_ = $ligne;
- if(/(....)-(..)-(..).(..):(..):(..)/){
- $ExtractAnnee = $1; $ExtractMois = $2; $ExtractJour = $3; $ExtractHeure = $4; $ExtractMinute = $5; $ExtractSeconde = $6;
- $DateDebutLigne = $ExtractAnnee.$ExtractMois.$ExtractJour.$ExtractHeure.$ExtractMinute.$ExtractSeconde;
- return $DateDebutLigne;
- }else{
- print 'ERROR : Pb de ligne pour le domain : '.$domain;
- print 'ERROR : Pas de Date dans la ligne : '.$ligne;
- }
- }
- }else{
- # regexp = "[..\/...\/....:..:..:.. ";
- if(!$ligne){
- return "10000100100100100100";
- }else{
- $_ = $ligne;
- if(/(..).(...).(....):(..):(..):(..)/){
- $ExtractAnnee = $3; $ExtractJour = $1; $ExtractHeure = $4; $ExtractMinute = $5; $ExtractSeconde = $6;
- $_ = $2;
- if(/Jan/) { $Mois = "01"; }
- if(/Feb/) { $Mois = "02"; }
- if(/Mar/) { $Mois = "03"; }
- if(/Apr/) { $Mois = "04"; }
- if(/May/) { $Mois = "05"; }
- if(/Jun/) { $Mois = "06"; }
- if(/Jul/) { $Mois = "07"; }
- if(/Aug/) { $Mois = "08"; }
- if(/Sep/) { $Mois = "09"; }
- if(/Oct/) { $Mois = "10"; }
- if(/Nov/) { $Mois = "11"; }
- if(/Dec/) { $Mois = "12"; }
- $DateDebutLigne = $ExtractAnnee.$Mois.$ExtractJour.$ExtractHeure.$ExtractMinute.$ExtractSeconde;
- return $DateDebutLigne;
- }else{
- print 'ERROR : Pb de ligne pour le domain : '.$domain;
- print 'ERROR : Pas de Date dans la ligne : '.$ligne;
- }
- }
- }
- }
- 1;
Add Comment
Please, Sign In to add comment