diff --git a/src/xmpp_api/api/routers/v1/__init__.py b/src/xmpp_api/api/routers/v1/__init__.py index ff9a9fb..c31298a 100644 --- a/src/xmpp_api/api/routers/v1/__init__.py +++ b/src/xmpp_api/api/routers/v1/__init__.py @@ -1,8 +1,9 @@ from fastapi import APIRouter -from xmpp_api.api.routers.v1 import bot, user +from xmpp_api.api.routers.v1 import bot, user, health router = APIRouter(prefix="/api/v1") router.include_router(bot.router) router.include_router(user.router) +router.include_router(health.router) diff --git a/src/xmpp_api/api/routers/v1/health.py b/src/xmpp_api/api/routers/v1/health.py new file mode 100644 index 0000000..88e6b94 --- /dev/null +++ b/src/xmpp_api/api/routers/v1/health.py @@ -0,0 +1,31 @@ +from fastapi import APIRouter, Response + +from xmpp_api.api.types.health import HealthResponse, ReadinessResponse +from xmpp_api.xmpp.component import XmppApiComponentDep + + +router = APIRouter(prefix="/health") + + +@router.get("/readiness") +def get_is_ready( + component: XmppApiComponentDep, response: Response +) -> ReadinessResponse: + component_ready = component.is_connected() + + response.status_code = 200 if component_ready else 503 + return ReadinessResponse( + component=component_ready, + ) + + +@router.get("/healthy") +def get_is_healthy( + component: XmppApiComponentDep, response: Response +) -> HealthResponse: + component_ready = component.is_connected() + + response.status_code = 200 if component_ready else 503 + return HealthResponse( + component=component_ready, + ) diff --git a/src/xmpp_api/api/types/health.py b/src/xmpp_api/api/types/health.py new file mode 100644 index 0000000..4d71800 --- /dev/null +++ b/src/xmpp_api/api/types/health.py @@ -0,0 +1,19 @@ +from pydantic import BaseModel + + +class ReadinessResponse(BaseModel): + """ + API response for the readiness endpoint + """ + + # Is the component connected + component: bool + + +class HealthResponse(BaseModel): + """ + API response for the health endpoint + """ + + # Is the component healthy + component: bool