Package zephir :: Package monitor :: Module collecteur
[hide private]
[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