230 html.a(href=self.url(ItemHandler, id=host.id))( |
230 html.a(href=self.url(ItemHandler, id=host.id))( |
231 '#' #host.id |
231 '#' #host.id |
232 ) |
232 ) |
233 ), |
233 ), |
234 html.td(class_='ip')( |
234 html.td(class_='ip')( |
235 html.a(href=self.url(ListHandler, ip=host.ip))( |
235 html.a(href=url(ip=host.ip))( |
236 host.ip |
236 host.ip |
237 ) |
237 ) |
238 ), |
238 ), |
239 html.td(class_='mac')( |
239 html.td(class_='mac')( |
240 html.a(href=self.url(ListHandler, mac=host.mac))( |
240 html.a(href=url(mac=host.mac))( |
241 host.render_mac() |
241 host.render_mac() |
242 ) |
242 ) |
243 ), |
243 ), |
244 html.td(host.render_name()), |
244 html.td(host.render_name()), |
245 html.td( |
245 html.td( |
267 return html.form(method='get', action=self.url())( |
267 return html.form(method='get', action=self.url())( |
268 html.input(type='hidden', name='sort', value=self.sort), |
268 html.input(type='hidden', name='sort', value=self.sort), |
269 table, |
269 table, |
270 ) |
270 ) |
271 |
271 |
272 def render_host (self, host, hosts) : |
272 class ItemHandler (BaseHandler) : |
|
273 def process (self, id) : |
|
274 self.hosts = self.query() |
|
275 self.host = self.hosts.get(id) |
|
276 |
|
277 if not self.host : |
|
278 raise web.NotFound("No such host: {id}".format(id=id)) |
|
279 |
|
280 self.hosts = self.sort(self.hosts.filter((Host.ip == self.host.ip) | (Host.mac == self.host.mac))) |
|
281 |
|
282 def title (self) : |
|
283 return u"DHCP Host: {self.host}".format(self=self) |
|
284 |
|
285 def render_host (self, host) : |
|
286 """ |
|
287 Details for specific host. |
|
288 """ |
|
289 |
273 attrs = ( |
290 attrs = ( |
274 ('Network', host.gw), |
291 ('Network', host.gw), |
275 ('IP', host.ip), |
292 ('IP', host.ip), |
276 ('MAC', host.mac), |
293 ('MAC', host.mac), |
277 ('Hostname', host.name), |
294 ('Hostname', host.name), |
279 ('First seen', host.first_seen), |
296 ('First seen', host.first_seen), |
280 ('Last seen', host.last_seen), |
297 ('Last seen', host.last_seen), |
281 ('Last state', host.render_state()), |
298 ('Last state', host.render_state()), |
282 ('Total messages', host.count), |
299 ('Total messages', host.count), |
283 ) |
300 ) |
284 |
301 |
|
302 return ( |
|
303 html.dl( |
|
304 (html.dt(title), html.dd(value)) for title, value in attrs |
|
305 ) |
|
306 ) |
|
307 |
|
308 def render (self) : |
285 return ( |
309 return ( |
286 html.h2('Host'), |
310 html.h2('Host'), |
287 html.dl( |
311 self.render_host(self.host), |
288 (html.dt(title), html.dd(value)) for title, value in attrs |
|
289 ), |
|
290 |
312 |
291 html.h2('Related'), |
313 html.h2('Related'), |
292 self.render_hosts(hosts), |
314 self.render_hosts(self.hosts), |
293 |
315 |
294 html.a(href=self.url(ListHandler))(html('«'), 'Back'), |
316 html.a(href=self.url(ListHandler))(html('«'), 'Back'), |
295 ) |
317 ) |
296 |
318 |
297 class ItemHandler (BaseHandler) : |
|
298 def process (self, id) : |
|
299 self.hosts = self.query() |
|
300 self.host = self.hosts.get(id) |
|
301 |
|
302 if not self.host : |
|
303 raise web.NotFound("No such host: {id}".format(id=id)) |
|
304 |
|
305 self.hosts = self.sort(self.hosts.filter((Host.ip == self.host.ip) | (Host.mac == self.host.mac))) |
|
306 |
|
307 def title (self) : |
|
308 return u"DHCP Host: {self.host}".format(self=self) |
|
309 |
|
310 def render (self) : |
|
311 return self.render_host(self.host, self.hosts) |
|
312 |
319 |
313 class ListHandler (BaseHandler) : |
320 class ListHandler (BaseHandler) : |
314 # pagination |
321 # pagination |
315 PAGE = 10 |
322 PAGE = 10 |
316 |
323 |