Merge pull request #77 from chronicc/add-healthcheck

add a healthcheck for load balancers
This commit is contained in:
Guilhem Saurel 2023-04-06 13:18:18 +02:00 committed by GitHub
commit f1de3ad1dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 0 deletions

View File

@ -56,6 +56,25 @@ options:
-v, --verbose increment verbosity level
```
### Healthcheck
For load balancers which require a healthcheck endpoint to validate the availability of the service, the `/health` path can be used. The endpoint will return a **HTTP 200** status and a json document.
Using the Healthcheck endpoint with Traefik and docker-compose:
```yaml
version: '3'
...
services:
bot:
...
labels:
traefik.enable: "true"
traefik.http.routers.matrix-webhook.rule: "Host(`${CHATONS_SERVICE:-matrixwebhook}.${CHATONS_DOMAIN:-localhost}`)"
traefik.http.services.matrix-webhook.loadbalancer.healthcheck.path: /health
```
## Dev
@ -84,6 +103,7 @@ docker-compose up -d
curl -d '{"body":"new contrib from toto: [44](http://radio.localhost/map/#44)", "key": "secret"}' \
'http://matrixwebhook.localhost/!DPrUlnwOhBEfYwsDLh:matrix.org'
```
(or localhost:4785 without docker)
### For Github

View File

@ -18,6 +18,11 @@ async def matrix_webhook(request):
This one handles a POST, checks its content, and forwards it to the matrix room.
"""
LOGGER.debug(f"Handling {request=}")
# healthcheck
if request.rel_url.path == "/health":
return utils.create_json_response(HTTPStatus.OK, "OK")
data_b = await request.read()
try:

View File

@ -171,3 +171,7 @@ class BotTest(unittest.IsolatedAsyncioTestCase):
bot_req({"body": "Re"}, KEY, room.room_id),
{"status": 200, "ret": "OK"},
)
async def test_healthcheck(self):
"""Check the healthcheck endpoint returns 200."""
self.assertEqual(bot_req(room_id="health"), {"status": 200, "ret": "OK"})