comparison pi_mqtt.py @ 4:759f0ba7d345

crash (and get restarted) better
author drewp@bigasterisk.com
date Sat, 23 Mar 2024 16:15:34 -0700
parents 0cc41259fddd
children 492eef562a88
comparison
equal deleted inserted replaced
3:0cc41259fddd 4:759f0ba7d345
2 import time 2 import time
3 from dataclasses import dataclass 3 from dataclasses import dataclass
4 4
5 import background_loop 5 import background_loop
6 import pigpio 6 import pigpio
7 import uvicorn
7 from prometheus_client import Gauge 8 from prometheus_client import Gauge
8 from starlette.applications import Starlette 9 from starlette.applications import Starlette
9 from starlette.requests import Request 10 from starlette.requests import Request
10 from starlette.responses import PlainTextResponse 11 from starlette.responses import PlainTextResponse
11 from starlette.routing import Route 12 from starlette.routing import Route
15 OUTPUT_LIGHT = Gauge('output_light', 'light level', ['loc']) 16 OUTPUT_LIGHT = Gauge('output_light', 'light level', ['loc'])
16 logging.basicConfig(level=logging.INFO) 17 logging.basicConfig(level=logging.INFO)
17 log = logging.getLogger() 18 log = logging.getLogger()
18 19
19 lastSuccessfulPoll = time.time() 20 lastSuccessfulPoll = time.time()
21
20 22
21 def health(request: Request) -> PlainTextResponse: 23 def health(request: Request) -> PlainTextResponse:
22 if time.time() - lastSuccessfulPoll > 10: 24 if time.time() - lastSuccessfulPoll > 10:
23 return PlainTextResponse('err', status_code=500) 25 return PlainTextResponse('err', status_code=500)
24 return PlainTextResponse('ok', status_code=200) 26 return PlainTextResponse('ok', status_code=200)
58 app.add_middleware(PrometheusMiddleware, app_name='pi_mqtt') 60 app.add_middleware(PrometheusMiddleware, app_name='pi_mqtt')
59 app.add_route("/metrics", handle_metrics) 61 app.add_route("/metrics", handle_metrics)
60 return app 62 return app
61 63
62 64
63 app = main() 65 uvicorn.run(main, host="0.0.0.0", port=8001, log_level=logging.INFO, factory=True)