annotate service/xidle/xidle.py @ 1020:5a5badf59503

ipv6 support Ignore-this: b6fe9c1fe232302cdd1b6469cbc8ac24 darcs-hash:a2a978a5dba938db33107c8928b03680123d4baf
author drewp <drewp@bigasterisk.com>
date Sun, 03 Jan 2016 02:27:37 -0800
parents 16b8c4f36f31
children 105969d248d6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
858
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 #!bin/python
874
16b8c4f36f31 add idleTimeMinutes to rdf graph
drewp <drewp@bigasterisk.com>
parents: 858
diff changeset
2 from __future__ import division
858
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 """
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4 X server idle time is now available over http!
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5 """
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7 from bottle import run, get, put, request, response
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8 import subprocess, sys, socket
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9 from rdflib import Namespace, URIRef, Literal
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 # from http://bebop.bigasterisk.com/python/
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 import xss
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 # another option: http://thp.io/2007/09/x11-idle-time-and-focused-window-in.html
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
14
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15 DEV = Namespace("http://projects.bigasterisk.com/device/")
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16 ROOM = Namespace("http://projects.bigasterisk.com/room/")
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 sys.path.append("/my/site/magma")
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19 from stategraph import StateGraph
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 host = socket.gethostname()
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23 @get("/")
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24 def index():
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25 xss.get_info() # fail if we can't get the display or something
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26 return '''
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27 Get the <a href="idle">X idle time</a> on %s.
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 <a href="graph">rdf graph</a> available.''' % host
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 @get("/idle")
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 def monitor():
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32 return {"idleMs" : xss.get_info().idle}
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34 @get("/graph")
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35 def graph():
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36 g = StateGraph(ctx=DEV['xidle/%s' % host])
874
16b8c4f36f31 add idleTimeMinutes to rdf graph
drewp <drewp@bigasterisk.com>
parents: 858
diff changeset
37
16b8c4f36f31 add idleTimeMinutes to rdf graph
drewp <drewp@bigasterisk.com>
parents: 858
diff changeset
38 ms = xss.get_info().idle
16b8c4f36f31 add idleTimeMinutes to rdf graph
drewp <drewp@bigasterisk.com>
parents: 858
diff changeset
39 subj = URIRef("http://bigasterisk.com/host/%s/xidle" % host)
16b8c4f36f31 add idleTimeMinutes to rdf graph
drewp <drewp@bigasterisk.com>
parents: 858
diff changeset
40 g.add((subj, ROOM['idleTimeMs'], Literal(ms)))
16b8c4f36f31 add idleTimeMinutes to rdf graph
drewp <drewp@bigasterisk.com>
parents: 858
diff changeset
41 g.add((subj, ROOM['idleTimeMinutes'], Literal(ms / 1000 / 60)))
858
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 response.set_header('Content-type', 'application/x-trig')
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 return g.asTrig()
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45
1020
5a5badf59503 ipv6 support
drewp <drewp@bigasterisk.com>
parents: 874
diff changeset
46 run(host="[::]", server='gunicorn', port=9107, quiet=True)
858
8887a0778a1f new xidle service
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47