1
2
3
4
5
6
7
8
9 """
10 Agent zephir pour l'étude des Statistiques Exim
11 """
12
13 from zephir.monitor.agentmanager.agent import Agent
14 from zephir.monitor.agentmanager.data import HTMLData, TableData
15 from twisted.internet.utils import getProcessOutput
16 from zephir.monitor.agentmanager import status
17 from os.path import isfile
18
19
22 Agent.__init__(self, name, **params)
23 self.status = status.OK()
24 title1 = HTMLData("<h3>Etat du trafic<h3>")
25 self.table = TableData([
26 ('label', '', {'align':'center'}, None),
27 ('quantity', 'Volume de données', {'align':'center'}, None),
28 ('number', 'Nombre de messages', {'align':'center'}, None),
29 ])
30 title2 = HTMLData("<h3>Erreurs<h3>")
31 self.table2 = TableData([
32 ('label', '', {'align':'center'}, None),
33 ('value', 'Valeur', {'align':'center'}, None),
34 ])
35 self.tdate = TableData([
36 ('date', 'Période de mesure', {'align':'center'}, None),
37 ])
38 self.data = [self.tdate, title1, self.table, title2, self.table2]
39
50
52 """Utilisation de la commande eximstats"""
53 """eximstats -nt -h0 -tnl -t0 -nr -nvr -q60 /var/log/exim4/mainlog"""
54 args = ['-nt', '-h0', '-tnl', '-t0', '-nr', '-nvr', '-q60']
55
56 f_log1 = '/var/log/exim4/mainlog'
57 f_log2 = '/var/log/exim4/mainlog.01'
58
59 if not isfile(f_log1) and not isfile(f_log2) :
60
61 return self.no_measure()
62
63 if isfile(f_log1) :
64 args.append(f_log1)
65 if isfile(f_log2) :
66 args.append(f_log2)
67
68 res = getProcessOutput("/usr/sbin/eximstats",
69 args = args,
70 env = {'LC_ALL': 'C'})
71
72 res.addCallback(self.measure_process)
73 return res
74
75
77
78 res1 = []
79 res2 = []
80 date = []
81 Queue = False
82 if result.startswith('****'):
83
84 return self.no_measure()
85 for ligne in result.splitlines():
86
87 if ligne.startswith('Errors encountered:') :
88
89
90 res2.insert (0, {'label' : 'Nombre d\'erreurs', 'value' : ligne[20:]} )
91 if ligne.startswith('Exim statistics from') :
92 l = ligne.split()
93 deb = l[3].split('-')
94 fin = l[6].split('-')
95 date.append ({'date' : 'du %s/%s/%s au %s/%s/%s' % (deb[2],deb[1],deb[0],fin[2],fin[1],fin[0])})
96
97 elif ligne.startswith(' Received '):
98 l = ligne.split()
99 res1.append ({'label' : 'Réception', 'quantity' : self._format_quantity(l[1]), 'number' : l[2] })
100 res2.append ({'label' : 'Pourcentage de mails en attente', 'value' : l[5] })
101 res2.append ({'label' : 'Pourcentage de mails en erreur', 'value' : l[7] })
102
103
104 elif ligne.startswith(' Delivered'):
105 l = ligne.split()
106 res1.append ({'label' : 'Envoi', 'quantity' : self._format_quantity(l[1]), 'number' : l[2] })
107
108
109 elif ligne.startswith('Under 1m') and Queue==False:
110
111
112 Queue = True
113 l = ligne.split()
114 res2.insert (0, {'label' : 'Mails ayant passé plus de 1 minute en queue',
115 'value' : '%.1f%%' % ( float(100) - float(l[3][:-1]) ) })
116
117 return { 'statistics' : res1,
118 'statistics2' : res2,
119 'statdate' : date
120 }
121
122
124 return { 'statistics' : [{'label' : '', 'quantity' : '0', 'number' : '0'}],
125 'statistics2' : [{'label' : '', 'value' : '---'}],
126 'statdate' : [{'date' : '---' }],
127 }
128
129
131 Agent.write_data(self)
132 if self.last_measure is not None:
133 self.table.table_data = self.last_measure.value['statistics']
134 self.table2.table_data = self.last_measure.value['statistics2']
135 self.tdate.table_data = self.last_measure.value['statdate']
136
139