IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

automatisation récupération d'infos


Sujet :

Programmation et administration système Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Points : 69
    Points
    69
    Par défaut automatisation récupération d'infos
    J'ai modifié un code qui va chercher des infos dans un fichier texte. il le split et les formatz via un format STDOUT pour les envoyer dans un mail. j'ai ajouté du code pour récupérer les variables contenues dans le STDOUT afin de les intégrer dans une BDD mysql. le problème c'est qu'il ne récupère que la première ligne de valeur et boucle indéfiniment avec un while inscrivant la même ligne dans la BDD. Si j'utilise un foreach il inscrit la première ligne, ne boucle pas et ne passe pas à la 2e ligne...

    voici mon code complet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    # script modifié par A.ROUSSEL le 16 05 2008
    use DBI;
     
    my $db = 'DBI:mysql:essai:127.0.0.1';
    my $user = 'root';
    my $pass = '';
    my $dbh = DBI->connect($db, $user, $pass) 
      or die "connexion impossible";
    use POSIX qw(strftime);
    $Time = strftime "%Y-%m-%d", localtime;
    $Seuil="10%"; 
     
    while (<>) {
        undef @free;
        chomp;
        if ( /System information for \\\\(.*)\:/ ) {
            $host = $1;
        }
     
        if ( /Fixed/ ) {
    	push @free, split ();
        } else {
    	next;
        }
     
        $Volume = $free[0];
        $Type   = $free[1];
        $Format = $free[2];
     
        if ( $#free == 7 ) {
    	$Size = "$free[3] $free[4]";
    	$Frees = "$free[5] $free[6]";
    	$Freep =$free[7];
        }
     
        if ( $#free == 8 ) {
    	$Label = $free[3];
    	$Size = "$free[4] $free[5]";
            $Frees = "$free[6] $free[7]";
            $Freep =$free[8];
        }
        if ($Freep <= $Seuil){
        write STDOUT;
     
        my $req = $dbh->prepare("INSERT INTO checkfs VALUES(?, ?, ?, ?, ?, ?, ?)");
     
    foreach (<STDOUT>){
      $req->execute( $Time, $host, $Volume, $Label, $Size, $Frees, $Freep )
        or die "requete impossible";
    	}
     
    $dbh->disconnect();
        }
     
    }
     
    format STDOUT_TOP =
    @<<<<:@<<<<<<<<<
    Date, $Time
    @<<<<<<<<<|@>>>>>|@<<<<<<<<|@>>>>>>>|@>>>>>>|@>>>>
    Hostname, Volume, Label, Size, Frees, Freep
    @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    __________________________________________________
    .
     
    format STDOUT =
    @<<<<<<<<<|@>>>>>|@<<<<<<<<|@>>>>>>>|@>>>>>>|@>>>>
    $host, $Volume, $Label, $Size, $Frees, $Freep
    .
     
    __END__
    je m'arrache les cheveux car je sais que je dois inclure un compteur ça me parait l'évidence même mais je ne sais pas comment compter le nombre de lignes contenues dans le STDOUT



    HELP ME PLEASE (je veux pas finir chauve)

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (<STDOUT>){
      $req->execute( $Time, $host, $Volume, $Label, $Size, $Frees, $Freep )
        or die "requete impossible";
    	}
    Pourquoi ? Pourquoi tu mets une boucle alors qu'il n'y a qu'une seule requête à exécuter... Et pourquoi tu essaie de lire sur STDOUT, la sortie standard ?

    En supprimant simplement cette boucle stupide, ça devrait marcher.

    --
    Jedaï

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Points : 69
    Points
    69
    Par défaut si j'enlève
    si j'enlève le foreach ou le while

    mon code ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if ($Freep <= $Seuil){
        write STDOUT;
     
        my $req = $dbh->prepare("INSERT INTO checkfs VALUES(?, ?, ?, ?, ?, ?, ?)");
     
    #while (<>){
      $req->execute( $Time, $host, $Volume, $Label, $Size, $Frees, $Freep )
        or die "requete impossible";
    #	}
     
    $dbh->disconnect();
        }

    mais voila ce que j'obtiens en l'exécutant
    C:\Documents and Settings\adminbatch>cat "C:\Program Files\EasyPHP1-8\www\test\freespace-PSATOOLS-20080518.txt" | perl "C:\Program Files\EasyPHP1-8\www\test\freespacedb.pl"
    Date :2008-05-21
    Hostname |Volume|Label | Size| Frees|Freep
    __________________________________________________
    sapa108 | FDATA-Loca| 26.0 GB| 1.8 GB| 7%
    sapa129 | DDATA |135.7 GB|12.6 GB| 9%
    DBD::mysql::st execute failed: MySQL server has gone away at C:\Program Files\Ea
    syPHP1-8\www\test\freespacedb.pl line 48, <> line 38.
    requete impossible at C:\Program Files\EasyPHP1-8\www\test\freespacedb.pl line 48, <> line 38.
    cat: write error: Broken pipe

    il m'affiche 2 lignes sur le 3 que je devrais avoir, réalise la requête pour la ligne contenant "sapa108" puis plante

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Baldric de Dol Voir le message
    il m'affiche 2 lignes sur le 3 que je devrais avoir, réalise la requête pour la ligne contenant "sapa108" puis plante
    Oui, et si tu évitais de te déconnecter de la DB à chaque itération ça passerait mieux...
    Peut-être que si tu essayais de faire un effort pour comprendre ce que tu écris plutôt que de copier-coller des bouts de code ça passerait mieux...

    --
    Jedaï

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Points : 69
    Points
    69
    Par défaut problème résolu merci
    merci de ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] Récupération d'infos d'une listbox
    Par Astemius dans le forum Langage
    Réponses: 5
    Dernier message: 16/03/2007, 16h47
  2. Récupération d'info depuis radio bouton
    Par kosov dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 07/02/2007, 10h55
  3. Réponses: 3
    Dernier message: 27/04/2006, 15h23
  4. [matériel] récupération d'info
    Par airod dans le forum Général Python
    Réponses: 3
    Dernier message: 15/02/2006, 00h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo