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

Langage Perl Discussion :

Automatisation de rapport serveur en Perl


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Par défaut Automatisation de rapport serveur en Perl
    Bonjour,

    Tout d'abord je tient à vous informer que je suis débutant dans ce language.

    Je doit effectuer un travail et j'aurais besoin d'aide il conciste à:

    Analyser un fichier log et détecter si le serveur a bien fait la sauvegarde il ce présente comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Total        Copi‚s     Ignor‚s  Diff‚rences       checs     Suppl‚m.
         R‚p. :      205          0         205         0              0         
     Fichiers :     493          0         493          0              0        
       Octets :   1.06 m       0        1.06 m      0              0         
       Dur‚es :   0:00:03    0:00:00               0:00:00          0:00:03
    
        Fin : Tue Jun 09 20:30:48 2009
    Ce qui est en gras indique qu'il n'y a pas d'érreurs si il y a un 1 à la place j'aimerais qu'il m'alerte.

    D'autre part un fichier log ce crée pour chaque jour de la semaine, j'aimerais qu'il analyse le fichier log du jour même le nom du fichier log ce présentant comme sa : OutFile+la date du jour par exemple pour mardi : OutFileMARDI.

    Si le fichier log n'a pas été créé ce jours la sauvegarde a donc échoué et il faut qu'il alerte également.

    J'attend vos avis, merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Quelque chose comme ceci devrait être une bonne base :
    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
     
    use strict;
    use warnings;
     
    # Liste des jours de la semaine
    my @jours = qw(DIMANCHE LUNDI MARDI MERCREDI JEUDI VENDREDI SAMEDI);
    # Jour d'aujourd'hui (localtime retourne la date d'aujourd'hui, le 6e index du tableau retourné donne le jour dans la semaine)
    my $aujourdhui = $jour[$[localtime]->[6]];
    # Fichier de log
    my $fichier_log = "OutFile$aujourdhui";
     
    # on teste si le fichier de log est "readable" (opérateur -r)
    die "Pas de log pour aujourd'hui ($fichier_log)" if !-r $fichier_log;
     
    # on affiche les lignes du fichier qui contiennent des nombres positifs dans les 2 dernières positions de chaque ligne
    open my $LOG, "<", $fichier_log;
    foreach my $line (<$LOG>) {
      if (my ($comment, $echec, $supplem) = $line =~ /^([^:]).*(\d+)\s+(\d+)\s*$/) {
        print "$comment contient des erreurs\n" if $echec + $supplem > 0;
      }
    }
    Je ne l'ai pas testé, il ne reste donc qu'à tester et debuguer

  3. #3
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Par défaut
    Merci pour cette réponse rapide En fait j'ai effectivement corriger quelques petites choses, maintenant il y a cette deuxième partie quer je n'arrive pas du tout à faire fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # on affiche les lignes du fichier qui contiennent des nombres positifs dans les 2 dernières positions de chaque ligne
    open my $LOG, "<", $fichierlog;
    foreach my $line (<$LOG>) {
      if (my ($comment, $echec, $supplem) = $line =~ /^([^:]).*(\d+)\s+(\d+)\s*$/) {
        print "$comment contient des erreurs\n" if $echec + $supplem > 0;
      }
    }
    En fait dans mon fichier log il y a plusieurs de ces tableaux mais sa ne marche pas du tout, on ma dit d'utiliser les expressions régulières ou motifs mais je ne sais pas comment sa fonctionne. Je joint mon fichier log peut être que sa pourra vous éclairer
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Ceci est justement une expression régulière :
    /^([^:]).*(\d+)\s+(\d+)\s*$/

    Qui signifie :
    - depuis le début de ligne
    - capturer tous les caractères sauf ":" autant de fois que possible
    - chercher n'importe quel caractère autant de fois que possible
    - capturer un nombre
    - chercher des espaces
    - capturer un nombre
    - chercher éventuellement des espaces et la fin de ligne

    Si une ligne du fichier log "match" ce motif, les variables ($comment, $echec, $supplem) sont respectivement affectées avec les captures décrites dans l'explication du motif.

    Il se trouve qu'avec ce motif, et l'exemple de fichier log que tu as fourni, il y a deux lignes supplémentaires qui correspondent au motif, sans contenir d'erreur :
    Fin : Tue Jun 09 20:30:42 2009
    et
    D‚but : Tue Jun 09 20:30:42 2009

    Deux solutions donc :
    - soit trouver un motif plus restrictif
    - soit vérifier la correspondance au motif dans une zone du fichier plus restreinte.

    Ne connaissant pas précisément le format du fichier, il est difficile de faire un choix parfait.
    Néanmoins, on peut supposer que dès lors que l'on atteind la ligne contenant "Fin :", il est possible de ne plus contrôler la fin du log.
    Il suffirait alors d'ajouter la ligne suivante en début de foreach :

  5. #5
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Par défaut
    En fait debut et fin ne corresponde pas au rapport sans erreurs. D'autre part le format du fichier est .log correspondant a un fichier texte. Concernant l'expression réguliére que tu ma fourni elle devrait marcher, c'est la que je ne comprend pas pourquoi dans un rapport sans erreurs que je lui donne il m'affiche qu'il en contient.

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Je viens juste de t'expliquer l'expression régulière est trop large (ou est appliquée sur des éléments pour lesquels elle ne devrait pas), et je t'ai donnée des solutions pour corriger le tir.

    Quant au format du fichier, le simple fait de donner son extension .log ne renseigne pas sur le format de son contenu. Les motifs des expressions régulières ne peuvent être écrits sans connaitre la syntaxe (le format) des lignes contenues dans le fichier.

    Par ailleurs, pourrais-tu indiquer plus précisément les erreurs que le programme te remonter et fournissant aussi le fichier log qui a généré ces erreurs non voulues ?

  7. #7
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Par défaut
    Je vais essayer de te fournir un fichier log avec des erreurs je vais chercher sa

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/10/2008, 14h30
  2. Automatisation des Rapports Studio Cognos 8.3
    Par youean dans le forum Cognos
    Réponses: 4
    Dernier message: 22/08/2008, 16h13
  3. [BO Xi][Webi] Automatisation de rapports Webi
    Par pbaryga dans le forum Webi
    Réponses: 10
    Dernier message: 21/01/2008, 16h01
  4. Réponses: 0
    Dernier message: 18/11/2007, 20h53
  5. Réponses: 1
    Dernier message: 07/10/2005, 09h24

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