Nivel 68: demo_level68.py

Este es el nivel 68 del tour de aprendizaje.

Código Fuente

"""
DEMO LEVEL 68: Múltiples Alerts
------------------------------------
Adds: Múltiples alerts con diferentes severidades.
Continues: L67.

DIAGRAM:
(Múltiples alerts: CRITICAL, WARNING, INFO)
"""

import time

from wpipe import Pipeline, step, Metric, Severity

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

    """Validar datos step.

    Args:

        data: Input data for the step.

    Returns:

        dict: Result of the step.

    """
    time.sleep(0.05)
    print("✅ Datos válidos")
    return {"valido": True}

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

    """Process step.

    Args:

        data: Input data for the step.

    Returns:

        dict: Result of the step.

    """
    time.sleep(0.2)
    print("📊Datos procesados")
    return {"ok": True}

if __name__ == "__main__":
    pipe = Pipeline(
        pipeline_name="viaje_l68_multiplealerts",
        verbose=True,
        tracking_db="output/multi_alerts.db",
    )

    pipe.tracker.add_alert_threshold(
        metric=Metric.PIPELINE_DURATION,
        expression=">100",
        severity=Severity.CRITICAL,
        steps=[
            (
                lambda d: print("🚨 [CRITICAL] Pipeline muy lento!"),
                "CriticalAlert",
                "v1.0",
            )
        ],
    )

    pipe.tracker.add_alert_threshold(
        metric=Metric.PIPELINE_DURATION,
        expression=">50",
        severity=Severity.WARNING,
        steps=[(lambda d: print("⚠️ [WARNING] Pipeline lento"), "WarnAlert", "v1.0")],
    )

    pipe.set_steps([validar_datos, process])
    print("\n>>> Probando múltiples alerts...\n")
    pipe.run({})

Resultado de Ejecución


>>> Probando múltiples alerts...

[PIPELINE STATUS] Registered: PIPE-FE0C4C6F ✅ Datos válidos 📊Datos procesados viaje_l68_multiplealerts ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 [PIPELINE STATUS] PIPE-FE0C4C6F: COMPLETED