Traitement log alarmes perl

Fermé
pomme2reinette Messages postés 1 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 25 février 2014 - 25 févr. 2014 à 07:00
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 25 févr. 2014 à 11:03
Bonjour,
Je suis en train d'investiguer des alarmes (je suis dans les télécoms) sur des antennes relais. Je souhaite investiguer sur le statut des antennes relais . Le problème c'est que j'ai un log d'alarme pour chaque antenne. Donc il me faut concaténer les fichiers log de toutes les antennes et traiter le fichier final de façon a avoir en sortie un fichier avec :

Nom de l'antenne relais;status
AntenneA;disabled
AntenneB;enabled
AntenneC;disabled
.
.

Les fichier logs se présentent ainsi

-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
>Status (Disabled)
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------

Le nom du fichier correspond au nom de l'antenne mais n'est pas présent à l'interieur du log. Donc il me faudrait ouvrir chacun des fichiers logs, récupérer le nom de l'antenne (nom du fichier log),et récupérer le status ...qui est toujours entre parenthèse.

Bon j'ai passé la soirée à regarder les tutoriels mais partant des profondeurs abyssales en matière de programmation perl je suis juste à peu près capable de comprendre des codes simples. J'ai beaucoup de mal à coder...je me perds avec tous ces symbole $%#

Si vous avez une minute, pourriez vous m'aiguiller svp ? Quelqun aurait un exemple de code à me proposer svp ?
merci grandement

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 25/02/2014 à 11:07
Salut pomme2reinette,

Si tous les fichiers logs AntenneA, AntenneB, sont dans le même répertoire, quelque chose comme cela devrait fonctionner :

#!/usr/bin/perl

use strict;
use warnings;

my $dir = '/chemin/vers/mon/repertoire';

opendir(DIR, $dir) or die $!;

while (my $fic_log = readdir(DIR)) {
    if ($fic_log =~ /Antenne.*$/)
    {
        open (LIRE_LOG, '<', $fic_log)
            or die "Impossible d'accéder au fichier $fic_log";
        my @log_data = <LIRE_LOG>;
        close(LIRE_LOG);
        if (/>Status\s\((.*?)\)/ ~~ @log_data)
        {
            print "$fic_log;$1\n";
        } else
        {
            print "Erreur : le fichier log $fic_log " .
                "ne contient pas de ligne 'Status'\n";
            exit;
        }

    }
}

closedir(DIR);

L'opérateur
~~
permettant de matcher dans un array est disponible à partir de Perl 5.10

https://perldoc.perl.org/perlfaq4#How-can-I-tell-whether-a-certain-element-is-contained-in-a-list-or-array%3f


Dal
0