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

Source Code for Module zephir.monitor.agents.crl

 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 la surveillance de la crl agriates 
11  """ 
12   
13  from zephir.monitor.agentmanager.agent import Agent 
14  from zephir.monitor.agentmanager.data import HTMLData, TableData 
15  from zephir.monitor.agentmanager import status, util 
16  from twisted.internet.utils import getProcessOutput 
17  import datetime 
18  from creole import parsedico 
19   
20 -class Crl(Agent):
21 - def __init__(self, name, **params):
22 Agent.__init__(self, name, **params) 23 self.status = status.OK() 24 self.table = TableData([ 25 ('expire', "Date d'expiration", {'align':'left'}, None), 26 ]) 27 title = HTMLData("<h3>Surveillance de la CRL</h3>") 28 self.data = [title, self.table]
29
30 - def measure(self):
31 d = parsedico.parse_dico() 32 if d['vpn_mode'] != 'pki': 33 self.status = status.OK('Mode clef') 34 return [{'expire':'mode clef'}] 35 else: 36 self.status = status.OK() 37 cmd = "/usr/sbin/ipsec" 38 args = ["listcrls"] 39 update = getProcessOutput(cmd, args) 40 return update.addCallbacks(self.callback_expire, self.errback_expire)
41
42 - def callback_expire(self, response):
43 # récupération de la date 44 expire = "" 45 for line in response.split('\n'): 46 line = line[3:].strip() 47 if line.startswith('next'): 48 expire = line.split()[1:5] 49 expire = " ".join(expire) 50 # transformation en datetime 51 if expire == "": 52 self.status = status.Warn("date d'invalidation non trouvée") 53 return [{'expire':"ipsec listcrls ne renvoie pas de date d'invalidation de la crl" }] 54 expdate = util.parse_date(expire) 55 # calcul de la date avant laquelle on est en warning (expiration - 20 minutes) 56 warn_delta = datetime.timedelta(seconds=60*20) 57 warndate = expdate - warn_delta 58 date = datetime.datetime.utcnow() 59 if date > expdate: 60 msg = "expiration de la CRL" 61 self.status = status.Error(msg) 62 else: 63 delta = expdate - date 64 minutes = (delta.days*3600*24 + delta.seconds) / 60 65 if date > warndate: 66 self.status=status.Warn("Expiration dans %s minutes" % minutes) 67 return [{'expire': expdate.strftime('%d %b %Y %H:%M:%S')}]
68
69 - def errback_expire(self, err):
70 msg = u"erreur de lecture de la date d'expiration" 71 self.status = status.Warn(msg) 72 return None
73
74 - def write_data(self):
75 Agent.write_data(self) 76 if self.last_measure is not None: 77 self.table.table_data = self.last_measure.value
78
79 - def check_status(self):
80 return self.status
81