feat: deliver alert events through persistent outbox

This commit is contained in:
2026-08-04 15:08:06 +08:00
parent 304479441e
commit fea537b9d7
6 changed files with 1297 additions and 369 deletions
+3 -16
View File
@@ -5,7 +5,6 @@ import time
from collections import defaultdict
from dataclasses import dataclass
from datetime import datetime
from typing import Awaitable, Callable
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
@@ -38,16 +37,6 @@ class Pinger:
def __init__(self, runtime_settings: Settings | None = None):
self._settings = runtime_settings or settings
self._round_num = 0
self._on_state_change: (
Callable[[DeviceStateChange], Awaitable[None]] | None
) = None
def on_state_change(
self,
callback: Callable[[DeviceStateChange], Awaitable[None]],
) -> None:
"""Register the legacy transition callback during scheduler migration."""
self._on_state_change = callback
async def run_one_round(
self,
@@ -128,11 +117,9 @@ class Pinger:
if change is not None:
changes.append(change)
await db.commit()
if self._on_state_change is not None:
for change in changes:
await self._on_state_change(change)
# The scheduler records transition events and commits the complete
# probe/state/outbox unit. A direct caller retains the same ownership.
await db.flush()
elapsed = time.monotonic() - started_at
logger.info(