Explorer
/tmp/aa045f5_backfill3.py
← Zurück ↓ Download
"""AA-045-F5: Doppel-JSON-kodierten Breakdown parsen und Watch-Felder fuellen."""
import sys, json
sys.path.insert(0, "/opt/struktur/social-media-radar")
import sqlite3
conn = sqlite3.connect("/var/lib/sma-data/signals.db")
conn.row_factory = sqlite3.Row
rows = conn.execute("""SELECT signal_id, score_breakdown FROM signals
    WHERE source_type='watch_entity' AND COALESCE(watch_entity_id,'')=''""").fetchall()
n = 0
for r in rows:
    raw = r["score_breakdown"]
    bd = None
    for _ in range(2):  # bis zu doppelt JSON-kodiert
        try:
            parsed = json.loads(raw)
        except Exception:
            break
        if isinstance(parsed, dict):
            bd = parsed
            break
        if isinstance(parsed, str):
            raw = parsed
            continue
    if bd and bd.get("watch_entity"):
        conn.execute("UPDATE signals SET watch_entity_id=?, watch_sector=?, watch_priority=? WHERE signal_id=?",
                     (bd["watch_entity"], str(bd.get("sector","")), str(bd.get("priority","")), r["signal_id"]))
        n += 1
conn.commit()
print("nachgefuellt:", n)
for r in conn.execute("""SELECT watch_sector, COUNT(*) c FROM signals WHERE source_type='watch_entity' GROUP BY watch_sector"""):
    print(dict(r))