changeset 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 a06d9921c2a3
children 2489d111f4f1
files service/dhcpleases/dhcpleases.py service/dhcpleases/pydeps service/tomatoWifi/tomatoWifi.py
diffstat 3 files changed, 64 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/service/dhcpleases/dhcpleases.py	Sun Mar 22 00:35:10 2015 -0700
@@ -0,0 +1,58 @@
+"""
+statements about dhcp leases (and maybe live-host pings)
+"""
+import sys
+sys.path.append("/my/site/magma")
+from stategraph import StateGraph
+from rdflib import URIRef, Namespace, Literal, RDF, RDFS, XSD
+from dateutil.tz import tzlocal
+import cyclone.web
+from twisted.internet import reactor
+from isc_dhcp_leases.iscdhcpleases import IscDhcpLeases
+
+
+DEV = Namespace("http://projects.bigasterisk.com/device/")
+ROOM = Namespace("http://projects.bigasterisk.com/room/")
+
+def timeLiteral(dt):
+    return Literal(dt.replace(tzinfo=tzlocal()).isoformat(), datatype=XSD.dateTime)
+
+class GraphHandler(cyclone.web.RequestHandler):
+    def get(self):
+        g = StateGraph(ctx=DEV['dhcp'])
+
+        for mac, lease in IscDhcpLeases('/var/lib/dhcp/dhcpd.leases'
+                                        ).get_current().items():
+            uri = URIRef("http://bigasterisk.com/dhcpLease/%s" % lease.ethernet)
+            
+            g.add((uri, RDF.type, ROOM['DhcpLease']))
+            g.add((uri, ROOM['leaseStartTime'], timeLiteral(lease.start)))
+            g.add((uri, ROOM['leaseEndTime'], timeLiteral(lease.end)))
+            ip = URIRef("http://bigasterisk.com/localNet/%s/" % lease.ip)
+            g.add((uri, ROOM['assignedIp'], ip))
+            g.add((ip, RDFS.label, Literal(lease.ip)))
+            mac = URIRef("http://bigasterisk.com/mac/%s" % lease.ethernet)
+            g.add((uri, ROOM['ethernetAddress'], mac))
+            g.add((mac, ROOM['macAddress'], Literal(lease.ethernet)))
+            if lease.hostname:
+                g.add((mac, ROOM['dhcpHostname'], Literal(lease.hostname)))
+            
+        self.set_header('Content-type', 'application/x-trig')
+        self.write(g.asTrig())
+
+if __name__ == '__main__':
+    config = {
+        'servePort' : 9073,
+        }
+    #from twisted.python import log as twlog
+    #twlog.startLogging(sys.stdout)
+    #log.setLevel(10)
+    #log.setLevel(logging.DEBUG)
+
+    reactor.listenTCP(config['servePort'],
+                      cyclone.web.Application(
+                          [
+                              (r'/graph', GraphHandler),
+                          ],
+                          ))
+    reactor.run()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/service/dhcpleases/pydeps	Sun Mar 22 00:35:10 2015 -0700
@@ -0,0 +1,4 @@
+cyclone==1.1
+isc-dhcp-leases==0.2.1
+python-dateutil==2.4.1
+rdflib==4.2.0
--- a/service/tomatoWifi/tomatoWifi.py	Mon Feb 09 00:11:03 2015 -0800
+++ b/service/tomatoWifi/tomatoWifi.py	Sun Mar 22 00:35:10 2015 -0700
@@ -117,8 +117,8 @@
         for dev in self.settings.poller.lastAddrs:
             if not dev.get('connected'):
                 continue
-            uri = URIRef("http://bigasterisk.com/wifiDevice/%s" % dev['mac'])
-            g.add((uri, ROOM['macAddress'], Literal(dev['mac'])))
+            uri = URIRef("http://bigasterisk.com/mac/%s" % dev['mac'].lower())
+            g.add((uri, ROOM['macAddress'], Literal(dev['mac'].lower())))
             
             g.add((uri, ROOM['connected'], aps))
             if 'clientHostname' in dev: