pvl/verkko/hosts.py
author Tero Marttila <terom@paivola.fi>
Wed, 10 Oct 2012 23:36:23 +0300
changeset 6 0f243c59d5d1
parent 5 91970ce3fc6b
child 8 f64c44640b15
permissions -rw-r--r--
build urls
0
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
from pvl.verkko import db, web
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
from pvl.html import tags as html
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
import socket # dns
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
import logging; log = logging.getLogger('pvl.verkko.hosts')
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
1
731d2df704f0 fixup index + non-chunked response (?) + hosts + evil hardcoded db url
Tero Marttila <terom@paivola.fi>
parents: 0
diff changeset
     9
# XXX: this should actually be DHCPHost
0
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
class Host (object) :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
    DATE_FMT = '%Y%m%d'
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
    def __init__ (self, ip, mac, name=None) :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
        self.ip = ip
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
        self.mac = mac
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
        self.name = name
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
   
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
    def render_mac (self) :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
        if not self.mac :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
            return None
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
        elif len(self.mac) > (6 * 2 + 5) :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
            return u'???'
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
        else :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
            return unicode(self.mac)
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
    def render_name (self) :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
        if self.name :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
            return self.name.decode('ascii', 'replace')
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
        else :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
            return None
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
    def when (self) :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
        return '{frm} - {to}'.format(
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
                frm = self.first_seen.strftime(self.DATE_FMT),
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
                to  = self.last_seen.strftime(self.DATE_FMT),
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
        )
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
    def dns (self) :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
        """
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
            Reverse-DNS lookup.
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
        """
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
        if not self.ip :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
            return None
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
        
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
        sockaddrs = set(sockaddr for family, socktype, proto, canonname, sockaddr in socket.getaddrinfo(self.ip, 0, 0, 0, 0, socket.AI_NUMERICHOST))
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
        for sockaddr in sockaddrs :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
            try :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
                host, port = socket.getnameinfo(sockaddr, socket.NI_NAMEREQD)
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
            except socket.gaierror :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
                continue
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
            return host
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
    def __unicode__ (self) :
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
        return u"{host.ip} ({host.mac})".format(host=self)
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
db.mapper(Host, db.dhcp_hosts, properties=dict(
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
    id      = db.dhcp_hosts.c.rowid,
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
    #_mac    = db.dhcp_hosts.c.mac,
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
    #_name   = db.dhcp_hosts.c.name,
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
))
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    67
class BaseHandler (web.Handler) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    68
    HOST_ATTRS = {
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    69
        'id':   Host.id,
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    70
        'ip':   Host.ip,
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    71
        'mac':  Host.mac,
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    72
        'name': Host.name,
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    73
        'seen': Host.last_seen,
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    74
    }
0
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    76
    HOST_SORT = Host.last_seen.desc()
0
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    78
    def query (self) :
3
5990b188c54b web.Handler
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    79
        hosts = self.db.query(Host)
0
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
3
5990b188c54b web.Handler
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    81
        # sort ?
5990b188c54b web.Handler
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    82
        sort = self.request.args.get('sort')
0
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
3
5990b188c54b web.Handler
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    84
        if sort :
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    85
            sort = self.HOST_ATTRS[sort]
3
5990b188c54b web.Handler
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    86
        else :
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    87
            sort = self.HOST_SORT
0
91c739202f06 initial code for dhcp hosts
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
3
5990b188c54b web.Handler
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    89
        log.debug("sort: %s", sort)
5990b188c54b web.Handler
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    90
5990b188c54b web.Handler
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    91
        hosts = hosts.order_by(sort)
5990b188c54b web.Handler
Tero Marttila <terom@paivola.fi>
parents: 1
diff changeset
    92
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    93
        # k
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    94
        return hosts
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    95
    
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    96
    def render_hosts (self, hosts, title=None) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    97
        COLS = (
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    98
            #title          sort
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    99
            ('#',           None),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   100
            ('IP',          'ip'),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   101
            ('MAC',         'mac'),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   102
            ('Hostname',    'name'),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   103
            ('Seen',        'seen'),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   104
        )
4
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
   105
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   106
        return html.table(
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   107
            html.caption(title) if title else None,
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   108
            html.thead(
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   109
                html.tr(
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   110
                    html.th(
6
0f243c59d5d1 build urls
Tero Marttila <terom@paivola.fi>
parents: 5
diff changeset
   111
                        html.a(href=self.url(sort=sort))(title) if sort else (title)
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   112
                    ) for title, sort in COLS
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   113
                )
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   114
            ),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   115
            html.tbody(
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   116
                html.tr(class_=('alternate' if i % 2 else None), id=host.id)(
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   117
                    html.td(class_='id')(
6
0f243c59d5d1 build urls
Tero Marttila <terom@paivola.fi>
parents: 5
diff changeset
   118
                        html.a(href=self.url(ItemHandler, id=host.id))(
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   119
                            '#' #host['rowid'])
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   120
                        )
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   121
                    ),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   122
                    html.td(class_='ip')(
6
0f243c59d5d1 build urls
Tero Marttila <terom@paivola.fi>
parents: 5
diff changeset
   123
                        html.a(href=self.url(ListHandler, attr='ip', value=host.ip))(
0f243c59d5d1 build urls
Tero Marttila <terom@paivola.fi>
parents: 5
diff changeset
   124
                            host.ip
0f243c59d5d1 build urls
Tero Marttila <terom@paivola.fi>
parents: 5
diff changeset
   125
                        )
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   126
                    ),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   127
                    html.td(class_='mac')(
6
0f243c59d5d1 build urls
Tero Marttila <terom@paivola.fi>
parents: 5
diff changeset
   128
                        html.a(href=self.url(ListHandler, attr='mac', value=host.mac))(
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   129
                            host.render_mac()
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   130
                        )
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   131
                    ),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   132
                    html.td(host.render_name()),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   133
                    html.td(host.when()),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   134
                ) for i, host in enumerate(hosts)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   135
            )
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   136
        )
4
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
   137
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   138
    def render_host (self, host, hosts) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   139
        attrs = (
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   140
                ('IP',          host.ip),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   141
                ('MAC',         host.mac),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   142
                ('Hostname',    host.name),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   143
                ('DNS',         host.dns()),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   144
        )
4
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
   145
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   146
        return (
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   147
            html.h2('Host'),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   148
            html.dl(
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   149
                (html.dt(title), html.dd(value)) for title, value in attrs
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   150
            ),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   151
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   152
            html.h2('Related'),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   153
            self.render_hosts(hosts),
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   154
6
0f243c59d5d1 build urls
Tero Marttila <terom@paivola.fi>
parents: 5
diff changeset
   155
            html.a(href=self.url(IndexHandler))(html('&laquo;'), 'Back'),
5
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   156
        )
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   157
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   158
class IndexHandler (BaseHandler) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   159
    def process (self) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   160
        self.hosts = self.query()
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   161
    
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   162
    def title (self) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   163
        return "DHCP Hosts"
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   164
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   165
    def render (self) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   166
        return self.render_hosts(self.hosts)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   167
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   168
class ItemHandler (BaseHandler) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   169
    def process (self, id) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   170
        self.hosts = self.query()
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   171
        self.host = self.hosts.get(id)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   172
        
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   173
        if not self.host :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   174
            raise web.NotFound("No such host: {id}".format(id=id))
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   175
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   176
        self.hosts = self.hosts.filter((Host.ip == self.host.ip) | (Host.mac == self.host.mac))
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   177
    
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   178
    def title (self) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   179
        return u"DHCP Host: {self.host}".format(self=self)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   180
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   181
    def render (self) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   182
        return self.render_host(self.host, self.hosts)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   183
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   184
class ListHandler (BaseHandler) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   185
    def process (self, attr, value) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   186
        # fake host
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   187
        _host = { 'ip': None, 'mac': None, 'name': None }
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   188
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   189
        if attr not in self.HOST_ATTRS :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   190
            raise web.BadRequest("Invalid attribute: {attr}".format(attr=attr))
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   191
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   192
        _host[attr] = value
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   193
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   194
        self.host = Host(**_host)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   195
        self.expression = "{attr}: {value}".format(attr=attr, value=value)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   196
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   197
        # query
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   198
        attr = self.HOST_ATTRS[attr]
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   199
        log.debug("%s == %s", attr, value)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   200
        
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   201
        self.hosts = self.query().filter(attr == value)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   202
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   203
    def title (self) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   204
        return "DHCP Hosts: {self.expression}".format(self=self)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   205
    
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   206
    def render (self) :
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   207
        return self.render_host(self.host, self.hosts)
91970ce3fc6b pvl.verkko.hosts: split up Handlers
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
   208