Treci la conținut

Jurnalul de evenimente al fluxului de lucru

Jurnalul de evenimente al fluxului de lucru înregistrează o urmă pentru fiecare limită durabilă a fluxului. Fiecare eveniment din urmă poate include intrarea și ieșirea pasului, starea publică înainte și după pas, contextul de execuție, referințe la artefacte, fragmente transmise în flux, timpii și detalii despre erori.

Ce se înregistrează

Eveniment Când Date capturate
step_started Înainte ca handlerul unui pas să ruleze ID-ul jobului, coada, încercarea, numele și tipul pasului, intrarea și starea dinaintea execuției
step_completed După reușita handlerului unui pas Intrarea, ieșirea, starea anterioară, starea ulterioară, contextul, artefactele, fragmentele și durata
step_failed Când handlerul unui pas aruncă o excepție Intrarea, starea anterioară, starea ulterioară dacă este disponibilă, contextul, clasa și mesajul erorii, urma și durata
step_branch_completed Când o ramură paralelă reușește Intrarea ramurii, ieșirea, starea anterioară, starea ulterioară, contextul și durata
step_item_completed Când un element for-each reușește Intrarea elementului, ieșirea, starea anterioară, starea ulterioară, metadatele elementului, contextul și durata
workflow_waiting Când un pas de așteptare suspendă execuția Tipul așteptării, țintele, modul de așteptare, cheia rezultatului, metadatele potrivirii și starea din timpul așteptării
workflow_resumed Când este satisfăcut un pas de așteptare Datele pentru reluare, starea dinaintea reluării și starea de după reluare
workflow_replayed Când este recreat un export Metadatele fluxului de lucru sursă și starea reluării

Interogarea cronologiei

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";
    }
}

Fiecare rând al evenimentului conține:

  • 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

Pachetul de urme normalizat

Folosiți workflow_trace() când creați un depanator UI:

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

Pachetul de urme include:

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

steps grupează evenimentele după indicele pasului și include cel mai recent eveniment important pentru fiecare pas.

Consultarea stării unui pas

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

Aceasta returnează starea publică state_after din cel mai recent eveniment încheiat sau reluat pentru pasul respectiv, ori null dacă nu a fost înregistrată nicio stare.

Metadate pentru urmele de execuție

Handler-ele pot adăuga detalii despre urme la nivelul aplicației în timp ce rulează:

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

Handler-ele pașilor pot returna și metadate rezervate pentru urme:

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

Cheia _queuety_trace este stocată în jurnalul de evenimente și nu este îmbinată în starea fluxului de lucru.

CLI

Vizualizați cronologia ca tabel:

Shell
wp queuety workflow timeline 42

Vizualizați starea de după un pas:

Shell
wp queuety workflow state-at 42 0

Păstrarea datelor

Jurnalele de evenimente se acumulează în timp. Folosiți prune() pentru a șterge evenimentele de urmărire vechi:

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