Added healthcheck, Added readyz, livez endpoints
This commit is contained in:
28
app/main.py
28
app/main.py
@@ -1,7 +1,11 @@
|
|||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
|
from sqlalchemy import text
|
||||||
|
from sqlalchemy.exc import SQLAlchemyError
|
||||||
|
from starlette.responses import JSONResponse
|
||||||
|
|
||||||
from app.api.v1 import auth, keys
|
from app.api.v1 import auth, keys
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
|
from app.db.session import AsyncSessionLocal
|
||||||
|
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title=settings.PROJECT_NAME
|
title=settings.PROJECT_NAME
|
||||||
@@ -9,7 +13,25 @@ app = FastAPI(
|
|||||||
app.include_router(auth.router, prefix=f"{settings.API_V1_STR}/auth", tags=["auth"])
|
app.include_router(auth.router, prefix=f"{settings.API_V1_STR}/auth", tags=["auth"])
|
||||||
app.include_router(keys.router, prefix=f"{settings.API_V1_STR}/keys", tags=["keys"])
|
app.include_router(keys.router, prefix=f"{settings.API_V1_STR}/keys", tags=["keys"])
|
||||||
|
|
||||||
# Health endpoint (useful for docker, agent and uptime)
|
# Is the API running?
|
||||||
|
@app.get("/livez")
|
||||||
|
async def livez():
|
||||||
|
return {"status": "ok"}
|
||||||
|
|
||||||
|
# Is the application ready (including db)?
|
||||||
|
@app.get("/readyz")
|
||||||
|
async def readyz():
|
||||||
|
try:
|
||||||
|
async with AsyncSessionLocal() as session:
|
||||||
|
await session.execute(text("SELECT 1"))
|
||||||
|
return {"status": "ok", "db": "up"}
|
||||||
|
except SQLAlchemyError:
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=503,
|
||||||
|
content={"status": "degraded", "db": "down"},
|
||||||
|
)
|
||||||
|
|
||||||
|
# Is the application healthy (ready)?
|
||||||
@app.get("/healthz")
|
@app.get("/healthz")
|
||||||
def healthz():
|
async def healthz():
|
||||||
return {"ok": True}
|
return await readyz() # alias
|
||||||
@@ -43,6 +43,11 @@ services:
|
|||||||
# ports:
|
# ports:
|
||||||
# - "8000:8000"
|
# - "8000:8000"
|
||||||
command: uvicorn app.main:app --host 0.0.0.0 --port 8000
|
command: uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:8000/healthz"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
pgdata:
|
pgdata:
|
||||||
Reference in New Issue
Block a user