Nivel 100: Auditoría de Seguridad (Alerts History)

Objetivo

Aprender a auditar el comportamiento del sistema a través del tiempo. Verás cómo consultar el historial completo de alertas disparadas, incluso desde diferentes instancias de pipelines que comparten la misma base de datos de seguimiento.

Conceptos Clave

  • Persistencia de Alertas: Las alertas no solo se disparan en consola; se guardan con metadatos completos en SQLite.

  • Tracker Querying: Uso de get_fired_alerts() para extraer inteligencia operacional.

  • Correlación de Eventos: Cómo múltiples ejecuciones (L100 y L100b) contribuyen a un historial común de salud del sistema.

¿Qué estamos probando?

Estamos probando la capacidad de “memoria” del motor. Configuramos un umbral de alerta muy sensible (duración > 1ms) para forzar su activación y luego validamos que el sistema es capaz de recordar y listar estas alertas con precisión, diferenciando entre distintas ejecuciones.

Código Fuente

"""
DEMO LEVEL 100: Alerts Historial
--------------------------------
Adds: View history completo de alerts.
Continues: L99.

DIAGRAM:
get_fired_alerts() en pipeline diferente
"""

import time

from wpipe import Pipeline, step, Metric, Severity

@step(name="task")
def task(data: dict) -> None:

    """Task step.

    Args:

        data: Input data for the step.

    Returns:

        dict: Result of the step.

    """
    time.sleep(0.02)
    return {"ok": True}

if __name__ == "__main__":
    print(">>> Alerts history...")

    pipe = Pipeline(
        pipeline_name="viaje_l100_history",
        verbose=True,
        tracking_db="output/alerts100.db",
    )

    pipe.tracker.add_alert_threshold(
        metric=Metric.PIPELINE_DURATION,
        expression=">1",
        severity=Severity.WARNING,
    )

    pipe.set_steps([task])
    pipe.run({})

    print(">>> Running second pipeline...")
    pipe2 = Pipeline(
        pipeline_name="viaje_l100b",
        verbose=False,
        tracking_db="output/alerts100.db",
    )
    pipe2.set_steps([task])
    pipe2.run({})

    alerts = pipe.tracker.get_fired_alerts()
    print(f"\n🚨 Total in history: {len(alerts)}")

Resultado de Ejecución


>>> Alerts history...
[PIPELINE STATUS] Registered: PIPE-E91B7989
viaje_l100_history ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
[PIPELINE STATUS] PIPE-E91B7989: COMPLETED
>>> Running second pipeline...
viaje_l100_history ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
viaje_l100b        ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00

🚨 Total in history: 0