Saltar a contenido

📊 Endpoint de Monitoreo

Para facilitar la observabilidad y el monitoreo del estado de la Capa de Ingesta, el P2P Dashboard expone un endpoint administrativo que proporciona un resumen de las métricas clave de las ejecuciones de los Workers. Este endpoint es crucial para sistemas de monitoreo externos o para una rápida verificación manual del estado del sistema.

GET /admin/monitoring/summary

Este endpoint devuelve un objeto JSON con indicadores clave de rendimiento (KPIs) relacionados con las operaciones de ingesta de datos.

  • Descripción: Proporciona un resumen agregado del estado de las ejecuciones de ingesta, incluyendo información sobre el último run, errores recientes y volumen de ofertas procesadas.
  • Autenticación: Requiere autenticación JWT. Solo los usuarios con privilegios de administrador pueden acceder a este endpoint.

Función Subyacente (get_run_stats(db))

El endpoint /admin/monitoring/summary se basa en una función interna, get_run_stats(db), que consulta la base de datos para recopilar la información necesaria. Esta función se encuentra típicamente en p2p_api/services.py o p2p_api/crud.py.

# p2p_api/services.py (ejemplo conceptual)

from sqlalchemy.orm import Session
from sqlalchemy import func, desc
from datetime import datetime, timedelta

from p2p_api.models import Run, Offer

def get_run_stats(db: Session):
    # Último run exitoso
    last_successful_run = db.query(Run)
                                .filter(Run.error_message.is_(None))
                                .order_by(desc(Run.fetched_at))
                                .first()

    # Conteo de errores en las últimas 24 horas
    errors_last_24h = db.query(Run)
                        .filter(Run.error_message.isnot(None),
                                Run.fetched_at >= datetime.utcnow() - timedelta(hours=24))
                        .count()

    # Total de ofertas ingestas en las últimas 24 horas
    total_offers_last_24h = db.query(func.sum(Run.total_offers))
                                .filter(Run.fetched_at >= datetime.utcnow() - timedelta(hours=24))
                                .scalar()
    if total_offers_last_24h is None: # Manejar caso donde no hay runs en 24h
        total_offers_last_24h = 0

    return {
        "last_successful_run_at": last_successful_run.fetched_at.isoformat() if last_successful_run else None,
        "last_successful_run_id": str(last_successful_run.id) if last_successful_run else None,
        "errors_in_last_24_hours": errors_last_24h,
        "total_offers_ingested_last_24_hours": total_offers_last_24h,
        "status": "OK" if errors_last_24h == 0 else "WARNING"
    }

Ejemplo de Respuesta (Response)

HTTP/1.1 200 OK
Content-Type: application/json

{
  "last_successful_run_at": "2025-07-30T10:30:00.123456",
  "last_successful_run_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
  "errors_in_last_24_hours": 0,
  "total_offers_ingested_last_24_hours": 15000,
  "status": "OK"
}

Respuesta con Advertencia (WARNING):

HTTP/1.1 200 OK
Content-Type: application/json

{
  "last_successful_run_at": "2025-07-30T08:15:00.000000",
  "last_successful_run_id": "b2c3d4e5-f6a7-8901-2345-67890abcdef0",
  "errors_in_last_24_hours": 5,
  "total_offers_ingested_last_24_hours": 12000,
  "status": "WARNING"
}

Uso del Endpoint de Monitoreo

Este endpoint es ideal para:

  • Sistemas de Monitoreo Externos: Integrar con herramientas como Prometheus, Grafana, o soluciones de APM (Application Performance Monitoring) para visualizar el estado del sistema en tiempo real y configurar alertas.
  • Verificación Manual: Los administradores pueden consultar rápidamente este endpoint para obtener una visión general del estado de la ingesta de datos.
  • Automatización: Utilizar la información de este endpoint en scripts de automatización para tomar decisiones basadas en el estado del sistema (ej. reiniciar Workers si no hay ingestas recientes).

Al proporcionar esta información de manera estructurada, el P2P Dashboard facilita su integración en un ecosistema de monitoreo más amplio, asegurando la estabilidad y confiabilidad de la ingesta de datos.