Mercurial > code > home > repos > homeauto
annotate service/dhcpleases/dhcpleases.py @ 967:2489d111f4f1
whitespace
Ignore-this: 29ddf8925c373bdb1ec8f62a01f0ac4f
darcs-hash:20150322074155-312f9-2dd631ff19a153041b3e869536d7c277cba2b768
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Sun, 22 Mar 2015 00:41:55 -0700 |
parents | cce0107a78b4 |
children | ab98f8d72be0 |
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 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
|
14 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
|
15 |
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
16 def timeLiteral(dt): |
967 | 17 return Literal(dt.replace(tzinfo=tzlocal()).isoformat(), |
18 datatype=XSD.dateTime) | |
966
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() |