1
2
3
4
5
6
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: _
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
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
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
79 t = ServerPageTmpl()
80 t.static_base = self.config['static_base_url']
81 t.clients = self.manager.keys()
82 return str(t)
83
84
86 """Liste des agents d'un client Zephir."""
87
88 - def __init__(self, config, manager, client_name):
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
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
110 t.hostname = "Zephir - serveur %s" % self.client_name
111 t.description = t.hostname
112 else:
113
114
115 t.hostname = socket.gethostname().capitalize()
116 t.description = t.hostname + module
117
118 t.manager = self.manager
119 return str(t)
120
121
123 """Présentation des données mesurées par un agent."""
124
125 - def __init__(self, config, agent_manager, agent_name, client_name):
132
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)
141
142
143
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
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
159 t.hostname = "%s - Zephir - serveur %s" % (descr, self.client_name)
160 t.description = t.hostname
161 else:
162
163
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)
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
185
186
187
188
189
190
191
192
193