Mercurial > code > home > repos > environment
annotate environment.py @ 3:e7f33fa31883
port to starlette/asyncio
author | drewp@bigasterisk.com |
---|---|
date | Sun, 24 Apr 2022 14:46:32 -0700 |
parents | 0f532eb91364 |
children | b5bfd0dd69d6 |
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 """ |
3 | 7 import asyncio |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
8 import datetime |
3 | 9 import logging |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
10 from dateutil.relativedelta import FR, relativedelta |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
11 from dateutil.tz import tzlocal |
3 | 12 from prometheus_client import Gauge, Summary |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
13 from rdflib import Literal, Namespace |
3 | 14 from starlette.applications import Starlette |
15 from starlette.routing import Route | |
16 from starlette.staticfiles import StaticFiles | |
17 from starlette_exporter import PrometheusMiddleware, handle_metrics | |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
18 |
3 | 19 import background_loop |
20 from patchablegraph import PatchableGraph | |
21 from patchablegraph.handler import StaticGraph, GraphEvents | |
22 # from rdfdoc import Doc | |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
23 from twilight import isWithinTwilight |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
24 |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
25 ROOM = Namespace("http://projects.bigasterisk.com/room/") |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
26 DEV = Namespace("http://projects.bigasterisk.com/device/") |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
27 |
3 | 28 logging.basicConfig(level=logging.INFO) |
29 | |
30 STAT_UPDATE_UP = Gauge('background_loop_up', 'not erroring') | |
31 STAT_UPDATE_CALLS = Summary('background_loop_calls', 'calls') | |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
32 |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
33 |
3 | 34 def update(masterGraph): |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
35 |
3 | 36 def stmt(s, p, o): |
37 masterGraph.patchObject(ROOM.environment, s, p, o) | |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
38 |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
39 now = datetime.datetime.now(tzlocal()) |
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.localHour, Literal(now.hour)) |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
42 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
|
43 |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
44 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
|
45 |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
46 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
|
47 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
|
48 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
|
49 |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
50 for offset in range(-12, 7): |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
51 d = now.date() + datetime.timedelta(days=offset) |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
52 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
|
53 stmt(DEV.calendar, ROOM.daysToLastFridayOfMonth, Literal(offset)) |
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 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
|
56 |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
57 |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
58 def main(): |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
59 masterGraph = PatchableGraph() |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
60 |
3 | 61 asyncio.create_task(background_loop.loop_forever(lambda first: update(masterGraph), 1, STAT_UPDATE_UP, STAT_UPDATE_CALLS)) |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
62 |
3 | 63 app = Starlette( |
64 debug=True, | |
65 routes=[ | |
66 Route('/', StaticFiles(directory='.', html=True)), | |
67 Route('/graph/environment', StaticGraph(masterGraph)), | |
68 Route('/graph/environment/events', GraphEvents(masterGraph)), | |
69 # Route('/doc', Doc), | |
70 ]) | |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
71 |
3 | 72 app.add_middleware(PrometheusMiddleware, app_name='environment') |
73 app.add_route("/metrics", handle_metrics) | |
74 return app | |
0
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
75 |
3c1bc3bc5a6c
pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff
changeset
|
76 |
3 | 77 app = main() |