1
2
3
4
5
6
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
20
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
51 try :
52 conn=ldap.open('localhost')
53 except :
54 self.status = status.Error()
55 return {'statistics1' : [], 'statistics2' : [], 'statistics3' : []}
56
57
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
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
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
140 return "<font color=\"red\">%s</font>" % string
141
142 - def _add (self, numbers) :
143
144 total = 0
145 for i in numbers:
146 try :
147 total += i
148 except:
149 return '???'
150 return total
151
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
161