-
Perl et apache
Bonjour,
J'avais déjà poster ici pour quelques soucis de perl pour superviser apache depuis j'ai bien avancer mais il me reste un soucis alors voila j'ai une sortie de commande qui me donne :
--------------------------------------------------------------------------
Proxy LoadBalancer Status for balancer://xx-xxxxxx-xxxxxxx
SSes Timeout Method
- 10 bybusyness
Sch Host Stat Route Redir F Set Acc Wr Rd
ajp hostname Init Ok 1 0 6422 862K 29M
--------------------------------------------------------------------------
Proxy LoadBalancer Status for balancer://xx-xxx-xxxxxxx
SSes Timeout Method
- 10 bybusyness
Sch Host Stat Route Redir F Set Acc Wr Rd
http hostname Init Ok 1 0 0 0 0
--------------------------------------------------------------------------
Mon but est de récupérer différents éléments des différents blocs (un bloc situé entre les ----). Ces éléments sont en gras.
Le problème il peut y avoir plusieurs lignes dans la liste avec hostname et status qu'il faut récupérer, sur cette ligne aucun élément ne peut être considérer comme étant présent à chaque fois.
Je bloque donc pour faire une boucle qui donnerait tant que j'analyse une ligne pour xx-xxxxxx-xxxxx je reste dans ce bloc, d'une fois que j'ai toutes les lignes je passe au bloc suivant.
Voila mon morceau de code pour ça où j'en suis :
sub verif_lb_status {
my @resultat = qx/apachectl fullstatus 2>\/dev\/null/;
# Si la commande à réussie
if (@resultat > 0) {
# Pour chaque ligne
foreach (@resultat) {
# Parsing de la ligne (pattern cherchée : définition du balancer sous format xx-xxxxxx-xxxxxxx)
$_ =~ /Proxy\s+LoadBalancer\s+Status\s+for\s+balancer:\/\/(\w)\n/ ;
my $balancer = $1
# Parsing de la ligne (pattern cherchée : )
$=~ /\s+\w\s+(\w[^Host])\s+\w\s+(\w[^Stat])\s+\w\s+\w\s+\w\s+\w\s+\w\s+\w\s+\w\n/
# Si la ligne match
if (defined $1 && $1 ne '' && defined $2 && $2 ne '') {
my $load_balancer_hostname = $1;
my $load_balancer_status = $2;
if ($load_balancer_status eq "OK") {
$load_balancer_status = 1;
} else {
$load_balancer_status = 0;
}
# Ligne de commande pour ovo (format: opcmon "nom_policy"=etat_load_balancer)
my $cmd = 'opcmon "' . Opts::get_option($OPT_POLICY) . '"=' . $load_balancer_status ' -object "' . 'load_balancer_hostname' .' -option balancer="' . $balancer . ' -option load_balancer_hostname="' . $load_balancer_hostname . '" -option load_balancer_status="' . $load_balancer_status . '"';
# Si debug
Utils::trace(1, $cmd . "\n");
# Envoi du résultat à ovo via opcmon
system($cmd);
last;
}
}
}
}
Aidez moi, si il faut quelques précisions je suis la.
Merci.
-
Salut encarnado,
C'est plus lisible si tu utilises la balise [ CODE ] pour ton code informatique et l'indentation ça peut être pratique.