Anomalie #3301
Agent Zéphir : met une diode verte même si erreur + pas de vérification au diagnose
Description
L'agent Zéphir est vert ou gris, mais jamais rouge, même si la sauvegarde est en erreur.
Voici un patch pour corriger :
--- sauvegarde.py 2012-04-12 14:35:24.000000000 +0200 +++ /usr/lib/python2.6/dist-packages/zephir/monitor/agents/sauvegarde.py 2012-04-14 16:32:21.000000000 +0200 @@ -33,11 +33,14 @@ ret_ctlg = bacula_rapport_load('catalogue') self.status = {BACULA_RAPPORT_UNKNOWN: status.Unknown(), BACULA_RAPPORT_OK: status.OK(), - BACULA_RAPPORT_ERR: status.Unknown()}.get(ret_svg[0]) - res = [{ 'status': boolean_to_onoff(ret_svg[0]), + BACULA_RAPPORT_ERR: status.Error()}.get(ret_svg[0]) + c_status = {BACULA_RAPPORT_UNKNOWN: status.Unknown(), + BACULA_RAPPORT_OK: status.OK(), + BACULA_RAPPORT_ERR: status.Error()}.get(ret_ctlg[0]) + res = [{ 'status': self.status, 'type': 'sauvegarde', 'comment': ret_svg[1]}, - { 'status': boolean_to_onoff(ret_ctlg[0]), + { 'status': c_status, 'type': 'catalogue', 'comment': ret_ctlg[1]}] return {'statistics': res }
Il n'y a pas de vérification de la sauvegarde dans le diagnose. Voici un patch (dont je ne suis pas spécialement fière mais bon) :
--- /tmp/153-bacula 2012-04-14 16:38:17.804576866 +0200 +++ 153-bacula 2012-04-14 19:00:17.838329288 +0200 @@ -47,6 +47,19 @@ else EchoRouge "Erreur" fi -echo + #copier depuis pyeole/bacula.py + BACULA_RAPPORT_OK="1" + BACULA_RAPPORT_ERR="-1" + BACULA_RAPPORT_UNKNOWN="0" + eval `/usr/bin/env python -c 'from pyeole.bacula import bacula_rapport_load; rap = bacula_rapport_load("sauvegarde"); print "RAP[0]=\"%s\"; RAP[1]=\"%s\";"%(rap[0], rap[1])'` + printf ". %${len_pf}s => " "Statut de la sauvegarde" + if [ "$RAP" = $BACULA_RAPPORT_OK ]; then + EchoVert "Ok : ${RAP[1]}" + elif [ "$RAP" = $BACULA_RAPPORT_ERR ]; then + EchoRouge "Erreur : ${RAP[1]}" + else + EchoOrange "Inconnue : ${RAP[1]}" + fi + echo fi exit 0
Associated revisions
l'agent zéphir ne calcul pas les statuts convenablement
Plusieurs problèmes : une inadéquation entre le statut lu depuis le
fichier et le statut attribué (BACULA_RAPPORT_ERREUR -> status.Unknown),
le statut général ne reflète que l'état de la sauvegarde principale.
- zephir/monitor/agents/sauvegarde.py : correction du statut,
utilisation de trois variables pour le statut de la sauvegarde
générale, le statut de la sauvegarde du catalogue et le statut
général, ce dernier étant calculé en fonction des deux autres.
Ref #3301
Vérification des statuts de sauvegarde dans diagnose
- eole/diagnose/module/153-bacula : interrogation du fichier
/var/lib/eole/reports/resultat-bacula dans le diagnose pour afficher le
statut des sauvegardes à l'aide de la fonction bacula_rapport_load de
pyeole/bacula.py.
Ref #3301
- 153-bacula : ne teste le support que si bacula-sd est activé
Ref #3301 @10m
History
#1 Updated by Emmanuel GARETTE over 11 years ago
s/Inconnue/Inconnu/
#2 Updated by Emmanuel GARETTE over 11 years ago
Si le catalogue est en erreur, la diode générale est encore verte. Il faudrait tester si les 2 sont verts.
#3 Updated by Joël Cuissinat over 11 years ago
- Target version set to Mises à jour 2.3.5 RC
- Estimated time set to 0.50 h
#4 Updated by Benjamin Bohard over 11 years ago
La classe status (zephir-client/zephir/monitor/agentmanager/status.py) surcharge la méthode cmp suivant la liste ordonnée croissante suivante : Unknown, OK, Warn, Error, Dependant. Une possibilité pour combiner plusieurs statuts consiste à prendre le max. Unknown n'est peut-être pas bien placé dans ce cas.
La fonction mesure calcule trois statuts différents : le statut de la sauvegarde principale, le statut de la sauvegarde du catalogue et le statut général combinant les deux premiers.
def measure(self): ret_svg = bacula_rapport_load('sauvegarde') ret_ctlg = bacula_rapport_load('catalogue') status_svg = {BACULA_RAPPORT_UNKNOWN: status.Unknown(), BACULA_RAPPORT_OK: status.OK(), BACULA_RAPPORT_ERR: status.Error()}.get(ret_svg[0]) status_ctlg = {BACULA_RAPPORT_UNKNOWN: status.Unknown(), BACULA_RAPPORT_OK: status.OK(), BACULA_RAPPORT_ERR: status.Error()}.get(ret_ctlg[0]) res = [{ 'status': status_svg, 'type': 'sauvegarde', 'comment': ret_svg[1]}, { 'status': status_ctlg, 'type': 'catalogue', 'comment': ret_ctlg[1]}] self.status = max(status_svg, status_ctlg) logger.error(str(self.status)) return {'statistics': res }
#5 Updated by Benjamin Bohard over 11 years ago
- Status changed from Nouveau to Résolu
#6 Updated by Joël Cuissinat over 11 years ago
- Assigned To set to Benjamin Bohard
- % Done changed from 0 to 100
<Icephale> je n'ai pas eu de souci avec mes tests <Icephale> il reste une question en suspend : l'ordre des statuts est-il adéquat ?
#7 Updated by Joël Cuissinat over 11 years ago
- Status changed from Résolu to Fermé
Test avec un chemin de support invalide :
- Zéphir => diode rouge :
Statut Type de sauvegarde Dernière sauvegarde Off sauvegarde Sauvegarde échouée le Wednesday 13 June 2012 à 15:06. Off catalogue Sauvegarde échouée le Wednesday 13 June 2012 à 15:06.
- diagnose :
. Montage du support => Erreur Statut des sauvegardes : . sauvegarde principale => Erreur : Sauvegarde échouée le mercredi 13 juin 2012 à 15:06. . sauvegarde catalogue => Erreur : Sauvegarde échouée le mercredi 13 juin 2012 à 15:06.