Webhook-Queue in paperless-ngx löschen

Spielt man ein bisschen mit den Workflows „Arbeitsabläufen“ in paperless-ngx, kann es passieren, dass man versehentlich viele Webhook-Calls generiert, indem man z. B. für seine gesamte Dokumentensammlung Webhooks durch den Auslöser „Geplant“ auslöst, die dann allesamt in der nachgelagerten Redis-Datenbank feststecken und unter Umständen nur noch sehr langsam oder gar nicht mehr abgearbeitet werden, weil die externe API, welcher der Webhook-Call galt, nicht mehr mitmacht.

Eine pragmatische Lösung dazu ist, die gesamte Warteschlange an wartenden Webhook-Calls zu entfernen. Im Docker-basierten paperless-ngx ginge das wie folgt:

docker exec -ti paperless-webserver-1 bash
python3 - <<'PYCODE'
import redis, json

r = redis.Redis(host="broker", port=6379, db=0)  # adjust host if needed
queue = "celery"  # replace if your queue is named differently

tasks = r.lrange(queue, 0, 500)
removed = 0
for t in tasks:
    try:
        data = json.loads(t)
        if data.get("headers", {}).get("task") == "documents.signals.handlers.send_webhook":
            r.lrem(queue, 0, t)
            removed += 1
    except Exception:
        # some entries may not be JSON
        continue

print(f"Removed {removed} webhook tasks from queue '{queue}'")
PYCODE

Das Script löscht jeweils nur die Webhook-Warteschlangendaten und davon immer nur 500. Bei zu langen Anfragen schloss Redis die Verbindung unerwartet. Es empfiehlt sich daher, das Script mehrfach zu starten bis die Warteschlange wieder leer ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert