Перейти к содержимому

Журнал событий рабочего процесса

Журнал событий рабочего процесса записывает трассировку для каждой устойчивой границы рабочего процесса. Каждое событие трассировки может содержать входные и выходные данные шага, общедоступное состояние до и после шага, контекст среды выполнения, ссылки на артефакты, потоковые фрагменты, время выполнения и сведения об ошибках.

Какие данные записываются

Событие Когда Сохраняемые данные
step_started Перед запуском обработчика шага ID задания, очередь, попытка, имя шага, тип шага, входные данные и состояние до выполнения
step_completed После успешного выполнения обработчика шага Входные данные, выходные данные, состояние до и после, контекст, артефакты, фрагменты и длительность
step_failed Когда обработчик шага выбрасывает исключение Входные данные, состояние до и после, если доступно, контекст, класс ошибки, сообщение об ошибке, трассировка и длительность
step_branch_completed При успехе одной параллельной ветви Входные данные ветви, выходные данные, состояние до и после, контекст и длительность
step_item_completed При успехе одного элемента цикла for-each Входные данные элемента, выходные данные, состояние до и после, метаданные элемента, контекст и длительность
workflow_waiting Когда шаг ожидания приостанавливает выполнение Тип ожидания, цели ожидания, режим ожидания, ключ результата, метаданные сопоставления и состояние во время ожидания
workflow_resumed Когда условие шага ожидания выполнено Данные для возобновления, состояние до и после возобновления
workflow_replayed Когда экспорт создается заново Метаданные исходного рабочего процесса и состояние повтора

Запрос временной шкалы

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

Каждая строка события содержит:

  • 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

Нормализованный пакет трассировки

Используйте workflow_trace() при создании отладчика UI:

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

Пакет трассировки содержит:

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

steps группирует события по индексу шага и включает последнее важное событие для каждого шага.

Получение состояния шага

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

Возвращает общедоступное state_after из последнего завершенного или возобновленного события этого шага либо null, если состояние не записывалось.

Метаданные трассировки среды выполнения

Обработчики могут добавлять сведения трассировки на уровне приложения во время выполнения:

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

Обработчики шагов также могут возвращать зарезервированные метаданные трассировки:

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

Ключ _queuety_trace сохраняется в журнале событий и не объединяется с состоянием рабочего процесса.

CLI

Просмотрите временную шкалу в виде таблицы:

Командная оболочка
wp queuety workflow timeline 42

Просмотрите состояние после шага:

Командная оболочка
wp queuety workflow state-at 42 0

Хранение

Журналы событий накапливаются со временем. Используйте prune() для удаления старых событий трассировки:

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