Mercurial > code > home > repos > homeauto
annotate service/dhcpleases/dhcpleases.py @ 161:b0c168f562e8
scan dhcpd.leases to get more info about networked devices
Ignore-this: d281707203bd85ede94402568b73c205
author | drewp@bigasterisk.com |
---|---|
date | Sun, 22 Mar 2015 00:35:10 -0700 |
parents | |
children | bb70eaa45666 |
rev | line source |
---|---|
161
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
1 """ |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
2 statements about dhcp leases (and maybe live-host pings) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
3 """ |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
4 import sys |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
5 sys.path.append("/my/site/magma") |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
6 from stategraph import StateGraph |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
7 from rdflib import URIRef, Namespace, Literal, RDF, RDFS, XSD |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
8 from dateutil.tz import tzlocal |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
9 import cyclone.web |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
10 from twisted.internet import reactor |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
11 from isc_dhcp_leases.iscdhcpleases import IscDhcpLeases |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
12 |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
13 |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
14 DEV = Namespace("http://projects.bigasterisk.com/device/") |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
15 ROOM = Namespace("http://projects.bigasterisk.com/room/") |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
16 |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
17 def timeLiteral(dt): |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
18 return Literal(dt.replace(tzinfo=tzlocal()).isoformat(), datatype=XSD.dateTime) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
19 |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
20 class GraphHandler(cyclone.web.RequestHandler): |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
21 def get(self): |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
22 g = StateGraph(ctx=DEV['dhcp']) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
23 |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
24 for mac, lease in IscDhcpLeases('/var/lib/dhcp/dhcpd.leases' |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
25 ).get_current().items(): |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
26 uri = URIRef("http://bigasterisk.com/dhcpLease/%s" % lease.ethernet) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
27 |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
28 g.add((uri, RDF.type, ROOM['DhcpLease'])) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
29 g.add((uri, ROOM['leaseStartTime'], timeLiteral(lease.start))) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
30 g.add((uri, ROOM['leaseEndTime'], timeLiteral(lease.end))) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
31 ip = URIRef("http://bigasterisk.com/localNet/%s/" % lease.ip) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
32 g.add((uri, ROOM['assignedIp'], ip)) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
33 g.add((ip, RDFS.label, Literal(lease.ip))) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
34 mac = URIRef("http://bigasterisk.com/mac/%s" % lease.ethernet) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
35 g.add((uri, ROOM['ethernetAddress'], mac)) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
36 g.add((mac, ROOM['macAddress'], Literal(lease.ethernet))) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
37 if lease.hostname: |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
38 g.add((mac, ROOM['dhcpHostname'], Literal(lease.hostname))) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
39 |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
40 self.set_header('Content-type', 'application/x-trig') |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
41 self.write(g.asTrig()) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
42 |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
43 if __name__ == '__main__': |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
44 config = { |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
45 'servePort' : 9073, |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
46 } |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
47 #from twisted.python import log as twlog |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
48 #twlog.startLogging(sys.stdout) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
49 #log.setLevel(10) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
50 #log.setLevel(logging.DEBUG) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
51 |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
52 reactor.listenTCP(config['servePort'], |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
53 cyclone.web.Application( |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
54 [ |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
55 (r'/graph', GraphHandler), |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
56 ], |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
57 )) |
b0c168f562e8
scan dhcpd.leases to get more info about networked devices
drewp@bigasterisk.com
parents:
diff
changeset
|
58 reactor.run() |