feat: deliver alert events through persistent outbox
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user