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
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)
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()