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

Source Code for Module zephir.monitor.agents.connexions

  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 de surveillance des connexions (ip conntrack) 
 11  """ 
 12   
 13  from twisted.python import log 
 14  from twisted.internet import defer 
 15  from twisted.internet.utils import getProcessOutput 
 16   
 17  from zephir.monitor.agentmanager.agent import Agent 
 18  from zephir.monitor.agentmanager import status 
 19  from zephir.monitor.agentmanager.data import HTMLData, TableData 
 20  from zephir.monitor.agentmanager.util import percent 
 21   
 22  from pyctd.conntracking import DataCollector 
 23  from pyctd.server import serializeConnectionSet 
 24   
 25  # IP protocol numbers (/usr/include/netinet/in.h) 
 26  IPPROTO_ICMP = 1 
 27  IPPROTO_TCP = 6 
 28  IPPROTO_UDP = 17 
 29  IPPROTO_SCTP = 132 
 30   
 31  # Python dictinnoary to convert IP protocol to string 
 32  IPPROTO_NAMES = { 
 33      IPPROTO_ICMP: "icmp", 
 34      IPPROTO_TCP: "tcp", 
 35      IPPROTO_UDP: "udp", 
 36      IPPROTO_SCTP: "sctp", 
 37  } 
 38   
39 -class Connexions(Agent):
40
41 - def __init__(self, name, 42 **params):
43 Agent.__init__(self, name, **params) 44 self.table = TableData([ 45 ('id', 'Id_cnx', {'align':'right'}, None), 46 ('proto', 'Protocole', {'align':'left'}, None), 47 # ('mark', 'Marquage', {'align':'left'}, None), 48 # ('user', 'Utilisateur', {'align':'left'}, None), 49 ('timeout', 'Timeout', {'align':'left'}, None), 50 # ('status', 'Etat', {'align':'left'}, None), 51 ('src', 'Source', {'align':'right'}, None), 52 ('dst', 'Destination', {'align':'right'}, None), 53 ('rate_in', 'Débit Entrant', {'align':'right'}, None), 54 ('rate_out', 'Débit Sortant', {'align':'right'}, None)]) 55 self.data = [self.table] 56 self.collector = None
57
58 - def measure(self):
59 if self.collector == None: 60 self.collector = DataCollector('conntrack') 61 self.collector.refresh() 62 # FIXME : utilser pyctd.server.serializeConnectionSet ? 63 # meas_data = serializeConnectionSet(self.collector.current) 64 meas_data = [] 65 ctdata = self.collector.current.dict 66 for id, conn in ctdata.items(): 67 conn_data = conn.conntrack 68 tuple = conn_data.tuple[0] 69 fields = {} 70 fields['id'] = id 71 fields['mark'] = conn_data.mark 72 fields['user'] = "" 73 fields['timeout'] = conn_data.timeout 74 fields['status'] = conn_data.status 75 fields['src'] = tuple.src.getIPv4().strNormal() 76 fields['dst'] = tuple.dst.getIPv4().strNormal() 77 # FIXME : affichage du protocole/ nom des champs (l4src, l4dst) 78 if t.protonum == IPPROTO_ICMP: 79 fields["l4src"] = int(t.l4src.icmp.id) 80 fields["l4dst"] = int(t.l4dst.icmp.type) 81 else: 82 fields["l4src"] = int(ntohs(t.l4src.getValue(tuple.protonum))) 83 fields["l4dst"] = int(ntohs(t.l4dst.getValue(tuple.protonum))) 84 fields['proto'] = "%s/%s" % (fields["l4src"],fields["l4dst"]) 85 # fields['proto'] = tuple.protonum 86 # FIXME : afficher en % de la b.p disponible 87 # ou en % par rapport à l'ensemble des connexions ? 88 fields['rate_in'] = float(conn.byterate[0]) 89 fields['rate_out'] = float(conn.byterate[1]) 90 meas_data.append(fields) 91 return {'statistics': meas_data}
92
93 - def check_status(self):
94 stat = status.OK() 95 return stat
96
97 - def save_measure(self, measure):
98 Agent.save_measure(self, measure) 99 self.last_measure = measure
100
101 - def write_data(self):
102 Agent.write_data(self) 103 if self.last_measure is not None: 104 self.table.table_data = self.last_measure.value['statistics']
105