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

Source Code for Module zephir.monitor.agents.network

  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 cartes réseau 
 11  """ 
 12   
 13  import os 
 14  from twisted.python import log 
 15  from twisted.internet import defer 
 16  from twisted.internet.utils import getProcessOutput, getProcessValue 
 17   
 18  from zephir.monitor.agentmanager.agent import Agent 
 19  from zephir.monitor.agentmanager.data import HTMLData, TableData 
 20  from zephir.monitor.agentmanager.util import status_to_img, boolean_to_onoff 
 21  from zephir.monitor.agentmanager import status 
 22   
 23  NETWORK_CHECK = '/usr/sbin/fping' 
 24   
25 -class Network(Agent):
26
27 - def __init__(self, name, 28 **params):
29 Agent.__init__(self, name, **params) 30 self.table = TableData([ 31 ('status', "état", {'align':'center'}, status_to_img), 32 ('interf', "Interface", {'align':'left'}, None), 33 ]) 34 self.data = [self.table]
35 36
37 - def measure(self):
38 self.mesures = [] 39 # on regarde si le vpn est activé 40 cmd_rvp = "/usr/share/eole/test-rvp" 41 if os.path.exists(cmd_rvp): 42 return self.measure_rvp(cmd_rvp) 43 else: 44 return self.measure_network()
45
46 - def measure_rvp(self,cmd_rvp):
47 # test vpn 48 if not os.path.isfile('/var/lock/rvp'): 49 status_rvp = 'Off' 50 self.mesures.append({ 'interf': 'ipsec', 51 'status': status_rvp }) 52 return self.measure_network() 53 else: 54 update = getProcessOutput(cmd_rvp, args=[]) 55 return update.addCallbacks(self.callback_rvp, self.errback_rvp)
56
57 - def callback_rvp(self, data):
58 status_rvp = 'On' 59 if 'alive' not in data: 60 status_rvp = 'Off' 61 self.mesures.append({ 'interf': 'ipsec', 62 'status': status_rvp }) 63 self.measure_data['ipsec'] = status_rvp 64 # tests à effectuer avec tcpcheck 65 return self.measure_network()
66
67 - def errback_rvp(self, err):
68 self.mesures.append({ 'interf': 'ipsec', 69 'status': 'Off' }) 70 self.measure_data['ipsec'] = 'Off' 71 # tests à effectuer avec tcpcheck 72 return self.measure_network()
73
74 - def measure_network(self):
75 # on détermine les interfaces à tester 76 from creole.parsedico import parse_dico 77 from ifconfig import ifconfig 78 d = parse_dico() 79 ic = ifconfig() 80 # affiche seulement les interfaces ok (sans réslolution DNS) 81 options = ['-a','-A','-q'] 82 self.interfaces = {} 83 for var, value in d.items(): 84 if var.startswith('adresse_ip_eth') and value != "": 85 self.interfaces[var[var.index('eth'):]] = ic.getStatus(var[var.index('eth'):]) 86 if var.startswith('adresse_ip_int') and value != "": 87 self.interfaces['eth'+var[-1]] = ic.getStatus('eth'+var[-1]) 88 interfaces = self.interfaces.keys() 89 interfaces.sort() 90 for interf in interfaces: 91 self.mesures.append({'interf': interf, 92 'status': boolean_to_onoff(self.interfaces[interf]) }) 93 self.measure_data[interf] = boolean_to_onoff(self.interfaces[interf]) 94 return {'networks': self.mesures}
95 96
97 - def write_data(self):
98 Agent.write_data(self) 99 if self.last_measure is not None: 100 self.table.table_data = self.last_measure.value['networks']
101 102
103 - def check_status(self):
104 """remonte une erreur si un des services est tombé""" 105 if self.last_measure is not None: 106 for service in self.last_measure.value['networks']: 107 if service['status'] != 'On': 108 return status.Error() 109 else: 110 # pas de mesure connue 111 return status.Unknown() 112 return status.OK()
113