- 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
100 lines
3.0 KiB
Python
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"}
|