Explorer
/tmp/aa045f5_regression.py
← Zurück ↓ Download
"""AA-045-F5 Regression: alle Pipeline-Komponenten inkl. Watch-Intake."""
import sys, json
sys.path.insert(0, "/opt/struktur/social-media-radar")
import sqlite3, urllib.request
conn = sqlite3.connect("/var/lib/sma-data/signals.db")
conn.row_factory = sqlite3.Row

checks = []

# Watch-Intake laeuft und ist idempotent (gerade belegt)
n_watch = conn.execute("SELECT COUNT(*) FROM signals WHERE source_type='watch_entity'").fetchone()[0]
checks.append(("Watch-Signale vorhanden", n_watch >= 15, n_watch))

# Classifier
from classification.signal_classifier import score_signal
sd = score_signal("Schimmel im Schlafzimmer auf Mallorca", "de")
checks.append(("Classifier", sd["signal_category"] == "schimmel_risiko"))

# Briefing-Abdeckung
leer = conn.execute("""SELECT COUNT(*) FROM signals WHERE status NOT IN ('ignoriert','veroeffentlicht')
    AND COALESCE(mallorca_relevance,0)>0 AND COALESCE(briefing_winkel,'')=''""").fetchone()[0]
checks.append(("Briefing-Pipeline", leer <= 30, f"unversorgt={leer} (Watch-Signale neu)"))

# Vorschaubilder
img = conn.execute("SELECT COUNT(*) FROM signals WHERE image_found=1 AND created_at>'2026-08-16'").fetchone()[0]
checks.append(("Vorschaubilder", img >= 80, img))

# Caption + Visuals
with urllib.request.urlopen("http://127.0.0.1:8652/api/caption/9a15eedd-6016-4e85-a97c-428e005b8be8", timeout=60) as r:
    checks.append(("Caption", json.loads(r.read())["success"]))
for fmt in ("1x1", "4x5"):
    with urllib.request.urlopen(f"http://127.0.0.1:8652/api/visual/9a15eedd-6016-4e85-a97c-428e005b8be8?fmt={fmt}", timeout=120) as r:
        checks.append((f"Visual {fmt}", json.loads(r.read()).get("success")))

# Cockpit mit BRANCHEN-WATCH
with urllib.request.urlopen("http://127.0.0.1:8652/cockpit", timeout=15) as r:
    html = r.read().decode()
checks.append(("Cockpit + BRANCHEN-WATCH-Badge", r.status == 200 and "BRANCHEN-WATCH" in html))

# Quelllinks
checks.append(("Quelllinks", 'sig-title" href=' in html))

# Kein Publishing
import subprocess
svc = subprocess.run(["systemctl","is-active","social-media-agent"], capture_output=True, text=True).stdout.strip()
checks.append(("Service aktiv / kein Publishing", svc == "active"))

print("=== REGRESSION AA-045-F5 ===")
allok = True
for c in checks:
    name, ok = c[0], c[1]
    detail = c[2] if len(c) > 2 else ""
    print(f"[{'OK ' if ok else 'FAIL'}] {name} {detail}")
    allok = allok and ok
print("REGRESSION:", "BESTANDEN" if allok else "FEHLER")