feat: live последние события на Dashboard; retention, health, runbook
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
"""Удаление устаревших events и resolved problems."""
|
||||
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
from sqlalchemy import delete
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.config import Settings
|
||||
from app.models import Event, Problem
|
||||
|
||||
|
||||
def purge_old_data(db: Session, settings: Settings) -> dict:
|
||||
"""
|
||||
Events: received_at старше sac_events_retention_days.
|
||||
Problems: status=resolved и updated_at старше sac_problems_retention_days.
|
||||
"""
|
||||
now = datetime.now(timezone.utc)
|
||||
events_cutoff = now - timedelta(days=settings.sac_events_retention_days)
|
||||
problems_cutoff = now - timedelta(days=settings.sac_problems_retention_days)
|
||||
|
||||
events_result = db.execute(delete(Event).where(Event.received_at < events_cutoff))
|
||||
events_deleted = events_result.rowcount or 0
|
||||
|
||||
problems_result = db.execute(
|
||||
delete(Problem).where(
|
||||
Problem.status == "resolved",
|
||||
Problem.updated_at < problems_cutoff,
|
||||
)
|
||||
)
|
||||
problems_deleted = problems_result.rowcount or 0
|
||||
|
||||
db.commit()
|
||||
|
||||
return {
|
||||
"events_deleted": events_deleted,
|
||||
"problems_deleted": problems_deleted,
|
||||
"events_cutoff": events_cutoff.isoformat(),
|
||||
"problems_cutoff": problems_cutoff.isoformat(),
|
||||
}
|
||||
Reference in New Issue
Block a user