from pvl.verkko import web, db, table
from pvl.web import html, urls
import datetime
import logging; log = logging.getLogger('pvl.verkko.wlan')
class WLANSta (object) :
"""
A WLAN STA (client) with ap/ssid/sta and starts/ends.
"""
DATE_FMT = '%Y%m%d %H:%M'
TIME_FMT = '%H:%M:%S'
@classmethod
def format_datetime (cls, dt) :
if dt.date() == datetime.date.today() :
return dt.strftime(cls.TIME_FMT)
else :
return dt.strftime(cls.DATE_FMT)
def seen (self) :
return (
html.span(title=self.first_seen)(self.format_datetime(self.first_seen)),
'-',
html.span(title=self.last_seen)(self.format_datetime(self.last_seen))
)
db.mapper(WLANSta, db.wlan_sta, properties=dict(
))
class WLANTable (table.Table) :
"""
<table> of WLAN STA
"""
ITEMS = "WLAN Stations"
COLUMNS = (
table.Column('ap', "Access Point", WLANSta.ap,
rowfilter = True,
),
table.Column('wlan', "SSID", WLANSta.wlan,
rowfilter = True,
),
table.Column('sta', "MAC", WLANSta.sta,
rowfilter = True,
),
table.Column('seen', "Seen", WLANSta.last_seen, WLANSta.seen),
)
# XXX: have to set again
ATTRS = dict((col.attr, col) for col in COLUMNS)
# default
SORT = WLANSta.last_seen.desc()
PAGE = 20
class WLANHandler (table.TableHandler, web.DatabaseHandler) :
"""
Combined database + <table>
"""
CSS = web.DatabaseHandler.CSS + table.TableHandler.CSS + (
"/static/wlan.css",
)
# view
TABLE = WLANTable
DB_CLASS = WLANSta
class Application (web.Application) :
URLS = urls.Map((
urls.rule('/', WLANHandler),
))