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

Source Code for Module zephir.monitor.agents.tcpservices

 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  Agent zephir pour les services TCP 
11  """ 
12   
13  from twisted.python import log 
14  from twisted.internet import defer 
15  from twisted.internet.utils import getProcessOutput, getProcessValue 
16   
17  from zephir.monitor.agentmanager.agent import Agent 
18  from zephir.monitor.agentmanager.data import HTMLData, TableData 
19  from zephir.monitor.agentmanager.util import status_to_img 
20  from zephir.monitor.agentmanager import status 
21   
22   
23 -def compare_hostports(hp1, hp2):
24 h1, p1 = hp1.split(':') 25 h2, p2 = hp2.split(':') 26 result = cmp(h1, h2) # alpha comparison on hosts 27 if result != 0: 28 return result 29 else: # numeric comparison on ports 30 return cmp(int(p1), int(p2))
31 32
33 -class TCPServices(Agent):
34
35 - def __init__(self, name, 36 tcp_services, # dict {"host:port": "comment"} 37 **params):
38 Agent.__init__(self, name, **params) 39 self.tcp_services = tcp_services 40 self.table = TableData([ 41 ('description', "Description", {'align':'left'}, None), 42 ('status', "état", {'align':'center'}, status_to_img), 43 ('stats', "Historique", {'align':'left'}, None), 44 ('host', "Hôte", {'align':'left'}, None), 45 ('port', "Port", {'align':'left'}, None), 46 ]) 47 self.data = [self.table]
48 49
50 - def measure(self):
51 mesures = [] 52 try: 53 # recherche de l'identifiant zephir 54 # (nécessaire pour l'url du graphe de status des 'sous agents') 55 from zephir.zephir_conf.zephir_conf import id_serveur 56 except: 57 # si on est pas enregistré : 0 58 id_serveur = 0 59 60 for service in self.tcp_services: 61 if self.manager.agents.has_key(service): 62 serv_agent = self.manager.agents[service] 63 if serv_agent.last_measure is not None: 64 status = serv_agent.last_measure.value['services'][0]['status'] 65 description = serv_agent.last_measure.value['services'][0]['description'] 66 mesures.append({ 'description': description, 67 'host': serv_agent.last_measure.value['services'][0]['host'], 68 'port': serv_agent.last_measure.value['services'][0]['port'], 69 'status': status, 70 'stats': '<img src=/agents/%s/%s/status.png alt="Historique (%s)"/>' % (id_serveur,service,service)}) 71 self.measure_data[service]=[status,description] 72 else: 73 mesures.append({ 'description': service, 74 'host': '', 75 'port': '', 76 'status': '', 77 'stats': ''}) 78 return {'services': mesures}
79 80
81 - def write_data(self):
82 Agent.write_data(self) 83 if self.last_measure is not None: 84 self.table.table_data = self.last_measure.value['services']
85 86
87 - def check_status(self):
88 """remonte une erreur si un des services est tombé""" 89 if self.last_measure is not None: 90 for service in self.last_measure.value['services']: 91 if service['status'] == 'Off': 92 return status.Error() 93 else: 94 # pas de mesure connue 95 return status.Unknown() 96 return status.OK()
97