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 configobj import ConfigObj
30 from twisted.web.resource import Resource, NoResource
31 from twisted.web import error, server, static, util
32 from twisted.web.util import Redirect
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 try:
51 config_mod = ConfigObj("/etc/eole/release")
52 module = " (%s-%s)" % (config_mod['EOLE_MODULE'], config_mod['EOLE_VERSION'])
53 except:
54 module = ""
55
56
58 """Liste de clients attachés à un serveur Zephir.
59
60 Présente la liste des répertoires de données remontés par les
61 clients.
62 """
63
68
69 - def getChild(self, client_name, request):
70 if client_name == "":
71 return self
72 elif self.manager.has_key(client_name):
73 return ZephirClientResource(self.config, self.manager[client_name], client_name)
74 else:
75 return Redirect('/sites/%s/site/' % client_name)
76
78 t = ServerPageTmpl()
79 t.static_base = self.config['static_base_url']
80 t.clients = self.manager.keys()
81 return str(t)
82
83
85 """Liste des agents d'un client Zephir."""
86
87 - def __init__(self, config, manager, client_name):
93
94 - def getChild(self, agent_name, request):
95 if agent_name == "":
96 return self
97 elif self.manager.has_key(agent_name):
98 return AgentResource(self.config, self.manager, agent_name, self.client_name)
99 else:
100 return NoResource(_("No such agent"))
101
103 t = ManagerPageTmpl()
104 t.static_base = self.config['static_base_url']
105 t.host = self.client_name
106 t.show_clients = self.show_clients
107 if module.startswith(" (zephir") and str(self.client_name) != '0':
108
109 t.hostname = "Zephir - serveur %s" % self.client_name
110 t.description = t.hostname
111 else:
112
113
114 t.hostname = socket.gethostname().capitalize()
115 t.description = t.hostname + module
116
117 t.manager = self.manager
118 return str(t)
119
120
122 """Présentation des données mesurées par un agent."""
123
124 - def __init__(self, config, agent_manager, agent_name, client_name):
131
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)
140
141
142
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
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
158 t.hostname = "%s - Zephir - serveur %s" % (descr, self.client_name)
159 t.description = t.hostname
160 else:
161
162
163 t.hostname = socket.gethostname().capitalize()
164 t.description = descr + ' - ' + t.hostname + module
165 t.template_for_data = lambda d: DATA_TO_TEMPLATE_MAPPING[d.__class__]()
166 t.template_mapping = DATA_TO_TEMPLATE_MAPPING
167 return str(t)
168
169
170
171 DATA_TO_TEMPLATE_MAPPING = {
172 FileData: FileDataTmpl,
173 RRDFileData: RRDFileDataTmpl,
174 ImgFileData: ImgFileDataTmpl,
175 HTMLData: HTMLDataTmpl,
176 MeasuresData: MeasuresDataTmpl,
177 TableData: TableDataTmpl,
178 }
179
184
185
186
187
188
189
190
191
192