Package zephir :: Package monitor :: Package agents :: Module nut
[hide private]
[frames] | no frames]

Source Code for Module zephir.monitor.agents.nut

 1  # -*- coding: UTF-8 -*- 
 2  ########################################################################### 
 3  # Eole NG - 2007 
 4  # Copyright Pole de Competence Eole  (Ministere Education - Academie Dijon) 
 5  # Licence CeCill  cf /root/LicenceEole.txt 
 6  # eole@ac-dijon.fr 
 7  ########################################################################### 
 8   
 9  """ 
10  Surveillance d'un onduleur géré par nut 
11  Nécessite un test préliminaire normalement réalisé dans la conf 
12  """ 
13   
14  from zephir.monitor.agentmanager.agent import Agent 
15  from zephir.monitor.agentmanager.data import HTMLData, TableData 
16  from zephir.monitor.agentmanager import status 
17  from twisted.internet.utils import getProcessOutput 
18   
19 -class Nut(Agent):
20 - def __init__(self, name, monitor, **params):
21 Agent.__init__(self, name, **params) 22 # monitor : nom de l'onduleur à surveiller (ex : ondul@localhost) 23 self.monitor = monitor 24 self.status = status.OK() 25 self.table = TableData([ 26 ('label', '', {'align':'center'}, None), 27 ('value', 'Valeur', {'align':'center'}, None) 28 ]) 29 title = HTMLData("<h3>Surveillance de l'onduleur : <i>%s</i></h3>"%self.monitor) 30 self.data = [title, self.table]
31
32 - def measure(self):
33 self.status = status.OK() 34 35 res = getProcessOutput('/bin/upsc', 36 args = [self.monitor], 37 env = {'LC_ALL': 'C'}) 38 res.addCallback(self.measure_process) 39 res.addErrback(self.error) 40 return res
41
42 - def measure_process(self, result):
43 l = [] 44 for line in result.splitlines(): 45 data = line.split(':') 46 if data[0].strip() == 'ups.status': 47 ups_status = data[1].strip() 48 if data[0].strip() == 'battery.charge': 49 if float(data[1].strip()) > 100: 50 # bug du genre 750 au lieu de 75 ! 51 data[1] = str(float(data[1])/10) 52 ups_charge = data[1].strip() 53 l.append({'label':data[0], 'value':data[1]}) 54 # ETAT (statut != "On Line") 55 if ups_status != 'OL': 56 if float(ups_charge) < 20: 57 self.status = status.Error("Charge batterie Faible") 58 else: 59 self.status = status.Warn("Fonctionnement sur batterie") 60 return { 'statistics' : l}
61
62 - def error(self, result):
63 self.status = status.Error() 64 return { 'statistics' : [{'label':'Erreur', 'value':"""Echec de la connexion à l'onduleur"""}]}
65
66 - def write_data(self):
67 Agent.write_data(self) 68 if self.last_measure is not None: 69 self.table.table_data = self.last_measure.value['statistics']
70
71 - def check_status(self):
72 return self.status
73