Zrodlo znikalo tylko po dlugim przytrzymaniu przez uzytkownika. Teraz zgloszenie "Response code: 404/410" uruchamia w tle ponowny resolve z serwera; martwe dopiero, gdy ekstraktor mowi "usuniete" albo plik z serwera tez daje 404/410 (dwie kontrole). Na sucho na 84 parach z 14 dni: 0 martwych, 83 zywe, czyli 410 z telefonu prawie zawsze znaczy zly adres, nie skasowany plik. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
38 lines
1.6 KiB
Python
38 lines
1.6 KiB
Python
"""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))
|