zephir.monitor.collecteur

Package zephir :: Package monitor :: Module collecteur |
[frames] | no frames]

# Source Code for Module zephir.monitor.collecteur

      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  # collecteur.py
      9  #
     10  # Récupère les fichiers xml d'un répertoire d'un serveur
     11  #
     12  ###########################################################################
     13
     14  import os
     15
     16  from twisted.persisted import dirdbm
     17
     18  from zephir.config import PATH_ZEPHIR
     19  from zephir.monitor import xmlite
     20
     21 -class AgentCollecteur:
     22      """Concerne les informations de type *tableau de bord* de tous les agents sur un serveur
     23      """
     24 -    def __init__(self, id_serveur):
     25          self.id_serveur = id_serveur
     26          xml_dir = PATH_ZEPHIR + 'sites/' + str(self.id_serveur) + "/xml/"
     27          list_xml = os.listdir(xml_dir)
     28          self.xml_name_list = []
     29          for fic in list_xml:
     30              if fic.endswith('.xml'):
     31                  self.xml_name_list .append(xml_dir+fic)
     32
     33          # construction de l'arborescence dirdbm
     34          self.shelf = self._make_dirdbm()
     35
     36          # pickle
     37          self._serveur_pickle()
     38
     39
     40 -    def _make_dirdbm(self):
     41          """Construis l'arborescence dirdbm pour le serveur
     42          si elle n'existe pas encore
     43          """
     44          self.dirdbm_path = PATH_ZEPHIR + "sites/" + str(self.id_serveur) + "/dirdbm"
     45          if os.path.isdir(self.dirdbm_path):
     46              pass
     47          else :
     48              os.makedirs(self.dirdbm_path)
     49
     50          return dirdbm.Shelf(self.dirdbm_path)
     51
     52
     53 -    def get_agent_info(self, xml_name):
     54          """Récupère les attributs de la balise agent
     55          """
     56          l = xmlite.load(xml_name)
     57          # dictionnaire des attributs de la balise agent
     58          attrs = l[1][1]
     59
     60          return attrs['nom'], attrs['description'], attrs['status'], attrs['date']
     61
     62 -    def get_serveur(self) :
     63          """Récupère les informations de type tableau de bord pour un serveur
     64          """
     65          l = []
     66          for xml_name in self.xml_name_list:
     67              l.append(self.get_agent_info(xml_name))
     68
     69          return l
     70
     71 -    def _serveur_pickle(self):
     72          """Persistence d'un serveur dans une arborescence dirDBM
     73          """
     74          for l in self.get_serveur():
     75              self.shelf[l[0]] = (l[1], l[2], l[3])
     76
     77
     78 -class ServeurStatus:
     79      """Statut d'un serveur et récupération des informations
     80      # FIXME
     81      """
     82 -    def __init__(self, id_serveur):
     83          self.id_serveur = id_serveur
     84          self.dirdbm_path = PATH_ZEPHIR + "sites/" + str(self.id_serveur) + "/dirdbm"
     85          self.shelf = dirdbm.Shelf(self.dirdbm_path)
     86          self.data = self._serveur_unpickle()
     87
     88 -    def _serveur_unpickle(self):
     89          """Les informations pour le tableau de bord
     90          """
     91          d = {}
     92          for agent_name in self.shelf.keys():
     93              d[agent_name] = self.shelf[agent_name]
     94
     95          return d
     96
     97 -    def get_status(self):
     98          """Un statut pour le serveur dans son ensemble
     99          """
    100          for l in self.data.values():
    101              if int(l[1]) == 0:
    102                  return 0
    103          return 1
    104
    105 -    def get_agents_status(self):
    106          """etat d'un agent particulier
    107          """
    108          return self.data
    109
    110
    111  if __name__ == "__main__":
    112      # AgentCollecteur("abcdef")
    113      # print ServeurStatus("abcdef").get_status()
    114      pass
    115