6033967e6a
Ship Keystone auth, multi-service handlers (Yoga→Dalmatian), Compose/Helm packaging, API contract packs, and pytest/Pulumi coverage labs.
38 lines
1014 B
Python
38 lines
1014 B
Python
"""Kubernetes-compatible health endpoints."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends, Response, status
|
|
from pydantic import BaseModel
|
|
|
|
from app.db.pool import Database
|
|
from app.dependencies import get_database
|
|
|
|
router = APIRouter(prefix="/health", tags=["Simulator"])
|
|
|
|
|
|
class HealthResponse(BaseModel):
|
|
status: str
|
|
|
|
|
|
@router.get("/live", response_model=HealthResponse)
|
|
async def live() -> HealthResponse:
|
|
"""Report process liveness without checking dependencies."""
|
|
|
|
return HealthResponse(status="ok")
|
|
|
|
|
|
@router.get("/ready", response_model=HealthResponse)
|
|
async def ready(
|
|
response: Response,
|
|
database: Annotated[Database, Depends(get_database)],
|
|
) -> HealthResponse:
|
|
"""Report whether the required database dependency is usable."""
|
|
|
|
if await database.is_ready():
|
|
return HealthResponse(status="ok")
|
|
response.status_code = status.HTTP_503_SERVICE_UNAVAILABLE
|
|
return HealthResponse(status="unavailable")
|