alors je vais donc résumer ma situation:
j'interroge un routeur il me renvoit le compteur de FCSerror donc tout vat bien!!
Première étape de passée deuxième truc il faut que je stoke tout ça dans un fichier txt!
Mes fichiers text ont se format:
<Thu Apr 28 16:49:50 2005> 192.168.0.1 FCS_error=0 FCS_index=11
<Thu Apr 28 16:49:50 2005> 192.168.0.1 FCS_error=0 FCS_index=12
<Thu Apr 28 16:49:50 2005> 192.168.0.1 FCS_error=0 FCS_index=13
<Thu Apr 28 16:49:50 2005> 192.168.0.1 FCS_error=0 FCS_index=14
Maintenant je vous explique le cheminement du prog qui me génère ces fichiers. Il y a un fichier par jour et leurs noms sont de type jour-moi-année. Le fichier du jour est un fichier FILS et le fichier d'hier un fichier PERE. Je vais vous décrire le fonctionnement de mon prog depuis le début c a d il n'y a aucun fichier!
1=> j'init la variable $file avec le nom du fichier du jour. J'ai donc une fonction &get_nom_fichier_fils qui me retourne le nom du fichier du jour dans la variable $file voici le code:
sub get_nom_fichier_fils{
print "coucou ici filston\n";
($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);
$annee += 1900;
$mois++;
$file = "$jour-$mois-$annee";
print"file=$file\n";
}
Les print sont la pour le debugage!!
2=> J'ouvre le fichier du jour grace à :
if( 1 == open(FIC,"$file" )){
@buffer_fils = <FIC>;
}
S'il existe il me le charge dans @buffer_fils donc tout est ok.
mais si le fichier n'existe pas car tout simplement c'est la premiere fois que l'on exec le script ou alors on vient de changer de jour et le script n'a pas été lancé depuis, alors je traite l'erreur en recherchant un fichier père!!!
else{
print "Erreur pas de fichier fils! Recherche d'un fichier père\n";
&get_nom_fichier_pere;
if( 1 == open(FIC,"$file" )){
print "Fichier père trouvé\n";
@buffer_pere = <FIC>;
close(FIC);
&set_fichier_fils;
}
S'il y a un fichier on charge son contenu dans @buffer_pere mais si il n'existe pas alors je crée par defaut un fichier père et un fichier fils.
else{
print "Aucun fichier de sauvegarde!! Création du fichier père!.\n";
&get_nom_fichier_fils;
&get_FCS_error;
&get_nom_fichier_fils;
open (FIC,"$file" );
@@buffer_fils = <FIC>;
close(FIC);
print "Fichier fils=\n@buffer_fils\n";
&get_nom_fichier_pere;
&get_FCS_error;
&get_nom_fichier_pere;
open (FIC,"$file" );
@buffer_pere = <FIC>;
close(FIC);
print "Fichier père=\n@buffer_pere\n";
}
Mon gros problème ce situe de la deuxième partie du else juste au dessus.
Le print "Fichier fils=\n@buffer_fils\n"; est OK il me retourne bien le contenu mais mon print "Fichier père=\n@buffer_pere\n";
ne me retourne rien du tout!!!! PK je ne sias pas!!! le c'est que si j'intervertis le code comme cela:
else{
print "Aucun fichier de sauvegarde!! Création du fichier père!.\n";
&get_nom_fichier_pere;
&get_FCS_error;
&get_nom_fichier_pere;
open (FIC,"$file" );
@buffer_pere = <FIC>;
close(FIC);
print "Fichier père=\n@buffer_pere\n";
&get_nom_fichier_fils;
&get_FCS_error;
&get_nom_fichier_fils;
open (FIC,"$file" );
@buffer_fils = <FIC>;
close(FIC);
print "Fichier fils=\n@buffer_fils\n";
}
Cette fois c'est de contraire Le print "Fichier prer=\n@buffer_pere\n"; est OK il me retourne bien le contenu mais mon print "Fichier fils=\n@buffer_fils\n"; ne me retourne rien du tout!!!!
POURQUOI!!!!!!!!!!!!
je vous met mon code en entier pour plus de clartée:
#! /usr/bin/perl
use strict;
use SNMP_util "1.04";
my $i = 0;
my $IP = '192.168.0.1';
my @oid_FCSerror = (1,3,6,1,2,1,10,7,2,1,3);
my $seconde;
my $minute;
my $heure;
my $jour;
my $mois;
my $annee;
my $wday;
my $yday;
my $isdst;
my $maintenant;
my @FCS_index;
my @buffer_fils;
my @buffer_pere;
my $file;
my $cpt;
my $FCSerror;
my @oid_FCS_ok;
my $z=0;
my @mc;
&get_FCS_error_index;
&get_nom_fichier_fils;
if( 1 == open(FIC,"$file" )){
@buffer_fils = <FIC>;
}
else{
print "Erreur pas de fichier fils! Recherche d'un fichier père\n";
&get_nom_fichier_pere;
if( 1 == open(FIC,"$file" )){
print "Fichier père trouvé\n";
@buffer_pere = <FIC>;
close(FIC);
&set_fichier_fils;
}
else{
print "Aucun fichier de sauvegarde!! Création du fichier père!.\n";
&get_nom_fichier_fils;
&get_FCS_error;
&get_nom_fichier_fils;
open (FIC,"$file" );
@mc = <FIC>;
close(FIC);
print "Fichier fils=\n@mc\n";
&get_nom_fichier_pere;
&get_FCS_error;
&get_nom_fichier_pere;
open (FIC,"$file" );
@buffer_pere = <FIC>;
close(FIC);
print "Fichier père=\n@buffer_pere\n";
}
}
sub set_fichier_fils {
&get_nom_fichier_fils;
open(FIC,">$file" );
&get_FCS_error;
close(FIC);
}
sub get_FCS_error {
open(FIC,">>$file" );
while($i < $cpt) {
push(@oid_FCSerror,@FCS_index[$i]);
my @oid_FCS_ok = join('.',@oid_FCSerror);
my $FCSerror = snmpget ($IP,@oid_FCS_ok);
pop(@oid_FCSerror);
print FIC"<",scalar localtime,"> $IP FCS_error=$FCSerror FCS_index=@FCS_index[$i]\n";
$i++;
}
close(FIC);
}
sub get_FCS_error_index {
@FCS_index = map {/(\d+)/} snmpwalk ($IP,'1.3.6.1.2.1.10.7.2.1.1');
$cpt = scalar @FCS_index;
}
sub get_nom_fichier_fils{
print "coucou ici filston\n";
($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);
$annee += 1900;
$mois++;
$file = "$jour-$mois-$annee";
print"file=$file\n";
}
sub get_nom_fichier_pere{
print "coucou ici papa\n";
($seconde,$minute,$heure,$jour,$mois,$annee,$wday,$yday,$isdst) = localtime(time);
$annee += 1900;
$mois++;
$jour = ($jour - 1);
$file = "$jour-$mois-$annee";
print"file=$file\n";
}
Pour le comparaison des FCSerror on attendra un peut!!!!