Package zephir :: Package monitor :: Package agentmanager :: Module web_resources
[hide private]
[frames] | no frames]

Source Code for Module zephir.monitor.agentmanager.web_resources

  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  Ressources implémentant les pages du site web de consultation des 
 11  agents. 
 12   
 13  Hiérarchie du site : 
 14   
 15   - C{./} : liste des clients (C{ZephirServerResource}) 
 16   
 17   - C{./I{client}/} : liste des agents (C{ZephirClientResource}) 
 18    
 19   - C{./I{client}/I{agent}/ : détails de l'agent (C{AgentResource}) 
 20   
 21   - C{./I{client}/I{agent}/... : n'importe quel fichier dans le 
 22     C{public_data_dir} de l'agent 
 23  """ 
 24   
 25  try: _ # localized string fetch function 
 26  except NameError: _ = str 
 27   
 28  import os, dircache, socket 
 29  from twisted.web.resource import Resource 
 30  from twisted.web import error, server, static, util 
 31  from twisted.web.util import Redirect 
 32  from twisted.python import log 
 33   
 34  from Cheetah.Template import Template 
 35   
 36  from zephir.monitor.agentmanager import config as cfg 
 37  from zephir.monitor.agentmanager.agent import AgentData 
 38  from zephir.monitor.agentmanager.data import * 
 39  from zephir.monitor.agentmanager import agentdatamanager 
 40  from zephir.monitor.agentmanager.templates.AgentPageTmpl import AgentPageTmpl 
 41  from zephir.monitor.agentmanager.templates.ManagerPageTmpl import ManagerPageTmpl 
 42  from zephir.monitor.agentmanager.templates.ServerPageTmpl import ServerPageTmpl 
 43  from zephir.monitor.agentmanager.templates.FileDataTmpl import FileDataTmpl 
 44  from zephir.monitor.agentmanager.templates.RRDFileDataTmpl import RRDFileDataTmpl 
 45  from zephir.monitor.agentmanager.templates.ImgFileDataTmpl import ImgFileDataTmpl 
 46  from zephir.monitor.agentmanager.templates.HTMLDataTmpl import HTMLDataTmpl 
 47  from zephir.monitor.agentmanager.templates.MeasuresDataTmpl import MeasuresDataTmpl 
 48  from zephir.monitor.agentmanager.templates.TableDataTmpl import TableDataTmpl 
 49   
 50   
 51  if os.path.isfile('/etc/eole/version'): 
 52      mod_file = open('/etc/eole/version') 
 53      module = " (" + mod_file.read().split('\n')[0] + ")" 
 54      mod_file.close() 
 55  else: 
 56      module="" 
 57   
 58   
59 -class ZephirServerResource(Resource):
60 """Liste de clients attachés à un serveur Zephir. 61 62 Présente la liste des répertoires de données remontés par les 63 clients. 64 """ 65
66 - def __init__(self, config, manager):
67 Resource.__init__(self) 68 self.config = config 69 self.manager = manager
70
71 - def getChild(self, client_name, request):
72 if client_name == "": 73 return self 74 elif self.manager.has_key(client_name): 75 return ZephirClientResource(self.config, self.manager[client_name], client_name) 76 else: 77 return Redirect('/sites/%s/site/' % client_name)
78
79 - def render_GET(self, request):
80 t = ServerPageTmpl() 81 t.static_base = self.config['static_base_url'] 82 t.clients = self.manager.keys() 83 return str(t)
84 85
86 -class ZephirClientResource(Resource):
87 """Liste des agents d'un client Zephir.""" 88
89 - def __init__(self, config, manager, client_name):
90 Resource.__init__(self) 91 self.config = config 92 self.manager = manager 93 self.client_name = client_name 94 self.show_clients = self.manager.__class__ is not agentdatamanager.LiveAgentsManager
95
96 - def getChild(self, agent_name, request):
97 if agent_name == "": 98 return self 99 elif self.manager.has_key(agent_name): 100 return AgentResource(self.config, self.manager, agent_name, self.client_name) 101 else: 102 return error.NoResource(_("No such agent"))
103
104 - def render_GET(self, request):
105 t = ManagerPageTmpl() 106 t.static_base = self.config['static_base_url'] 107 t.host = self.client_name 108 t.show_clients = self.show_clients 109 if module.startswith(" (zephir") and str(self.client_name) != '0': 110 # affichage du numéro de serveur dans zephir 111 t.description = "Zephir - serveur %s" % self.client_name 112 else: 113 # récupération hostname 114 # dans le cas d'une machine cible (!= zephir), on affiche le hostname et le module 115 t.description = socket.gethostname().capitalize() + module 116 #t.host = self.config['host_ref'] 117 t.manager = self.manager # name => agent pour un client donné 118 return str(t)
119 120
121 -class AgentResource(Resource):
122 """Présentation des données mesurées par un agent.""" 123
124 - def __init__(self, config, agent_manager, agent_name, client_name):
125 Resource.__init__(self) 126 self.config = config 127 self.client_name = client_name 128 self.agent_manager = agent_manager 129 self.agent_name = agent_name 130 self.show_clients = self.agent_manager.__class__ is not agentdatamanager.LiveAgentsManager
131
132 - def getChild(self, name, request):
133 agent = self.agent_manager[self.agent_name] 134 path = os.path.join(cfg.agent_data_dir(self.config, self.agent_manager.client_name, self.agent_name), 135 name) 136 if name == "": 137 return self 138 else: 139 return static.File(path) # could make only one for the whole state_dir
140 # """ignore la sous-arborescence""" 141 # return self 142
143 - def render_GET(self, request):
144 agent = self.agent_manager[self.agent_name] 145 agent.ensure_data_uptodate() 146 t = AgentPageTmpl() 147 t.static_base = self.config['static_base_url'] 148 t.show_clients = self.show_clients 149 t.host = self.client_name 150 # t.host = self.config['host_ref'] 151 t.agent = agent 152 if agent.description not in (None, ''): 153 descr = agent.description 154 else: 155 descr = agent.name 156 if module.startswith(" (zephir") and str(self.client_name) != '0': 157 # affichage du numéro de serveur dans zephir 158 t.description = "%s - Zephir - serveur %s" % (descr, self.client_name) 159 else: 160 # récupération hostname 161 # dans le cas d'une machine cible (!= zephir), on affiche le hostname et le module 162 t.description = descr + ' - ' + socket.gethostname().capitalize() + module 163 t.template_for_data = lambda d: DATA_TO_TEMPLATE_MAPPING[d.__class__]() 164 t.template_mapping = DATA_TO_TEMPLATE_MAPPING 165 return str(t) # deferred stuff because of data generation ?
166 167 168 169 DATA_TO_TEMPLATE_MAPPING = { 170 FileData: FileDataTmpl, 171 RRDFileData: RRDFileDataTmpl, 172 ImgFileData: ImgFileDataTmpl, 173 HTMLData: HTMLDataTmpl, 174 MeasuresData: MeasuresDataTmpl, 175 TableData: TableDataTmpl, 176 } 177
178 -def template_for_data(data):
179 """Renvoie le template Cheetah correspondant à un élément de 180 données.""" 181 return DATA_TO_TEMPLATE_MAPPING[data.__class__]()
182 183 184 185 # def test_main(): 186 # test_support.run_unittest(UserStringTest) 187 188 # if __name__ == "__main__": 189 # test_main() 190