feat(alerts): publish reconciliation quantity mismatches to trex-notifier (req-0007/ac-0024)

Co-authored-by: genichin <4282227+genichin@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-08-25 14:50:29 +00:00
committed by GitHub
co-authored by genichin
parent baae02d2af
commit 153a563f6d
6 changed files with 1458 additions and 52 deletions
+12 -7
View File
@@ -17,11 +17,10 @@ where no broker connection exists. In that case publish_alarm() logs and skips.
from __future__ import annotations
import logging
from datetime import datetime, timezone, timedelta
from typing import Optional
from datetime import datetime, timedelta, timezone
from trex_core.application.messaging import MessagingTransport, TransportUnavailableError
from trex_core.adapters.messaging.topology import alarm_routing_key
from trex_core.application.messaging import MessagingTransport, TransportUnavailableError
_log = logging.getLogger(__name__)
@@ -41,7 +40,7 @@ class AlarmEmitter:
- None-transport guard for non-daemon entry points
"""
def __init__(self, transport: Optional[MessagingTransport]) -> None:
def __init__(self, transport: MessagingTransport | None) -> None:
self._transport = transport
def publish_alarm(
@@ -49,9 +48,9 @@ class AlarmEmitter:
code: str,
title: str,
*,
fields: Optional[dict] = None,
fields: dict | None = None,
severity: str = "critical",
) -> None:
) -> bool:
"""Publish a single alarm envelope. Best-effort: never re-raises.
Args:
@@ -60,13 +59,16 @@ class AlarmEmitter:
exception bodies — callers must sanitize.
fields: Optional structured context dict (opaque, default {}).
severity: 'critical' | 'warn' | 'info'. Default 'critical'.
Returns:
True if the alarm was successfully published, False otherwise.
"""
if self._transport is None:
_log.info(
"alarm skipped (no transport): code=%s title=%s",
code, title,
)
return
return False
routing_key = alarm_routing_key(severity, _SOURCE)
occurred_at = datetime.now(tz=_KST).isoformat()
@@ -81,13 +83,16 @@ class AlarmEmitter:
}
try:
self._transport.publish_alarm_event(routing_key, payload)
return True
except TransportUnavailableError as exc:
_log.error(
"alarm publish skipped (transport unavailable): code=%s: %s",
code, exc,
)
return False
except Exception: # noqa: BLE001 — alarm must never crash the caller
_log.error(
"alarm publish failed: code=%s title=%s",
code, title, exc_info=True,
)
return False