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