74 lines
4.2 KiB
Markdown
74 lines
4.2 KiB
Markdown
# wowdiag-worker v0.4 – BugAnalysis-Übergabe
|
||
|
||
Erweiterung des vorgelegten v0.3-Workers. Die ursprüngliche Queue-Claim-Logik und
|
||
DB-Struktur bleiben erhalten. Keine Änderung der aktiven `config.toml`, kein
|
||
Dienststart und keine Datenbankmigration durch diese Dateien.
|
||
|
||
Nach erfolgreicher wowdiag-/wowsrc-Erzeugung wird ein Versandauftrag dauerhaft
|
||
in einer separaten lokalen SQLite-Outbox gespeichert. `diagnostic_runs.completed`
|
||
bedeutet weiterhin **Erfassung abgeschlossen**, nicht Analyse abgeschlossen oder
|
||
API-Zustellung bestätigt. Die Versandquittung ist über `--handoff-status` sichtbar.
|
||
Die API übernimmt den Fall anschließend in ihren eigenen Analyseworker.
|
||
|
||
## Einrichtung
|
||
|
||
1. Bestehende `wowdiag_worker.py` sichern und die v0.4-Datei sowie
|
||
`buganalysis_handoff.py` nebeneinander installieren. Python 3.11 und PyMySQL
|
||
bleiben die Voraussetzungen; der HTTP-Client benötigt keine neue Bibliothek.
|
||
2. Den Abschnitt aus `buganalysis.config.example.toml` in die vorhandene
|
||
Worker-Konfiguration übernehmen. Tatsächliche URL und Projektzuordnung setzen.
|
||
Der URL muss die Serverwurzel sein; HTTPS ist für entfernte Server erforderlich.
|
||
3. Einen Integrationsschlüssel in BugAnalysis für das Projekt erzeugen und im
|
||
Dienst-Environment als `VBA_INTAKE_TOKEN` hinterlegen. Unter Linux eine geschützte
|
||
systemd-EnvironmentFile verwenden; den Schlüssel nicht in Skriptargumente,
|
||
Repository oder Worker-Logs schreiben. Bestehende Unit um EnvironmentFile
|
||
ergänzen und anschließend kontrolliert neu starten.
|
||
4. SQLite-Outbox und Diagnosearchive bis zur bestätigten Zustellung erhalten.
|
||
Das Outbox-Verzeichnis muss für den Worker schreibbar sein und einen lokalen
|
||
Datenträger mit SQLite-Dateisperren verwenden. Die Datei nicht zwischen
|
||
unabhängigen Installationen teilen.
|
||
|
||
Ohne aktivierten `[buganalysis]`-Abschnitt bleibt der bisherige Ablauf erhalten.
|
||
Das Flag bedeutet ausschließlich Erfassung plus Übergabe; der Worker löst keine
|
||
Modellanfrage selbst aus. Ein laufender BugAnalysis-Worker kann nach Annahme
|
||
allerdings sofort eine kostenpflichtige Analyse beginnen.
|
||
|
||
## Wiederholungen und Status
|
||
|
||
```sh
|
||
python3 wowdiag_worker.py --config config.toml --handoff-status
|
||
python3 wowdiag_worker.py --config config.toml --retry-handoffs
|
||
```
|
||
|
||
Diese beiden Befehle führen keine Erfassung aus. Der normale Dauerdienst sendet
|
||
fällige Aufträge vor dem nächsten Capture; `--once` versucht sie auch danach.
|
||
Netzwerkfehler, Serverausfälle, temporäre Ablehnungen und fehlende/ungültige
|
||
Zugangsdaten bleiben `pending`. Nach Behebung werden dieselben Inhalte mit
|
||
demselben Idempotenzschlüssel versandt. Auch eine verlorene Erfolgsantwort legt
|
||
dadurch keinen zweiten Fall an. Es werden keine HTTP-Redirects verfolgt.
|
||
|
||
Unveränderliche Metadaten, Ziel-URL, Archivpfade und Inhaltsprüfwerte stehen in der
|
||
Outbox; Zugangsdaten stehen dort nicht. Archivänderung oder endgültiger HTTP-
|
||
Konflikt wird `attention` und benötigt Betreiberprüfung. Ein Lease verhindert
|
||
gleichzeitigen regulären Versand durch mehrere Worker-Prozesse. Ein Prozessabbruch
|
||
lässt den Auftrag nach Ablauf des Lease erneut versuchen. Es gibt keine automatische
|
||
Neuerzeugung von Archiven oder ein Zurücksetzen der ursprünglichen Queue-Claims.
|
||
|
||
Bereits vor dem Update abgeschlossene Erfassungen werden nicht automatisch
|
||
nachträglich eingesendet. Ein erneuter neuer Auftrag für dieselbe Bug-ID wird von
|
||
BugAnalysis bewusst abgewiesen, wenn der Fall bereits existiert. Rückgaben nach
|
||
einem Patch erfolgen über den separaten `case_return`-Vertrag und nicht durch
|
||
automatisches Umdeuten neuer Captures.
|
||
|
||
Der Übergabeumschlag nennt die Bug-ID und den Erfassungs-Commit. Die wirklichen
|
||
Testerbeobachtungen, Titel und Beziehungen liest der BugAnalysis-Importer direkt
|
||
aus den unveränderten Archiven. Der Worker erfindet keine Beobachtungen und gibt
|
||
den Erfassungsstand nicht als Stand der ursprünglichen Fehlermeldung aus.
|
||
|
||
## Lokale Prüfung im BugAnalysis-Checkout
|
||
|
||
`python -m pytest tests/profiles/vcore/test_capture_handoff.py` prüft den Versand gegen die echte
|
||
lokale Intake-API mit synthetischen Archiven. Kein echter Server, keine Cloud-
|
||
Anfrage, keine Änderung der Diagnose-Queue. Ein Server-Feldtest mit einem neuen
|
||
Bug und Dienstneustart steht nach der Konfiguration noch aus.
|