diff light_bridge.py @ 27:32cfefe3155b

try harder to crash if there's an mqtt error, so k8s does a full restart
author drewp@bigasterisk.com
date Sat, 23 Mar 2024 15:25:02 -0700
parents cee43f550577
children
line wrap: on
line diff
--- a/light_bridge.py	Sat Feb 03 20:56:27 2024 -0800
+++ b/light_bridge.py	Sat Mar 23 15:25:02 2024 -0700
@@ -4,10 +4,11 @@
 import asyncio
 import json
 import logging
+import os
 import time
 from functools import partial
-from color import Color
 
+import uvicorn
 from patchablegraph import PatchableGraph
 from patchablegraph.handler import GraphEvents, StaticGraph
 from sse_starlette.sse import EventSourceResponse
@@ -17,8 +18,10 @@
 from starlette.routing import Route
 from starlette_exporter import PrometheusMiddleware, handle_metrics
 
+from color import Color
 from light import Lights
 from mqtt_io import MqttIo
+
 logging.basicConfig(level=logging.INFO)
 log = logging.getLogger()
 
@@ -29,6 +32,7 @@
     await light.setColor(Color.fromHex(body))
     return JSONResponse(light.to_dict())
 
+
 async def lightNames(lights: Lights, request: Request) -> JSONResponse:
     return JSONResponse({'lightNames': lights.allNames()})
 
@@ -48,6 +52,11 @@
     return EventSourceResponse(g())
 
 
+def crash(request: Request):
+    log.info('crash requested')
+    os.abort()
+
+
 def main():
     mqtt = MqttIo()
     lights = Lights(mqtt)
@@ -59,6 +68,7 @@
                         Route('/api/table', partial(table, lights)),
                         Route('/api/graph', StaticGraph(graph)),
                         Route('/api/graph/events', GraphEvents(graph)),
+                        Route('/api/crash', crash),
                     ])
 
     app.add_middleware(PrometheusMiddleware, app_name='light-bridge')
@@ -67,4 +77,4 @@
     return app
 
 
-app = main()
+uvicorn.run(main, host="0.0.0.0", port=8001, log_level=logging.INFO, factory=True)