Nicolas Cantu 7f96fd439d fix: Corrections finales pour le déploiement Docker
- Correction des imports dans domain/models.py (ajout des enums et modèles Pydantic)
- Correction des imports dans routes/ (documents, health, admin)
- Correction de la fonction init_db() dans app.py (suppression await)
- Correction de la configuration MinIO (suppression du protocole http://)
- Correction de la fonction get_detailed_verification_report (async)
- Correction des imports StorageManager dans tasks/notary_tasks.py
- Correction du Dockerfile worker (contexte de build et chemins)
- Suppression de la dépendance python-alto non trouvée

L'API est maintenant fonctionnelle et accessible sur http://localhost:8000
2025-09-10 17:56:10 +02:00

100 lines
3.0 KiB
Python

"""
Routes de santé et monitoring
"""
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from datetime import datetime
import os
import requests
import logging
from domain.database import get_db
from domain.models import HealthResponse, Document
logger = logging.getLogger(__name__)
router = APIRouter()
@router.get("/health", response_model=HealthResponse)
async def health_check(db: Session = Depends(get_db)):
"""
Vérification de la santé de l'API et des services
"""
services_status = {}
# Vérification de la base de données
try:
db.query(Document).limit(1).all()
services_status["database"] = "healthy"
except Exception as e:
logger.error(f"Erreur base de données: {e}")
services_status["database"] = "unhealthy"
# Vérification de Redis
try:
from tasks.enqueue import r
r.ping()
services_status["redis"] = "healthy"
except Exception as e:
logger.error(f"Erreur Redis: {e}")
services_status["redis"] = "unhealthy"
# Vérification de MinIO
try:
minio_endpoint = os.getenv("MINIO_ENDPOINT", "http://minio:9000")
response = requests.get(f"{minio_endpoint}/minio/health/live", timeout=5)
if response.status_code == 200:
services_status["minio"] = "healthy"
else:
services_status["minio"] = "unhealthy"
except Exception as e:
logger.error(f"Erreur MinIO: {e}")
services_status["minio"] = "unhealthy"
# Vérification d'Ollama
try:
ollama_url = os.getenv("OLLAMA_BASE_URL", "http://ollama:11434")
response = requests.get(f"{ollama_url}/api/tags", timeout=5)
if response.status_code == 200:
services_status["ollama"] = "healthy"
else:
services_status["ollama"] = "unhealthy"
except Exception as e:
logger.error(f"Erreur Ollama: {e}")
services_status["ollama"] = "unhealthy"
# Vérification d'AnythingLLM
try:
anyllm_url = os.getenv("ANYLLM_BASE_URL", "http://anythingllm:3001")
response = requests.get(f"{anyllm_url}/api/health", timeout=5)
if response.status_code == 200:
services_status["anythingllm"] = "healthy"
else:
services_status["anythingllm"] = "unhealthy"
except Exception as e:
logger.error(f"Erreur AnythingLLM: {e}")
services_status["anythingllm"] = "unhealthy"
# Détermination du statut global
overall_status = "healthy" if all(status == "healthy" for status in services_status.values()) else "degraded"
return HealthResponse(
status=overall_status,
timestamp=datetime.now(),
version="1.0.0",
services=services_status
)
@router.get("/health/ready")
async def readiness_check():
"""
Vérification de disponibilité pour Kubernetes
"""
return {"status": "ready"}
@router.get("/health/live")
async def liveness_check():
"""
Vérification de vivacité pour Kubernetes
"""
return {"status": "alive"}