root 5d8ad901d1 Initial commit: Pipeline notarial complet
- Infrastructure complète de traitement de documents notariaux
- API FastAPI d'ingestion et d'orchestration
- Pipelines Celery pour le traitement asynchrone
- Support des formats PDF, JPEG, PNG, TIFF, HEIC
- OCR avec Tesseract et correction lexicale
- Classification automatique des documents avec Ollama
- Extraction de données structurées
- Indexation dans AnythingLLM et OpenSearch
- Système de vérifications et contrôles métier
- Base de données PostgreSQL pour le métier
- Stockage objet avec MinIO
- Base de données graphe Neo4j
- Recherche plein-texte avec OpenSearch
- Supervision avec Prometheus et Grafana
- Scripts d'installation pour Debian
- Documentation complète
- Tests unitaires et de performance
- Service systemd pour le déploiement
- Scripts de déploiement automatisés
2025-09-08 22:05:22 +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, Document
from domain.models import HealthResponse
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"}