Source code for VmaxBuilder.diagnostics.runner

"""Generated: validation needed.

Description:
    Diagnostics runner implementation for orchestrator stage execution boundaries.
"""

from __future__ import annotations

from collections.abc import Sequence

from VmaxBuilder.config.dataclasses import APIConfig
from VmaxBuilder.config.enums import DiagnosticSeverity, StageName
from VmaxBuilder.core.protocols import (
    DiagnosticRecord,
    DiagnosticsHookProtocol,
    DiagnosticsRunnerProtocol,
    Scaffold,
)


[docs] class DiagnosticsRunner(DiagnosticsRunnerProtocol): """Generated: validation needed. Description: Execute diagnostics hooks and append emitted records to scaffold diagnostics payload. Args: None. Returns: None. Raises: RuntimeError: When emitted diagnostics exceed configured halt severity threshold. Requires: None. Modifies: None. """ _severity_rank: dict[DiagnosticSeverity, int] = { DiagnosticSeverity.DEBUG: 10, DiagnosticSeverity.INFO: 20, DiagnosticSeverity.WARNING: 30, DiagnosticSeverity.ERROR: 40, DiagnosticSeverity.CRITICAL: 50, }
[docs] def run_hooks( self, scaffold: Scaffold, *, config: APIConfig, stage_name: StageName, hooks: Sequence[DiagnosticsHookProtocol], method_key: str | None = None, ) -> Scaffold: """Generated: validation needed. Description: Run before-stage and after-stage diagnostics hooks and update scaffold diagnostics. Args: scaffold (Scaffold): Shared pipeline scaffold. config (APIConfig): Root API configuration. stage_name (StageName): Current stage name. hooks (Sequence[DiagnosticsHookProtocol]): Diagnostics hooks to run. method_key (str | None): Optional strategy key. Returns: Scaffold: Updated scaffold with diagnostics records. Raises: RuntimeError: When halt threshold is exceeded by emitted records. Requires: None. Modifies: scaffold["diagnostics"]: Appends diagnostics records under stage key. """ stage_records: list[DiagnosticRecord] = [] for hook in hooks: if hook.stage is not stage_name: continue stage_records.extend( hook.before_stage( scaffold, config=config, method_key=method_key, ) ) stage_records.extend( hook.after_stage( scaffold, config=config, method_key=method_key, ) ) diagnostics_payload = scaffold.setdefault("diagnostics", {}) existing_records = diagnostics_payload.get(stage_name.value, []) diagnostics_payload[stage_name.value] = [*existing_records, *stage_records] if self._should_halt(stage_records, threshold=config.validation.halt_severity): raise RuntimeError( f"Diagnostics threshold reached for stage '{stage_name.value}'. " f"Configured threshold: '{config.validation.halt_severity.value}'." ) return scaffold
[docs] def _should_halt( self, records: Sequence[DiagnosticRecord], *, threshold: DiagnosticSeverity, ) -> bool: """Generated: validation needed. Description: Determine whether diagnostics records breach configured severity threshold. Args: records (Sequence[DiagnosticRecord]): Emitted diagnostics records. threshold (DiagnosticSeverity): Halt threshold. Returns: bool: True when threshold is met or exceeded. Raises: None. Requires: None. Modifies: None. """ threshold_rank = self._severity_rank[threshold] for record in records: record_rank = self._severity_rank[record["severity"]] if record_rank >= threshold_rank: return True return False