zephir.monitor.agents.ldaphorus

Package zephir :: Package monitor :: Package agents :: Module ldaphorus |
[frames] | no frames]

# Source Code for Module zephir.monitor.agents.ldaphorus

     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 zephir.monitor.agentmanager.util import log
    17  import ldap,time
    18
    19 -class LdapHorus(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', '', {'align':'left'}, None),
    34             ('nb', '' , {'align':'center'}, None)
    35          ])
    36
    37          self.data = [self.table1]
    38
    39 -    def measure(self):
    40          try :
    41              conn=ldap.open('localhost')
    42          except :
    43              self.status = status.Error()
    44              return {'statistics1' : []}
    45
    46          self.status = status.OK()
    47          self.fail = 0
    48
    49          statistics1 = []
    50          statistics1.append (
    51              { 'name' : 'Nombre d\'utilisateurs',
    52                'nb'   : self._requete(conn, "(objectclass=inetOrgPerson)")
    53              })
    54          statistics1.append (
    55              { 'name' : 'Nombre de groupes',
    56                'nb'   : self._requete(conn, "(objectClass=posixGroup)")
    57              })
    58          statistics1.append (
    59              { 'name' : 'Nombre de partages',
    60                'nb'   : self._requete(conn,"(objectClass=sambaFileShare)")
    61              })
    62          statistics1.append (
    63              { 'name' : 'Nombre de postes',
    64                'nb'   : self._requete(conn,"(&(objectclass=posixAccount)(description=Computer))")
    65              })
    66
    67          if self.fail >= 2 :
    68              self.status = status.Warn()
    69
    70          return {'statistics1' : statistics1}
    71
    72
    73 -    def _requete(self, conn, filtre):
    74          time.sleep(0.05)
    75          try:
    76              return len(conn.search_s("o=gouv,c=fr", ldap.SCOPE_SUBTREE, filtre, ['']))
    77          except:
    78              try:
    79                  # 2ème tentative
    80                  time.sleep(0.1)
    81                  return len(conn.search_s("o=gouv,c=fr", ldap.SCOPE_SUBTREE, filtre, ['']))
    82              except Exception, e:
    83                  log.msg('erreur ldap : %s' % str(e))
    84                  self.fail += 1
    85                  return '???'
    86
    87 -    def _color(self, string):
    88          return "<font color=\"red\">%s</font>" % string
    89
    90 -    def write_data(self):
    91          Agent.write_data(self)
    92          if self.last_measure is not None:
    93              self.table1.table_data = self.last_measure.value['statistics1']
    94
    95 -    def check_status(self):
    96          return self.status
    97