annotate service/environment/environment.py @ 1462:2b29f14eb6bd

try new graph+view widget Ignore-this: d5f9c5dc52f04324368716ba2f604fdb darcs-hash:44e85a5c075ef73c34a58deaa3a3c1e8390dae52
author drewp <drewp@bigasterisk.com>
date Sun, 24 Nov 2019 00:01:00 -0800
parents b63c35e13e18
children a93fbf0d0daa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
1 #!/usr/bin/python
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
2 """
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
3 return some rdf about the environment, e.g. the current time,
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
4 daytime/night, overall modes like 'maintenance mode', etc
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
5
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
6 """
1243
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
7 import sys, datetime, cyclone.web, logging
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
8 from docopt import docopt
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
9 from twisted.internet import reactor, task, defer
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
10 from dateutil.tz import tzlocal
876
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
11 from dateutil.relativedelta import relativedelta, FR
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
12 from rdflib import Namespace, Literal
1243
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
13 from greplin import scales
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
14 from greplin.scales.cyclonehandler import StatsHandler
1029
4d36cae32a4c refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents: 1028
diff changeset
15 from patchablegraph import PatchableGraph, CycloneGraphEventsHandler, CycloneGraphHandler
876
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
16 from twilight import isWithinTwilight
1243
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
17 from logsetup import log, enableTwistedLog
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
18
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
19 from rdfdoc import Doc
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
20
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
21 ROOM = Namespace("http://projects.bigasterisk.com/room/")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
22 DEV = Namespace("http://projects.bigasterisk.com/device/")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
23
1243
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
24 STATS = scales.collection('/root',
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
25 scales.PmfStat('update'),
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
26 )
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
27
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
28 @STATS.update.time()
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
29 def update(masterGraph):
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
30 stmt = lambda s, p, o: masterGraph.patchObject(ROOM.environment, s, p, o)
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
31
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
32 now = datetime.datetime.now(tzlocal())
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
33
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
34 stmt(DEV.environment, ROOM.localHour, Literal(now.hour))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
35 stmt(DEV.environment, ROOM.localTimeToMinute,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
36 Literal(now.strftime("%H:%M")))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
37
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
38 stmt(DEV.environment, ROOM.localTimeToSecond,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
39 Literal(now.strftime("%H:%M:%S")))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
40
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
41 stmt(DEV.environment, ROOM.localDayOfWeek,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
42 Literal(now.strftime("%A")))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
43 stmt(DEV.environment, ROOM.localMonthDay,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
44 Literal(now.strftime("%B %e")))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
45 stmt(DEV.environment, ROOM.localDate,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
46 Literal(now.strftime("%Y-%m-%d")))
876
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
47
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
48 for offset in range(-12, 7):
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
49 d = now.date() + datetime.timedelta(days=offset)
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
50 if d == d + relativedelta(day=31, weekday=FR(-1)):
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
51 stmt(DEV.calendar, ROOM.daysToLastFridayOfMonth, Literal(offset))
876
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
52
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
53 stmt(DEV.calendar, ROOM.twilight,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
54 ROOM['withinTwilight'] if isWithinTwilight(now) else ROOM['daytime'])
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
55
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
56
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
57 def main():
1243
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
58 arg = docopt("""
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
59 Usage: environment.py [options]
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
60
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
61 -v Verbose
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
62 """)
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
63 log.setLevel(logging.INFO)
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
64 if arg['-v']:
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
65 enableTwistedLog()
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
66 log.setLevel(logging.DEBUG)
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
67 defer.setDebugging(True)
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
68
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
69 masterGraph = PatchableGraph()
965
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
70
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
71 class Application(cyclone.web.Application):
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
72 def __init__(self):
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
73 handlers = [
1029
4d36cae32a4c refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents: 1028
diff changeset
74 (r"/()",
4d36cae32a4c refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents: 1028
diff changeset
75 cyclone.web.StaticFileHandler,
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
76 {"path": ".", "default_filename": "index.html"}),
1029
4d36cae32a4c refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents: 1028
diff changeset
77 (r'/graph',
4d36cae32a4c refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents: 1028
diff changeset
78 CycloneGraphHandler, {'masterGraph': masterGraph}),
4d36cae32a4c refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents: 1028
diff changeset
79 (r'/graph/events',
4d36cae32a4c refactor /graph and /graph/events handlers to lib/
drewp <drewp@bigasterisk.com>
parents: 1028
diff changeset
80 CycloneGraphEventsHandler, {'masterGraph': masterGraph}),
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
81 (r'/doc', Doc), # to be shared
1243
b63c35e13e18 environment graph service standardization
drewp <drewp@bigasterisk.com>
parents: 1029
diff changeset
82 (r'/stats/(.*)', StatsHandler, {'serverName': 'environment'}),
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
83 ]
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
84 cyclone.web.Application.__init__(self, handlers,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
85 masterGraph=masterGraph)
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
86 task.LoopingCall(update, masterGraph).start(1)
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
87 reactor.listenTCP(9075, Application())
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
88 reactor.run()
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
89
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
90 if __name__ == '__main__':
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
91 main()
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
92