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