author | Tero Marttila <terom@paivola.fi> |
Fri, 05 Jul 2013 00:59:56 +0300 | |
changeset 238 | 9702bfb124f6 |
parent 236 | 7b37f84b17cc |
permissions | -rwxr-xr-x |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
#!/usr/bin/python |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
2 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
""" |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
Analyze WLAN STA logs. |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
5 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
Jul 3 23:05:04 buffalo-g300n-647682 daemon.info hostapd: wlan0-1: STA aa:bb:cc:dd:ee:ff WPA: group key handshake completed (RSN) |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
""" |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
9 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
10 |
__version__ = '0.1' |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
11 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
import pvl.args |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
import pvl.syslog.args |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
import pvl.rrd.hosts |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
15 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
16 |
import optparse |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
import logging; log = logging.getLogger('main') |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
WLAN_STA_PROG = 'hostapd' |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
21 |
def parse_argv (argv, doc = __doc__) : |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
""" |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
Parse command-line argv, returning (options, args). |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
""" |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
prog = argv.pop(0) |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
args = argv |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
# optparse |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
parser = optparse.OptionParser( |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
prog = prog, |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
usage = '%prog: [options] [<input.txt> [...]]', |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
version = __version__, |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
description = doc, |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
) |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
# common |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
parser.add_option_group(pvl.args.parser(parser)) |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
parser.add_option_group(pvl.syslog.args.parser(parser, prog=WLAN_STA_PROG)) |
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
40 |
parser.add_option_group(pvl.verkko.db.parser(parser, table=db.wlan_sta)) |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
parser.add_option('--interfaces', metavar='PATH', |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
help="Load interface/node names from mapping file") |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
44 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
# parse |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
options, args = parser.parse_args(args) |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
# apply |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
pvl.args.apply(options) |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
return options, args |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
52 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
import re |
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
54 |
from pvl.verkko import db |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
|
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
56 |
class WlanStaDatabase (object) : |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
HOSTAPD_STA_RE = re.compile(r'(?P<wlan>.+?): STA (?P<sta>.+?) (?P<msg>.+)') |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
|
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
59 |
DB_TABLE = db.wlan_sta |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
60 |
DB_LAST_SEEN = db.wlan_sta.c.last_seen |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
61 |
DB_SELECT = (db.dhcp_hosts.c.gw, db.dhcp_hosts.c.ip) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
62 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
63 |
def __init__ (self, db, interface_map=None) : |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
""" |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
interface_map - {(hostname, interface): (nodename, wlan)} |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
""" |
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
67 |
self.db = db |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
self.interface_map = interface_map |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
|
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
70 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
71 |
def select (self, distinct=DB_SELECT, interval=None) : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
72 |
""" |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
73 |
SELECT unique gw/ip hosts, for given interval. |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
74 |
""" |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
75 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
76 |
query = db.select(distinct, distinct=True) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
77 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
78 |
if interval : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
79 |
# timedelta |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
80 |
query = query.where(db.func.now() - self.DB_LAST_SEEN < interval) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
81 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
82 |
return self.db.select(query) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
83 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
84 |
def insert (self, key, update, timestamp, count=True) : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
85 |
""" |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
86 |
INSERT new host |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
87 |
""" |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
88 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
89 |
query = self.DB_TABLE.insert().values(**key).values(**update).values( |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
90 |
first_seen = timestamp, |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
91 |
last_seen = timestamp, |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
92 |
) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
93 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
94 |
if count : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
95 |
query = query.values(count=1) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
96 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
97 |
# -> id |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
98 |
return self.db.insert(query) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
99 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
100 |
def update (self, key, update, timestamp, count=True) : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
101 |
""" |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
102 |
UPDATE existing host, or return False if not found. |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
103 |
""" |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
104 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
105 |
table = self.DB_TABLE |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
106 |
query = table.update() |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
107 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
108 |
for col, value in key.iteritems() : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
109 |
query = query.where(table.c[col] == value) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
110 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
111 |
query = query.values(last_seen=timestamp) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
112 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
113 |
if count : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
114 |
query = query.values(count=db.func.coalesce(table.c.count, 0) + 1) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
115 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
116 |
query = query.values(**update) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
117 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
118 |
# -> any matched rows? |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
119 |
return self.db.update(query) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
120 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
121 |
def touch (self, key, update, timestamp, **opts) : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
122 |
# update existing? |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
123 |
if self.update(key, update, timestamp, **opts) : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
124 |
log.info("Update: %s: %s: %s", key, update, timestamp) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
125 |
else : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
126 |
log.info("Insert: %s: %s: %s", key, update, timestamp) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
127 |
self.insert(key, update, timestamp, **opts) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
128 |
|
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
129 |
def parse (self, item) : |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
130 |
""" |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
131 |
Parse fields from a hostapd syslog message. |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
132 |
""" |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
133 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
134 |
match = self.HOSTAPD_STA_RE.match(item['msg']) |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
135 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
136 |
if not match : |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
137 |
return None |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
138 |
|
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
139 |
return match.groupdict() |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
140 |
|
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
141 |
def __call__ (self, item) : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
142 |
match = self.parse(item) |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
143 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
144 |
if not match : |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
145 |
return |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
146 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
147 |
# lookup? |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
148 |
ap, wlan = item['host'], match['wlan'] |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
149 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
150 |
if self.interface_map : |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
151 |
mapping = self.interface_map.get((ap, wlan)) |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
152 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
153 |
if mapping : |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
154 |
ap, wlan = mapping |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
155 |
|
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
156 |
# update/insert |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
157 |
self.touch( |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
158 |
dict( |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
159 |
ap = ap, |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
160 |
wlan = wlan, |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
161 |
sta = match['sta'], |
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
162 |
), dict( |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
163 |
msg = match['msg'], |
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
164 |
), item['timestamp'] |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
165 |
) |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
166 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
167 |
def main (argv) : |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
168 |
options, args = parse_argv(argv) |
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
169 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
170 |
# database |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
171 |
db = pvl.verkko.db.apply(options) |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
172 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
173 |
if options.interfaces : |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
174 |
interfaces = dict(pvl.rrd.hosts.map_interfaces(options, open(options.interfaces))) |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
175 |
else : |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
176 |
interfaces = None |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
177 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
178 |
# syslog |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
179 |
log.info("Open up syslog...") |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
180 |
syslog = pvl.syslog.args.apply(options) |
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
181 |
|
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
182 |
# handler |
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
183 |
handler = WlanStaDatabase(db, interface_map=interfaces) |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
184 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
185 |
log.info("Enter mainloop...") |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
186 |
for source in syslog.main() : |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
187 |
for item in source: |
238
9702bfb124f6
pvl.wlan-sta: update database wlan_sta table
Tero Marttila <terom@paivola.fi>
parents:
236
diff
changeset
|
188 |
handler(item) |
236
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
189 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
190 |
return 0 |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
191 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
192 |
if __name__ == '__main__': |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
193 |
import sys |
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
194 |
|
7b37f84b17cc
pvl.wlan-sta: track openwrt hostapd syslog wlan sta activity
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
195 |
sys.exit(main(sys.argv)) |