From 1d8b1e9082cc6cd38dc3bbe4b2f03d1647148e47 Mon Sep 17 00:00:00 2001 From: Thomas Carmet <8408330+tcarmet@users.noreply.github.com> Date: Tue, 19 Dec 2023 09:14:50 -0800 Subject: [PATCH] PTFE-1196 ping redis on healthcheck calls (#503) --- runner_manager/routers/_health.py | 18 ++++++++++++++++-- tests/api/test_health.py | 17 ++++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/runner_manager/routers/_health.py b/runner_manager/routers/_health.py index 5927db75..916ded57 100644 --- a/runner_manager/routers/_health.py +++ b/runner_manager/routers/_health.py @@ -1,9 +1,23 @@ -from fastapi import APIRouter, Response +import logging + +from fastapi import APIRouter, Depends, Response +from redis import Redis + +from runner_manager.dependencies import get_redis router = APIRouter(prefix="/_health") +log = logging.getLogger(__name__) + @router.get("/", status_code=200) -def healthcheck(): +def healthcheck(r: Redis = Depends(get_redis)): """Healthcheck endpoint that answers to GET requests on /_health""" + + try: + r.ping() + except Exception as exp: + log.error("Redis healthcheck failed: %s", exp) + return Response(status_code=500) + return Response(status_code=200) diff --git a/tests/api/test_health.py b/tests/api/test_health.py index dde161e0..33b6f555 100644 --- a/tests/api/test_health.py +++ b/tests/api/test_health.py @@ -1,3 +1,18 @@ +from redis import Redis + +from runner_manager.dependencies import get_redis + + def test_healthcheck(client): - response = client.get("/_health") + response = client.get("/_health/") + assert response.status_code == 200 + + +def test_healthcheck_redis_unavailable(client, fastapp): + fake_connection = Redis.from_url("redis://localhost:63799/0") + fastapp.dependency_overrides[get_redis] = lambda: fake_connection + response = client.get("/_health/") + assert response.status_code == 500 + fastapp.dependency_overrides[get_redis] = get_redis + response = client.get("/_health/") assert response.status_code == 200