Files
llm-monitor/app/api/health.py
T
Luca Sacchi Ricciardi 4b782ffdc8 docs: add comprehensive README and project scaffolding
- README completo con istruzioni di installazione, configurazione e utilizzo
- API Swagger/OpenAPI documentata
- File env.example con variabili di configurazione
- Dockerfile multi-stage ottimizzato
- Docker Compose con Ollama e LLM Monitor
- Struttura completa dell'app FastAPI (main.py, config, api routes)
- Servizio client Ollama reusabile
- Dashboard web HTML con TailwindCSS
- Test suite con pytest
- Makefile per comandi comuni
- CONTRIBUTING.md per i contributori
- LICENSE MIT
- .editorconfig e .dockerignore
- requirements.txt e requirements-dev.txt
2026-04-24 19:11:58 +02:00

71 lines
1.8 KiB
Python

"""
Health check endpoints
"""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from datetime import datetime
import requests
import logging
from app.config import settings
logger = logging.getLogger(__name__)
router = APIRouter()
class HealthResponse(BaseModel):
status: str
ollama_status: str
timestamp: datetime
class Config:
json_schema_extra = {
"example": {
"status": "healthy",
"ollama_status": "online",
"timestamp": "2024-01-15T10:30:00Z"
}
}
@router.get("/health", response_model=HealthResponse)
async def health_check():
"""
Health check dell'API e dello stato di Ollama
Returns:
HealthResponse: Status dell'API e di Ollama
"""
try:
# Check Ollama
response = requests.get(
f"{settings.OLLAMA_HOST}/api/tags",
timeout=settings.OLLAMA_TIMEOUT
)
ollama_status = "online" if response.status_code == 200 else "offline"
except Exception as e:
logger.warning(f"Ollama health check failed: {e}")
ollama_status = "offline"
return HealthResponse(
status="healthy",
ollama_status=ollama_status,
timestamp=datetime.utcnow()
)
@router.get("/ready")
async def ready():
"""
Readiness probe per Kubernetes/Docker
"""
try:
response = requests.get(
f"{settings.OLLAMA_HOST}/api/tags",
timeout=5
)
if response.status_code == 200:
return {"status": "ready"}
else:
raise HTTPException(status_code=503, detail="Service unavailable")
except Exception as e:
logger.error(f"Readiness check failed: {e}")
raise HTTPException(status_code=503, detail="Service unavailable")