Mercurial > code > home > repos > homeauto
annotate service/dhcpleases/dhcpleases.py @ 1283:d36cd59b145a
dhcpleases partial rewrite
Ignore-this: 6a2b95612f0e3a2348397f2f068e5f58
darcs-hash:c0872b2f45c0c82492615f612e9655fdc48798c5
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Sat, 20 Apr 2019 23:59:04 -0700 |
parents | 084f95932677 |
children | f372e9d358d2 |
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) |
1283 | 3 |
4 also read 'arp -an' and our dns list | |
966
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
5 """ |
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
6 import sys |
979
76bb0bf74bd1
new index page. fix dhcp scanner errors
drewp <drewp@bigasterisk.com>
parents:
967
diff
changeset
|
7 import datetime |
966
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
8 sys.path.append("/my/site/magma") |
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
9 from stategraph import StateGraph |
1283 | 10 from rdflib import URIRef, Namespace, Literal, RDF, RDFS, XSD, ConjunctiveGraph |
966
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
11 from dateutil.tz import tzlocal |
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
12 import cyclone.web |
1283 | 13 from twisted.internet import reactor, task |
966
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
14 from isc_dhcp_leases.iscdhcpleases import IscDhcpLeases |
1283 | 15 sys.path.append("/my/proj/homeauto/lib") |
16 from patchablegraph import PatchableGraph, CycloneGraphEventsHandler, CycloneGraphHandler | |
17 sys.path.append("/my/proj/rdfdb") | |
18 from rdfdb.patch import Patch | |
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 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
|
21 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
|
22 |
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
23 def timeLiteral(dt): |
967 | 24 return Literal(dt.replace(tzinfo=tzlocal()).isoformat(), |
25 datatype=XSD.dateTime) | |
966
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
26 |
1283 | 27 def update(masterGraph): |
28 g = ConjunctiveGraph() | |
29 ctx = DEV['dhcp'] | |
30 | |
31 now = datetime.datetime.now() | |
32 for mac, lease in IscDhcpLeases('/var/lib/dhcp/dhcpd.leases' | |
33 ).get_current().items(): | |
34 uri = URIRef("http://bigasterisk.com/dhcpLease/%s" % lease.ethernet) | |
966
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
35 |
1283 | 36 g.add((uri, RDF.type, ROOM['DhcpLease'], ctx)) |
37 g.add((uri, ROOM['leaseStartTime'], timeLiteral(lease.start), ctx)) | |
38 g.add((uri, ROOM['leaseEndTime'], timeLiteral(lease.end), ctx)) | |
39 if lease.end < now: | |
40 g.add((uri, RDF.type, ROOM['ExpiredLease'], ctx)) | |
41 ip = URIRef("http://bigasterisk.com/localNet/%s/" % lease.ip) | |
42 g.add((uri, ROOM['assignedIp'], ip, ctx)) | |
43 g.add((ip, RDFS.label, Literal(lease.ip), ctx)) | |
44 mac = URIRef("http://bigasterisk.com/mac/%s" % lease.ethernet) | |
45 g.add((uri, ROOM['ethernetAddress'], mac, ctx)) | |
46 g.add((mac, ROOM['macAddress'], Literal(lease.ethernet), ctx)) | |
47 if lease.hostname: | |
48 g.add((mac, ROOM['dhcpHostname'], Literal(lease.hostname), ctx)) | |
49 masterGraph.setToGraph(g) | |
979
76bb0bf74bd1
new index page. fix dhcp scanner errors
drewp <drewp@bigasterisk.com>
parents:
967
diff
changeset
|
50 |
966
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
51 if __name__ == '__main__': |
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
52 config = { |
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
53 'servePort' : 9073, |
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
54 } |
1008 | 55 from twisted.python import log as twlog |
56 twlog.startLogging(sys.stdout) | |
966
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
57 #log.setLevel(10) |
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
58 #log.setLevel(logging.DEBUG) |
1283 | 59 masterGraph = PatchableGraph() |
60 task.LoopingCall(update, masterGraph).start(1) | |
966
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
61 |
979
76bb0bf74bd1
new index page. fix dhcp scanner errors
drewp <drewp@bigasterisk.com>
parents:
967
diff
changeset
|
62 reactor.listenTCP( |
76bb0bf74bd1
new index page. fix dhcp scanner errors
drewp <drewp@bigasterisk.com>
parents:
967
diff
changeset
|
63 config['servePort'], |
76bb0bf74bd1
new index page. fix dhcp scanner errors
drewp <drewp@bigasterisk.com>
parents:
967
diff
changeset
|
64 cyclone.web.Application( |
76bb0bf74bd1
new index page. fix dhcp scanner errors
drewp <drewp@bigasterisk.com>
parents:
967
diff
changeset
|
65 [ |
76bb0bf74bd1
new index page. fix dhcp scanner errors
drewp <drewp@bigasterisk.com>
parents:
967
diff
changeset
|
66 (r"/()", cyclone.web.StaticFileHandler, |
76bb0bf74bd1
new index page. fix dhcp scanner errors
drewp <drewp@bigasterisk.com>
parents:
967
diff
changeset
|
67 {"path": ".", "default_filename": "index.html"}), |
76bb0bf74bd1
new index page. fix dhcp scanner errors
drewp <drewp@bigasterisk.com>
parents:
967
diff
changeset
|
68 |
1283 | 69 (r'/graph', CycloneGraphHandler, {'masterGraph': masterGraph}), |
70 (r'/graph/events', CycloneGraphEventsHandler, {'masterGraph': masterGraph}), | |
71 ], masterGraph=masterGraph | |
979
76bb0bf74bd1
new index page. fix dhcp scanner errors
drewp <drewp@bigasterisk.com>
parents:
967
diff
changeset
|
72 )) |
966
cce0107a78b4
scan dhcpd.leases to get more info about networked devices
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
73 reactor.run() |