Explorer
/tmp/aa045f4_regression.py
← Zurück ↓ Download
"""AA-045-F4 Regression: alle Pipeline-Komponenten."""
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 = []

# Radar + Intakes: Collect laeuft (kleiner Smoke-Test der Konfiguration)
from intake.multi_intake import load_config
cfg = load_config()
checks.append(("Multi-Source-Konfiguration", True))

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

# Director + Briefing laufen (bereits in F3 verdrahtet)
n_dir = conn.execute("SELECT COUNT(*) FROM signals WHERE director_action != ''").fetchone()[0]
checks.append(("Director-Daten", n_dir > 100))

# 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-Abdeckung", leer == 0, f"unversorgt={leer}"))

# Caption-API
with urllib.request.urlopen("http://127.0.0.1:8652/api/caption/9a15eedd-6016-4e85-a97c-428e005b8be8", timeout=60) as r:
    cap = json.loads(r.read())
checks.append(("Caption", cap["success"]))

# Visuals 1x1 + 4x5
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:
        v = json.loads(r.read())
    checks.append((f"Visual {fmt}", v.get("success")))

# Cockpit erreichbar
with urllib.request.urlopen("http://127.0.0.1:8652/cockpit", timeout=15) as r:
    checks.append(("Cockpit", r.status == 200))

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

print("=== REGRESSION AA-045-F4 ===")
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")