Zum Inhalt springen

Workflow-Ereignisprotokoll

Das Workflow-Ereignisprotokoll zeichnet jeden dauerhaften Workflow-Übergang auf. Jedes Ereignis kann die Schritteingabe, -ausgabe, den öffentlichen Status vor und nach dem Schritt, den Laufzeitkontext, Artefaktverweise, Streaming-Datenblöcke, Zeitangaben und Fehlerdetails enthalten.

Erfasste Daten

Ereignis Zeitpunkt Erfasste Daten
step_started Vor Ausführung des Schritt-Handlers Job-ID, Warteschlange, Versuch, Schrittname, Schritttyp, Eingabe und Status vor der Ausführung
step_completed Nach erfolgreicher Ausführung des Schritt-Handlers Eingabe, Ausgabe, Status davor, Status danach, Kontext, Artefakte, Datenblöcke und Dauer
step_failed Wenn der Schritt-Handler eine Ausnahme auslöst Eingabe, Status davor, Status danach, falls verfügbar, Kontext, Fehlerklasse, Fehlermeldung, Stacktrace und Dauer
step_branch_completed Wenn ein paralleler Zweig erfolgreich ist Zweigeingabe, Ausgabe, Status davor, Status danach, Kontext und Dauer
step_item_completed Wenn ein For-Each-Element erfolgreich ist Element-Eingabe, Ausgabe, Status davor, Status danach, Element-Metadaten, Kontext und Dauer
workflow_waiting Wenn ein Warteschritt den Lauf anhält Wartetyp, Warteziele, Wartemodus, Ergebnisschlüssel, Abgleich-Metadaten und Status während des Wartens
workflow_resumed Wenn eine Wartebedingung erfüllt ist Fortsetzungspayload, Status vor der Fortsetzung und Status danach
workflow_replayed Wenn ein Export neu erstellt wird Metadaten des Quell-Workflows und Wiedergabestatus

Zeitachse abfragen

PHP
$events = Queuety::workflow_timeline( $workflow_id );

foreach ( $events as $event ) {
    echo $event['step_index'] . ' ' . $event['event'] . ' ' . $event['handler'] . "\n";

    if ( 'step_completed' === $event['event'] ) {
        $input        = $event['input'];
        $output       = $event['output'];
        $state_before = $event['state_before'];
        $state_after  = $event['state_after'];
    }

    if ( 'step_failed' === $event['event'] ) {
        echo 'Error: ' . $event['error']['message'] . "\n";
    }
}

Jede Ereigniszeile enthält:

  • id
  • workflow_id
  • job_id
  • parent_event_id
  • step_index
  • step_name
  • step_type
  • handler
  • event
  • queue
  • attempt
  • input
  • output
  • state_before
  • state_after
  • context
  • artifacts
  • chunks
  • error
  • duration_ms
  • created_at

Normalisiertes Trace-Paket

Verwende workflow_trace(), wenn du einen Debugger UI erstellst:

PHP
$trace = Queuety::workflow_trace( $workflow_id );

Das Trace-Paket enthält:

  • workflow
  • steps
  • events
  • jobs
  • logs
  • artifacts
  • chunks
  • signals
  • wait_dependencies

steps gruppiert Ereignisse nach Schrittindex und enthält das jeweils neueste wichtige Ereignis für jeden Schritt.

Schrittestatus abfragen

PHP
$state = Queuety::workflow_state_at( $workflow_id, $step_index );

Dies gibt den öffentlichen state_after des neuesten abgeschlossenen oder fortgesetzten Ereignisses für diesen Schritt zurück, oder null, wenn kein Status aufgezeichnet wurde.

Metadaten des Laufzeit-Traces

Handler können während ihrer Ausführung Details für anwendungsspezifische Traces hinzufügen:

PHP
Queuety::trace_input( [ 'resolved' => $resolved_input ] );
Queuety::trace_context( [ 'ability' => 'content/load-post' ] );
Queuety::trace_output( [ 'post' => $post ] );

Schritt-Handler können auch reservierte Trace-Metadaten zurückgeben:

PHP
return [
    'result' => 'done',
    '_queuety_trace' => [
        'input' => [ 'resolved' => $resolved_input ],
        'context' => [ 'node_id' => 'loadPost' ],
        'artifacts' => [
            [ 'key' => 'brief', 'kind' => 'markdown' ],
        ],
    ],
];

Der Schlüssel _queuety_trace wird im Ereignisprotokoll gespeichert und nicht mit dem Workflow-Status zusammengeführt.

CLI

Zeige die Zeitachse als Tabelle an:

Shell
wp queuety workflow timeline 42

Zeige den Status nach einem Schritt an:

Shell
wp queuety workflow state-at 42 0

Aufbewahrung

Ereignisprotokolle sammeln sich mit der Zeit an. Verwende prune(), um alte Trace-Ereignisse zu löschen:

PHP
$deleted = Queuety::workflow_events()->prune( 30 );