Mercurial > code > home > repos > environment
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 |
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 | 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 | 16 from starlette.applications import Starlette |
17 from starlette.routing import Route | |
18 from starlette.staticfiles import StaticFiles | |
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 | 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 | 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 | 31 def update(masterGraph): |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
32 |
3 | 33 def stmt(s, p, o): |
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 | 60 app = Starlette( |
61 debug=True, | |
62 routes=[ | |
63 Route('/', StaticFiles(directory='.', html=True)), | |
64 Route('/graph/environment', StaticGraph(masterGraph)), | |
65 Route('/graph/environment/events', GraphEvents(masterGraph)), | |
66 # Route('/doc', Doc), | |
67 ]) | |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
68 |
3 | 69 app.add_middleware(PrometheusMiddleware, app_name='environment') |
70 app.add_route("/metrics", handle_metrics) | |
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 | 74 app = main() |