48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
"""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:
|
|
await db.execute(
|
|
"SELECT ems.fn_fill_audit_interval($1, $2)",
|
|
site_id,
|
|
row["slot"],
|
|
)
|
|
|
|
if rows:
|
|
logger.info("[site=%s] Filled %s missing audit intervals", site_id, len(rows))
|