Trenne Prozesszustand, Messzustand und die Darstellung in Text oder JSON.
Ein Lauf besitzt queued, running, succeeded, failed, cancelled oder unknown. Jeder Übergang trägt Lauf-ID, Ereigniszeit und Ursache. succeeded benötigt das bestätigte erfolgreiche Ergebnis, cancelled einen bestätigten Abbruch. Ein verlorener Beobachterkanal bedeutet zunächst unknown; er beendet den Prozess nicht automatisch. Gesundheit ist eine weitere Frage: Eine fehlende Messung ist unbekannt, nicht null Auslastung. Berechne ein strukturiertes Ergebnis vor Text und JSON, einschließlich Exitcode. Beide Darstellungen lesen dasselbe Objekt. Das verhindert, dass eine hübsche Abschlusszeile einen Fehler in einen Erfolg verwandelt.
Ein Beispiel
demo-run-17 startet 09:00:00 und endet bestätigt 09:00:04 mit Exit 7. Ergebnis: failed, exit_code=7. Die Dateigröße wurde nicht erfasst: measurement=unknown. Text und JSON melden denselben Fehlschlag. Für die separate fiktive Gesundheitsampel gilt healthy=0, warning=1, critical=2, unknown=3 als ausdrücklicher Exitcode-Vertrag; diese Codes sind keine universelle Norm.
Python 3.11 · Lehrbeispiel
import json
result = {"run_id": "demo-run-17", "status": "failed", "exit_code": 7,
"measurement": "unknown"}
print(result["status"] + ": Exit " + str(result["exit_code"]))
print(json.dumps(result, sort_keys=True))
print(result["exit_code"])
Erwartete Ausgabe
failed: Exit 7
{"exit_code": 7, "measurement": "unknown", "run_id": "demo-run-17", "status": "failed"}
7