diff pi_mqtt.py @ 3:0cc41259fddd

healthcheck
author drewp@bigasterisk.com
date Sun, 10 Dec 2023 17:26:52 -0800
parents 3989f073ed9e
children 759f0ba7d345
line wrap: on
line diff
--- a/pi_mqtt.py	Fri Sep 01 23:58:24 2023 -0700
+++ b/pi_mqtt.py	Sun Dec 10 17:26:52 2023 -0800
@@ -7,7 +7,7 @@
 from prometheus_client import Gauge
 from starlette.applications import Starlette
 from starlette.requests import Request
-from starlette.responses import JSONResponse
+from starlette.responses import PlainTextResponse
 from starlette.routing import Route
 from starlette_exporter import PrometheusMiddleware, handle_metrics
 
@@ -16,9 +16,12 @@
 logging.basicConfig(level=logging.INFO)
 log = logging.getLogger()
 
+lastSuccessfulPoll = time.time()
 
-def hello(request: Request) -> JSONResponse:
-    return JSONResponse({"demo": "hello"})
+def health(request: Request) -> PlainTextResponse:
+    if time.time() - lastSuccessfulPoll > 10:
+        return PlainTextResponse('err', status_code=500)
+    return PlainTextResponse('ok', status_code=200)
 
 
 @dataclass
@@ -27,6 +30,7 @@
     last_motion = 0
 
     def poll(self, first_run=False):
+        global lastSuccessfulPoll
         now = time.time()
         mo = self.garage.read(4)
         SENSOR_MOTION.labels(loc='ga').set(mo)
@@ -36,6 +40,7 @@
         light_on = self.last_motion > now - 20 * 60
         OUTPUT_LIGHT.labels(loc='ga').set(light_on)
         self.garage.write(15, not light_on)
+        lastSuccessfulPoll = time.time()
 
 
 def main():
@@ -47,7 +52,7 @@
     background_loop.loop_forever(poller.poll, 1)
 
     app = Starlette(debug=True, routes=[
-        Route('/api/hello', hello),
+        Route('/health', health),
     ])
 
     app.add_middleware(PrometheusMiddleware, app_name='pi_mqtt')