pvl/verkko/dhcp.py
author Tero Marttila <terom@paivola.fi>
Sat, 26 Jul 2014 13:52:51 +0300
changeset 422 56ba4bef5016
parent 207 c985d2c788ea
permissions -rw-r--r--
version: 0.7.0

* pvl.hosts: location = ... field
* pvl.hosts: support extension:foo = ... fields
* pvl.hosts: down = ...
* pvl.hosts-snmp: gather host links from snmp using lldp/fdb/vlan info
* pvl.hosts-graph: graph host links
# encoding: utf-8
import pvl.web
import pvl.verkko.web

from pvl.web import html, urls
from pvl.verkko import hosts, leases

import logging; log = logging.getLogger('pvl.verkko.dhcp')

class Index (pvl.verkko.web.DatabaseHandler) :
    TITLE = u"Päivölä Verkko"

    CSS = pvl.verkko.web.DatabaseHandler.CSS + (
            '/static/dhcp/forms.css',
    )

    def render_link (self, title, **opts) :
        return html.a(href=self.url(hosts.ListHandler, **opts))(title)

    def render_links (self, attr, titlevalues) :
        for title, value in titlevalues :
            yield html.li(
                self.render_link(title, **{attr: value})
            ) 

    def render (self) :
        return (
            html.h2("Interval"),
            html.ul(
                self.render_links('seen', (
                            ("Hour",    '1h'),
                            ("Day",     '1d'),
                            #("Month",   '30d'),
                            #("Year",    '365d'),
                )),
                html.li(
                    html.a(href=self.url(hosts.RealtimeHandler))("Realtime"),
                ),
            ),
            html.h2("State"),
            html.ul(
                self.render_links('state', (
                            ("Valid",       ('DHCPACK', 'DHCPRELEASE')),
                            ("Incomplete",  ('DHCPDISCOVER', 'DHCPOFFER', 'DHCPREQUEST')),
                            ("Invalid",     ('DHCPNAK', )),
                )),
            ),

            html.h2("IP/MAC"),
            html.form(action=self.url(hosts.ListHandler), method='get')(
                html.fieldset(
                    html.ul(
                        html.li(
                            html.label(for_='ip')("IP"),
                            html.input(type='text', name='ip'),
                        ),

                        html.li(
                            html.label(for_='mac')("MAC"),
                            html.input(type='text', name='mac'),
                        ),

                        html.li(
                            html.input(type='submit', value="Search"),
                        ),
                    )
                )
            ),
        )

class Application (pvl.verkko.web.Application) :
    URLS = urls.Map((
        urls.rule('/',                       Index),
        urls.rule('/hosts/',                 hosts.ListHandler),
        urls.rule('/hosts/<int:id>',         hosts.ItemHandler),
        urls.rule('/hosts/realtime',         hosts.RealtimeHandler),
        urls.rule('/leases/',                leases.ListHandler),
    ))