Експорт і відтворення процесу
Queuety може експортувати повну історію виконання процесу у переносному форматі JSON і відтворити її в іншому середовищі. Це корисно для локального відтворення помилок із робочого середовища, перенесення процесів між середовищами та аудиту.
Експорт процесу
PHP API
Викличте Queuety::export_workflow(), вказавши ID процесу. Метод повертає масив, сумісний із JSON:
use Queuety\Queuety;
$data = Queuety::export_workflow( $workflow_id );
Щоб одразу отримати рядок JSON:
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );
CLI
wp queuety workflow export <id> [--output=<file>]
| Опція | Опис |
|---|---|
<id> |
ID робочого процесу (обов’язково) |
--output=<file> |
Шлях до файлу для запису JSON. За замовчуванням — стандартний вивід. |
# Print to stdout
wp queuety workflow export 42
# Write to a file
wp queuety workflow export 42 --output=/tmp/workflow-42.json
Відтворення процесу
PHP API
Викличте Queuety::replay_workflow(), передавши дані експорту. Метод повертає ID нового процесу:
use Queuety\Queuety;
$json = file_get_contents( '/tmp/workflow-42.json' );
$data = json_decode( $json, true );
$new_id = Queuety::replay_workflow( $data );
CLI
wp queuety workflow replay <file>
| Опція | Опис |
|---|---|
<file> |
Шлях до експортованого файлу JSON (обов’язково) |
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.
Структура JSON
Експорт містить повний стан процесу, пов'язані завдання, події трасування, записи журналу, збережені сигнали, артефакти, фрагменти та всі рядки очікування залежностей процесу:
{
"workflow": {
"id": 42,
"name": "generate_report",
"status": "failed",
"state": { "user_id": 1, "_steps": [...], "_queue": "default" },
"current_step": 2,
"total_steps": 4,
"parent_workflow_id": null,
"parent_step_index": null,
"started_at": "2026-03-28 10:00:00",
"completed_at": null,
"failed_at": "2026-03-28 10:05:00",
"error_message": "API timeout",
"deadline_at": null
},
"jobs": [
{
"id": 100,
"queue": "default",
"handler": "App\\Handlers\\FetchDataHandler",
"payload": {},
"status": "completed",
"attempts": 1,
"max_attempts": 3,
"step_index": 0
}
],
"events": [
{
"id": 1,
"job_id": 100,
"step_index": 0,
"step_name": "fetchData",
"step_type": "single",
"handler": "App\\Handlers\\FetchDataHandler",
"event": "step_completed",
"input": { "user_id": 1 },
"output": { "records": 150 },
"state_before": { "user_id": 1 },
"state_after": { "user_id": 1, "records": 150 },
"context": { "source": "api" },
"error": null,
"duration_ms": 230,
"created_at": "2026-03-28 10:00:01"
}
],
"logs": [
{
"id": 1,
"event": "workflow_started",
"handler": "generate_report",
"created_at": "2026-03-28 10:00:00"
}
],
"signals": [],
"artifacts": [],
"chunks": [],
"wait_dependencies": [],
"exported_at": "2026-03-28T12:00:00+00:00",
"queuety_version": "0.22.0"
}
У наведеному вище прикладі деякі поля скорочено. Фактичний експорт містить усі стовпці трасування з кожного рядка події.
Експорти процесів також зберігають метадані процесу, як-от definition_version, definition_hash і idempotency_key, якщо їх було задано під час початкового запуску.
Як працює відтворення
Під час відтворення експортованого процесу:
- Створюється новий запис процесу з експортованим станом і визначеннями кроків
- Назва нового процесу —
{original_name}_replay_{timestamp} - Історичні події та записи журналу процесу повторно додаються в нове середовище
- Збережені сигнали та рядки залежностей очікування процесу відтворюються як історичний стан
- Якщо вихідний процес усе ще був
running, поточний крок ставиться в чергу на виконання. Кроки Repeat іstart_workflows()не ставляться в чергу повторно, тож відтворення, яке зупиняється на одному з них, залишаєтьсяrunningбез завдання (#17) - Якщо вихідний процес мав статус
waiting_for_signal,waiting_for_workflows,paused,failed,cancelledабоcompleted, цей статус зберігається у відтвореному процесі
Відтворений процес отримує новий ID і працює незалежно. Він не впливає на вихідний процес.
Для відтворення waiting_for_workflows експортовані рядки залежностей створюються з тими самими ID процесів. Це корисно для аудиту та для середовищ, де також існують ці залежні процеси, але ID залежностей автоматично не зіставляються між середовищами.
Варіанти використання
Відтворення помилок із робочого середовища
Експортуйте процес із помилкою з робочого середовища та відтворіть його локально:
# On production
wp queuety workflow export 42 --output=/tmp/workflow-42.json
# Copy the file to your local environment
# On local
wp queuety workflow replay /tmp/workflow-42.json
Відтворений процес має точно такий самий стан і визначення кроків. Для запущених процесів поточний крок повторно ставиться в чергу, тож можна продовжити виконання з місця зупинки. Призупинені процеси або процеси в очікуванні відтворюються в тому самому заблокованому стані для перевірки.
Перенесення процесів між середовищами
Перенесіть процес із проміжного середовища у робоче (або навпаки), експортувавши та відтворивши його:
# On staging
wp queuety workflow export 15 --output=workflow.json
# On production
wp queuety workflow replay workflow.json
Аудит і архівування
Експортуйте завершені процеси для довгострокового зберігання або дотримання вимог. Файл JSON містить повну історію виконання, зокрема вхідні дані, результати, стан до й після, часові дані та відомості про помилки.
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.