Files
Nexus/server/background/sync_log_purge.py
T

43 lines
1.4 KiB
Python
Raw Normal View History

"""Periodic purge of sync_logs older than SYNC_LOG_RETENTION_DAYS (design: 30 days)."""
from __future__ import annotations
import asyncio
import logging
from server.infrastructure.database.session import AsyncSessionLocal
from server.infrastructure.database.sync_log_repo import (
SYNC_LOG_RETENTION_DAYS,
SyncLogRepositoryImpl,
)
logger = logging.getLogger("nexus.sync_log_purge")
PURGE_INTERVAL_SECONDS = 24 * 3600
async def purge_stale_sync_logs() -> int:
"""Delete sync_logs rows older than retention window. Returns rows removed."""
async with AsyncSessionLocal() as session:
repo = SyncLogRepositoryImpl(session)
return await repo.purge_older_than(retention_days=SYNC_LOG_RETENTION_DAYS)
async def sync_log_purge_loop() -> None:
"""Run daily on primary worker; also invoked once at API startup."""
while True:
try:
count = await purge_stale_sync_logs()
if count:
logger.info(
"Sync log purge: removed %s row(s) older than %s days",
count,
SYNC_LOG_RETENTION_DAYS,
)
await asyncio.sleep(PURGE_INTERVAL_SECONDS)
except asyncio.CancelledError:
raise
except Exception:
logger.exception("Sync log purge loop error")
await asyncio.sleep(PURGE_INTERVAL_SECONDS)