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

Source Code for Module zephir.monitor.agents.ldapscribe

  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 listant le contenu de l'annaire LDAP 
 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  
 16  from twisted.python import log 
 17  import ldap,time 
 18   
19 -class LdapScribe(Agent):
20
21 - def __init__(self, name, **params):
22 Agent.__init__(self, name, **params) 23 """ 24 Gestion du status : 25 par défaut : OK 26 Erreur si pas de connexion 27 Warning si erreur lors d'une ou plusieurs requêtes 28 """ 29 self.status = status.OK() 30 31 title1 = HTMLData("<h3>Nombre d'utilisateurs<h3>") 32 self.table1 = TableData([ 33 ('name', 'Utilisateurs', {'align':'center'}, None), 34 ('nb', 'Nombre' , {'align':'center'}, None) 35 ]) 36 37 title2 = HTMLData("<h3>Nombre de groupes<h3>") 38 self.table2 = TableData([ 39 ('name', 'Groupes', {'align':'center'}, None), 40 ('nb', 'Nombre' , {'align':'center'}, None) 41 ]) 42 43 title3 = HTMLData("<h3>Nombre de partages<h3>") 44 self.table3 = TableData([ 45 ('name', 'Partages', {'align':'center'}, None), 46 ('nb', 'Nombre' , {'align':'center'}, None) 47 ]) 48 self.data = [title1, self.table1, title2, self.table2, title3, self.table3]
49
50 - def measure(self):
51 try : 52 conn=ldap.open('localhost') 53 except : 54 self.status = status.Error() 55 return {'statistics1' : [], 'statistics2' : [], 'statistics3' : []} 56 57 # reset à chaque mesure 58 self.status = status.OK() 59 self.fail = 0 60 61 statistics1 = [] 62 nbeleves = self._requete(conn, "(&(objectclass=inetOrgPerson)(objectClass=Eleves))") 63 statistics1.append ( 64 { 'name' : 'Eleves', 65 'nb' : nbeleves 66 }) 67 nbprofs = self._requete(conn, "(&(objectclass=inetOrgPerson)(objectClass=administrateur))") 68 statistics1.append ( 69 { 'name' : 'Professeurs', 70 'nb' : nbprofs 71 }) 72 statistics1.append ( 73 { 'name' : self._color('Total'), 74 'nb' : self._color(self._add( (nbeleves, nbprofs) )) 75 }) 76 77 statistics2 = [] 78 nbniv = self._requete(conn,"(&(objectclass=sambaGroupMapping)(description=Niveau *))") 79 statistics2.append ( 80 { 'name' : 'Niveaux', 81 'nb' : nbniv 82 }) 83 nbcl = self._requete(conn,"(&(objectclass=sambaGroupMapping)(description=Classe *))") 84 statistics2.append ( 85 { 'name' : 'Classes', 86 'nb' : nbcl 87 }) 88 nbeq = self._requete(conn,"(&(objectclass=sambaGroupMapping)(description=Equipe *))") 89 statistics2.append ( 90 { 'name' : 'Equipes pédagogiques', 91 'nb' : nbeq 92 }) 93 nbmat = self._requete(conn,"(&(objectclass=sambaGroupMapping)(description=Matiere *))") 94 statistics2.append ( 95 { 'name' : 'Matières', 96 'nb' : nbmat 97 }) 98 nbtrav = self._requete(conn,"(&(objectclass=sambaGroupMapping)(|(description=Groupe *)(cn=eleves)(cn=professeurs)))") 99 statistics2.append ( 100 { 'name' : 'Groupes de travail', 101 'nb' : nbtrav 102 }) 103 nbspec = self._requete(conn,"(&(objectclass=sambaGroupMapping)(|(description=Administrateurs *)(cn=DomainComputers)(cn=DomainUsers)))") 104 statistics2.append ( 105 { 'name' : 'Groupes spéciaux', 106 'nb' : nbspec 107 }) 108 statistics2.append ( 109 { 'name' : self._color('Total'), 110 'nb' : self._color(self._add( (nbniv, nbcl, nbeq, nbmat, nbtrav, nbspec) )) 111 }) 112 113 statistics3 = [] 114 statistics3.append ( 115 { 'name' : self._color('Total'), 116 'nb' : self._color(self._requete(conn,"(objectclass=sambaFileShare)")) 117 }) 118 119 if self.fail >= 2 : 120 self.status = status.Warn() 121 122 return {'statistics1' : statistics1, 'statistics2' : statistics2, 'statistics3' : statistics3}
123 124
125 - def _requete(self, conn, filtre):
126 time.sleep(0.05) 127 try: 128 return len(conn.search_s("o=gouv,c=fr", ldap.SCOPE_SUBTREE, filtre, [''])) 129 except: 130 try: 131 # 2ème tentative 132 time.sleep(0.1) 133 return len(conn.search_s("o=gouv,c=fr", ldap.SCOPE_SUBTREE, filtre, [''])) 134 except Exception, e: 135 log.msg('erreur ldap : %s' % str(e)) 136 self.fail += 1 137 return '???'
138
139 - def _color(self, string):
140 return "<font color=\"red\">%s</font>" % string
141
142 - def _add (self, numbers) :
143 # addition qui renvoit ??? si erreur 144 total = 0 145 for i in numbers: 146 try : 147 total += i 148 except: 149 return '???' 150 return total
151
152 - def write_data(self):
153 Agent.write_data(self) 154 if self.last_measure is not None: 155 self.table2.table_data = self.last_measure.value['statistics2'] 156 self.table3.table_data = self.last_measure.value['statistics3'] 157 self.table1.table_data = self.last_measure.value['statistics1']
158
159 - def check_status(self):
160 return self.status
161