feat: ingest burst hardening — defer lifecycle/auth, workers, nginx (v0.5.5)
Defer notify_lifecycle and notify_auth_login after commit; SAC_UVICORN_WORKERS via sac-api-start.sh; nginx /api/v1/events timeout; mass-update confirm in Hosts UI.
This commit is contained in:
@@ -216,16 +216,30 @@ def notify_rdg_connection(event: Event, *, db: Session | None = None) -> None:
|
||||
|
||||
def schedule_notify_daily_report(event_db_id: int) -> None:
|
||||
"""Отложенное оповещение по суточному отчёту (после commit ingest, вне горячего POST)."""
|
||||
_schedule_deferred_event_notify(event_db_id, notify_daily_report, label="daily report")
|
||||
|
||||
|
||||
def schedule_notify_lifecycle(event_db_id: int) -> None:
|
||||
"""Отложенное lifecycle-оповещение (после commit ingest)."""
|
||||
_schedule_deferred_event_notify(event_db_id, notify_lifecycle, label="lifecycle")
|
||||
|
||||
|
||||
def schedule_notify_auth_login(event_db_id: int) -> None:
|
||||
"""Отложенное оповещение об успешном RDP/SSH входе (после commit ingest)."""
|
||||
_schedule_deferred_event_notify(event_db_id, notify_auth_login, label="auth login")
|
||||
|
||||
|
||||
def _schedule_deferred_event_notify(event_db_id: int, handler, *, label: str) -> None:
|
||||
from app.database import SessionLocal
|
||||
|
||||
db = SessionLocal()
|
||||
try:
|
||||
event = db.get(Event, event_db_id)
|
||||
if event is None:
|
||||
logger.warning("deferred daily report notify: event id=%s not found", event_db_id)
|
||||
logger.warning("deferred %s notify: event id=%s not found", label, event_db_id)
|
||||
return
|
||||
notify_daily_report(event, db=db)
|
||||
handler(event, db=db)
|
||||
except Exception:
|
||||
logger.exception("deferred daily report notify failed event_db_id=%s", event_db_id)
|
||||
logger.exception("deferred %s notify failed event_db_id=%s", label, event_db_id)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
Reference in New Issue
Block a user