1
2
3
4
5
6
7
8
9 """
10 Agent zephir pour les cartes réseau
11 """
12
13 import os
14 from ifconfig import ifconfig
15 from creole.parsedico import parse_dico
16 from twisted.internet.utils import getProcessValue
17 from zephir.monitor.agentmanager import status
18 from zephir.monitor.agentmanager.agent import Agent
19 from zephir.monitor.agentmanager.data import TableData
20 from zephir.monitor.agentmanager.util import status_to_img, boolean_to_onoff
21 from zephir.monitor.agentmanager.util import log
22
24
27 Agent.__init__(self, name, **params)
28 self.table = TableData([
29 ('status', "état", {'align':'center'}, status_to_img),
30 ('interf', "Interface", {'align':'left'}, None),
31 ])
32 self.data = [self.table]
33 self.dico = parse_dico()
34
36 self.mesures = []
37
38 bin_ipsec = "/usr/sbin/ipsec"
39 if os.path.exists(bin_ipsec) and self.dico.get('install_rvp', 'non') == 'oui':
40 if self.dico.get('activer_haute_dispo', 'non') == 'non':
41
42 return self.measure_rvp(bin_ipsec)
43 else:
44
45 cmd = "ip route|grep default|grep -q src"
46 errcode = os.system(cmd)
47 if errcode == 0:
48
49 return self.measure_rvp(bin_ipsec)
50 else:
51
52 return self.measure_network()
53 else:
54 return self.measure_network()
55
60
62
63 status_ipsec = 'On'
64 if data != 0:
65 status_ipsec = 'Off'
66 self.mesures.append({ 'interf': 'ipsec',
67 'status': status_ipsec })
68 self.measure_data['ipsec'] = status_ipsec
69 return self.measure_network()
70
72 log.msg('agent network : erreur, ipsec arrêté : ')
73 self.mesures.append({ 'interf': 'ipsec',
74 'status': 'Off' })
75 self.measure_data['ipsec'] = 'Off'
76 return self.measure_network()
77
79 """
80 test des interfaces réseau
81 """
82 d = self.dico
83 ic = ifconfig()
84
85 try:
86 options = ['-a', '-A', '-q']
87 interfaces = {}
88 index_int = 0
89 nb_int = d.get('nombre_interfaces', None)
90 search = True
91 while search:
92 if nb_int and (index_int >= int(nb_int)):
93 search = False
94 elif ('eth%d_method' % index_int in d) and (d['eth%d_method' % index_int] == 'dhcp'):
95 pass
96 elif ('adresse_ip_eth%d' % index_int in d) and (d['adresse_ip_eth%d' % index_int] != ''):
97 pass
98 else:
99 search = False
100 if search:
101 try:
102 interfaces['eth%d' % index_int] = ic.getStatus('eth%d' % index_int)
103 except:
104 import traceback
105 traceback.print_exc()
106 interfaces['eth%d' % index_int] = False
107 index_int += 1
108
109 interfaces_keys = interfaces.keys()
110 interfaces_keys.sort()
111 if 'adresse_ip_dmz' in d:
112 interfaces['dmz'] = ic.getStatus('dmz')
113 interfaces_keys.append('dmz')
114 for interf in interfaces_keys:
115 self.mesures.append({'interf': interf,
116 'status': boolean_to_onoff(interfaces[interf])})
117 self.measure_data[interf] = boolean_to_onoff(interfaces[interf])
118 except:
119 import traceback
120 traceback.print_exc()
121 return {'networks': self.mesures}
122
124 Agent.write_data(self)
125 if self.last_measure is not None:
126 self.table.table_data = self.last_measure.value['networks']
127
129 """remonte une erreur si un des services est tombé"""
130 if self.last_measure is not None:
131 for service in self.last_measure.value['networks']:
132 if service['status'] != 'On':
133 return status.Error()
134 else:
135
136 return status.Unknown()
137 return status.OK()
138