Source code for loom.core.engine.events
from __future__ import annotations
from dataclasses import dataclass
from enum import StrEnum
[docs]
class EventKind(StrEnum):
"""Discriminator for runtime and compile-time events.
Used by ``MetricsAdapter`` and structured loggers to route events
without isinstance checks.
"""
COMPILE_START = "compile_start"
COMPILE_DONE = "compile_done"
EXEC_START = "exec_start"
STEP_DONE = "step_done"
EXEC_DONE = "exec_done"
EXEC_ERROR = "exec_error"
JOB_DISPATCHED = "job_dispatched"
JOB_STARTED = "job_started"
JOB_SUCCEEDED = "job_succeeded"
JOB_RETRYING = "job_retrying"
JOB_EXHAUSTED = "job_exhausted"
[docs]
@dataclass(frozen=True)
class RuntimeEvent:
"""Immutable event emitted by the compiler and runtime executor.
Consumed by ``MetricsAdapter`` and structured loggers. Carries no
transport-specific data — adapters translate to their own formats.
Args:
kind: Event discriminator.
use_case_name: Qualified name of the executing UseCase.
step_name: Step label (e.g. ``"Load User"``), or ``None``.
duration_ms: Wall-clock duration in milliseconds, or ``None``.
status: Outcome label (e.g. ``"success"``, ``"failure"``), or ``None``.
error: Exception instance if the event represents a failure, or ``None``.
Example::
event = RuntimeEvent(
kind=EventKind.EXEC_DONE,
use_case_name="UpdateUserUseCase",
duration_ms=12.4,
status="success",
)
"""
kind: EventKind
use_case_name: str
step_name: str | None = None
duration_ms: float | None = None
status: str | None = None
error: BaseException | None = None
trace_id: str | None = None