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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
3
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
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
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
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
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
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
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
15 sys.path.append("/my/proj/homeauto/lib")
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
16 from patchablegraph import PatchableGraph, CycloneGraphEventsHandler, CycloneGraphHandler
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
17 sys.path.append("/my/proj/rdfdb")
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
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
2489d111f4f1 whitespace
drewp <drewp@bigasterisk.com>
parents: 966
diff changeset
24 return Literal(dt.replace(tzinfo=tzlocal()).isoformat(),
2489d111f4f1 whitespace
drewp <drewp@bigasterisk.com>
parents: 966
diff changeset
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
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
27 def update(masterGraph):
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
28 g = ConjunctiveGraph()
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
29 ctx = DEV['dhcp']
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
30
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
31 now = datetime.datetime.now()
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
32 for mac, lease in IscDhcpLeases('/var/lib/dhcp/dhcpd.leases'
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
33 ).get_current().items():
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
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
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
36 g.add((uri, RDF.type, ROOM['DhcpLease'], ctx))
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
37 g.add((uri, ROOM['leaseStartTime'], timeLiteral(lease.start), ctx))
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
38 g.add((uri, ROOM['leaseEndTime'], timeLiteral(lease.end), ctx))
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
39 if lease.end < now:
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
40 g.add((uri, RDF.type, ROOM['ExpiredLease'], ctx))
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
41 ip = URIRef("http://bigasterisk.com/localNet/%s/" % lease.ip)
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
42 g.add((uri, ROOM['assignedIp'], ip, ctx))
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
43 g.add((ip, RDFS.label, Literal(lease.ip), ctx))
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
44 mac = URIRef("http://bigasterisk.com/mac/%s" % lease.ethernet)
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
45 g.add((uri, ROOM['ethernetAddress'], mac, ctx))
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
46 g.add((mac, ROOM['macAddress'], Literal(lease.ethernet), ctx))
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
47 if lease.hostname:
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
48 g.add((mac, ROOM['dhcpHostname'], Literal(lease.hostname), ctx))
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
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
084f95932677 dhcp logging onn
drewp <drewp@bigasterisk.com>
parents: 979
diff changeset
55 from twisted.python import log as twlog
084f95932677 dhcp logging onn
drewp <drewp@bigasterisk.com>
parents: 979
diff changeset
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
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
59 masterGraph = PatchableGraph()
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
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
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
69 (r'/graph', CycloneGraphHandler, {'masterGraph': masterGraph}),
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
70 (r'/graph/events', CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
d36cd59b145a dhcpleases partial rewrite
drewp <drewp@bigasterisk.com>
parents: 1008
diff changeset
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()