annotate environment.py @ 5:b5bfd0dd69d6

upadte bg loop, patchablegraph, py version
author drewp@bigasterisk.com
date Sun, 28 Aug 2022 21:37:20 -0700
parents e7f33fa31883
children 145779f2d79d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
1 #!/usr/bin/python
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
2 """
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
3 return some rdf about the environment, e.g. the current time,
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
4 daytime/night, overall modes like 'maintenance mode', etc
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
5
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
6 """
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
7 import datetime
3
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
8 import logging
5
b5bfd0dd69d6 upadte bg loop, patchablegraph, py version
drewp@bigasterisk.com
parents: 3
diff changeset
9
b5bfd0dd69d6 upadte bg loop, patchablegraph, py version
drewp@bigasterisk.com
parents: 3
diff changeset
10 import background_loop
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
11 from dateutil.relativedelta import FR, relativedelta
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
12 from dateutil.tz import tzlocal
5
b5bfd0dd69d6 upadte bg loop, patchablegraph, py version
drewp@bigasterisk.com
parents: 3
diff changeset
13 from patchablegraph import PatchableGraph
b5bfd0dd69d6 upadte bg loop, patchablegraph, py version
drewp@bigasterisk.com
parents: 3
diff changeset
14 from patchablegraph.handler import GraphEvents, StaticGraph
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
15 from rdflib import Literal, Namespace
3
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
16 from starlette.applications import Starlette
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
17 from starlette.routing import Route
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
18 from starlette.staticfiles import StaticFiles
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
19 from starlette_exporter import PrometheusMiddleware, handle_metrics
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
20
3
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
21 # from rdfdoc import Doc
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
22 from twilight import isWithinTwilight
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
23
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
24 ROOM = Namespace("http://projects.bigasterisk.com/room/")
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
25 DEV = Namespace("http://projects.bigasterisk.com/device/")
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
26
3
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
27 logging.basicConfig(level=logging.INFO)
5
b5bfd0dd69d6 upadte bg loop, patchablegraph, py version
drewp@bigasterisk.com
parents: 3
diff changeset
28 logging.getLogger('patchablegraph').setLevel(logging.WARNING)
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
29
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
30
3
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
31 def update(masterGraph):
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
32
3
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
33 def stmt(s, p, o):
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
34 masterGraph.patchObject(ROOM.environment, s, p, o)
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
35
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
36 now = datetime.datetime.now(tzlocal())
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
37
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
38 stmt(DEV.environment, ROOM.localHour, Literal(now.hour))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
39 stmt(DEV.environment, ROOM.localTimeToMinute, Literal(now.strftime("%H:%M")))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
40
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
41 stmt(DEV.environment, ROOM.localTimeToSecond, Literal(now.strftime("%H:%M:%S")))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
42
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
43 stmt(DEV.environment, ROOM.localDayOfWeek, Literal(now.strftime("%A")))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
44 stmt(DEV.environment, ROOM.localMonthDay, Literal(now.strftime("%B %e")))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
45 stmt(DEV.environment, ROOM.localDate, Literal(now.strftime("%Y-%m-%d")))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
46
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
47 for offset in range(-12, 7):
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
48 d = now.date() + datetime.timedelta(days=offset)
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
49 if d == d + relativedelta(day=31, weekday=FR(-1)):
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
50 stmt(DEV.calendar, ROOM.daysToLastFridayOfMonth, Literal(offset))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
51
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
52 stmt(DEV.calendar, ROOM.twilight, ROOM['withinTwilight'] if isWithinTwilight(now) else ROOM['daytime'])
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
53
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
54
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
55 def main():
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
56 masterGraph = PatchableGraph()
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
57
5
b5bfd0dd69d6 upadte bg loop, patchablegraph, py version
drewp@bigasterisk.com
parents: 3
diff changeset
58 loop = background_loop.loop_forever(lambda first_run=False: update(masterGraph), 1)
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
59
3
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
60 app = Starlette(
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
61 debug=True,
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
62 routes=[
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
63 Route('/', StaticFiles(directory='.', html=True)),
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
64 Route('/graph/environment', StaticGraph(masterGraph)),
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
65 Route('/graph/environment/events', GraphEvents(masterGraph)),
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
66 # Route('/doc', Doc),
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
67 ])
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
68
3
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
69 app.add_middleware(PrometheusMiddleware, app_name='environment')
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
70 app.add_route("/metrics", handle_metrics)
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
71 return app
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
72
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
73
3
e7f33fa31883 port to starlette/asyncio
drewp@bigasterisk.com
parents: 1
diff changeset
74 app = main()