# HG changeset patch # User drewp@bigasterisk.com # Date 1711232702 25200 # Node ID 32cfefe3155b379bb1a58ed954993a4ecb4d7582 # Parent 33b3eb24506e73a2de713d77089fe1727ae31894 try harder to crash if there's an mqtt error, so k8s does a full restart diff -r 33b3eb24506e -r 32cfefe3155b deploy.yaml --- a/deploy.yaml Sat Feb 03 20:56:27 2024 -0800 +++ b/deploy.yaml Sat Mar 23 15:25:02 2024 -0700 @@ -40,11 +40,8 @@ command: - pdm - run - - uvicorn - - '--port=8001' - - '--host=0.0.0.0' - - '--reload' - - 'light_bridge:app' + - python + - light_bridge.py --- apiVersion: v1 kind: Service diff -r 33b3eb24506e -r 32cfefe3155b light_bridge.py --- 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) diff -r 33b3eb24506e -r 32cfefe3155b mqtt_io.py --- a/mqtt_io.py Sat Feb 03 20:56:27 2024 -0800 +++ b/mqtt_io.py Sat Mar 23 15:25:02 2024 -0700 @@ -2,6 +2,7 @@ import inspect import json import logging +import os import time from typing import Callable, cast import weakref @@ -109,6 +110,7 @@ except aiomqtt.MqttError as e: MQTT_CONNECTED.set(0) log.error(e, exc_info=True) + os.abort() async def _connectAndRead(self): async with self.client: diff -r 33b3eb24506e -r 32cfefe3155b pdm.lock --- a/pdm.lock Sat Feb 03 20:56:27 2024 -0800 +++ b/pdm.lock Sat Mar 23 15:25:02 2024 -0700 @@ -5,7 +5,7 @@ groups = ["default"] strategy = ["cross_platform", "inherit_metadata"] lock_version = "4.4.1" -content_hash = "sha256:b3fe693267977a2e72f6da23fbd5096fce62a9d204550479e044796d39d8043f" +content_hash = "sha256:4359b7e7203aa1b1ef1eef3919d7098ccbe7430e6f60ab131a27326e996fe156" [[package]] name = "aiohttp" @@ -714,7 +714,7 @@ [[package]] name = "uvicorn" -version = "0.27.0" +version = "0.29.0" requires_python = ">=3.8" summary = "The lightning-fast ASGI server." groups = ["default"] @@ -723,13 +723,13 @@ "h11>=0.8", ] files = [ - {file = "uvicorn-0.27.0-py3-none-any.whl", hash = "sha256:890b00f6c537d58695d3bb1f28e23db9d9e7a17cbcc76d7457c499935f933e24"}, - {file = "uvicorn-0.27.0.tar.gz", hash = "sha256:c855578045d45625fd027367f7653d249f7c49f9361ba15cf9624186b26b8eb6"}, + {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, + {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, ] [[package]] name = "uvicorn" -version = "0.27.0" +version = "0.29.0" extras = ["standard"] requires_python = ">=3.8" summary = "The lightning-fast ASGI server." @@ -739,14 +739,14 @@ "httptools>=0.5.0", "python-dotenv>=0.13", "pyyaml>=5.1", - "uvicorn==0.27.0", + "uvicorn==0.29.0", "uvloop!=0.15.0,!=0.15.1,>=0.14.0; (sys_platform != \"cygwin\" and sys_platform != \"win32\") and platform_python_implementation != \"PyPy\"", "watchfiles>=0.13", "websockets>=10.4", ] files = [ - {file = "uvicorn-0.27.0-py3-none-any.whl", hash = "sha256:890b00f6c537d58695d3bb1f28e23db9d9e7a17cbcc76d7457c499935f933e24"}, - {file = "uvicorn-0.27.0.tar.gz", hash = "sha256:c855578045d45625fd027367f7653d249f7c49f9361ba15cf9624186b26b8eb6"}, + {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, + {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, ] [[package]] diff -r 33b3eb24506e -r 32cfefe3155b pyproject.toml --- a/pyproject.toml Sat Feb 03 20:56:27 2024 -0800 +++ b/pyproject.toml Sat Mar 23 15:25:02 2024 -0700 @@ -9,7 +9,7 @@ "ruff>=0.0.286", "starlette-exporter>=0.13.0", "starlette>=0.20.4", - "uvicorn[standard]>=0.18.2", + "uvicorn>=0.29.0", "background-loop>=1.3.0", "patchablegraph>=1.5.0", "rdfdb==0.24.0", diff -r 33b3eb24506e -r 32cfefe3155b skaffold.yaml --- a/skaffold.yaml Sat Feb 03 20:56:27 2024 -0800 +++ b/skaffold.yaml Sat Mar 23 15:25:02 2024 -0700 @@ -9,7 +9,7 @@ sync: infer: - 'src/**' - - '*.py' + #- '*.py' tagPolicy: dateTime: format: 2006-01-02_15-04-05