"""Plnění audit_interval pro dokončené 15min sloty (volá ems.fn_fill_audit_interval).""" from __future__ import annotations import logging from datetime import datetime, timezone logger = logging.getLogger(__name__) async def fill_audit_for_completed_intervals(site_id: int, db) -> None: """ Naplní audit_interval pro všechny dokončené 15min intervaly za posledních 6 hodin které ještě nemají záznam. Volá PostgreSQL funkci ems.fn_fill_audit_interval(). """ now = datetime.now(timezone.utc) last_complete = now.replace( minute=(now.minute // 15) * 15, second=0, microsecond=0 ) rows = await db.fetch( """ SELECT gs.slot FROM generate_series( $1::timestamptz - interval '6 hours', $1::timestamptz - interval '15 minutes', interval '15 minutes' ) AS gs(slot) WHERE NOT EXISTS ( SELECT 1 FROM ems.audit_interval ai WHERE ai.site_id = $2 AND ai.interval_start = gs.slot ) """, last_complete, site_id, ) for row in rows: slot = row["slot"] await db.execute( "SELECT ems.fn_fill_audit_interval($1, $2)", site_id, slot, ) await db.execute( "SELECT ems.fn_fill_baseline_load_forecast_accuracy($1, $2)", site_id, slot, ) if rows: logger.info("[site=%s] Filled %s missing audit intervals", site_id, len(rows))