"""Jednorazowo: zrodla, ktore telefony zglosily jako 404/410, sprawdzone z serwera. Ta sama logika co na zywo (app/playback_gone.py), dla zgloszen sprzed wdrozenia. docker compose exec -T worker python3 /srv/scripts/verify_gone_backfill.py [dni] [--commit] [--limit N] Bez --commit tylko liczy. """ from __future__ import annotations import sys from collections import Counter from sqlalchemy import text from app.db import session_scope from app.playback_gone import verify_gone days = int(next((a for a in sys.argv[1:] if a.isdigit()), "14")) commit = "--commit" in sys.argv limit = int(sys.argv[sys.argv.index("--limit") + 1]) if "--limit" in sys.argv else 100000 with session_scope() as s: pairs = s.execute(text(""" SELECT DISTINCT e.scene_id, e.origin FROM playback_events e WHERE e.created_at > now() - make_interval(days => :d) AND e.status = 'error' AND e.error_detail ~* 'response code: (404|410)' AND e.scene_id IS NOT NULL AND EXISTS (SELECT 1 FROM playback_sources p WHERE p.scene_id = e.scene_id AND p.origin = e.origin AND p.dead_at IS NULL) LIMIT :lim"""), {"d": days, "lim": limit}).all() print(f"par (scena, serwis) do sprawdzenia: {len(pairs)}, {'NA SERIO' if commit else 'na sucho'}", flush=True) total: Counter = Counter() per_origin: dict[str, Counter] = {} for scene_id, origin in pairs: r = verify_gone(scene_id, origin, dry_run=not commit) total.update(r) per_origin.setdefault(origin, Counter()).update(r) for o, c in sorted(per_origin.items(), key=lambda kv: -kv[1]["checked"]): print(f" {o:24s} {dict(c)}") print("razem:", dict(total))