Export a prehratie workflowu
Queuety dokáže exportovať úplnú históriu vykonávania workflowu do prenosného formátu JSON a prehrať ju v inom prostredí. Hodí sa na lokálne reprodukovanie chýb z produkcie, migráciu workflowov medzi prostrediami a auditovanie.
Export workflowu
PHP API
Zavolajte Queuety::export_workflow() s ID workflowu. Vráti pole serializovateľné do JSON:
use Queuety\Queuety;
$data = Queuety::export_workflow( $workflow_id );
Ak chcete získať priamo reťazec JSON:
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );
CLI
wp queuety workflow export <id> [--output=<file>]
| Možnosť | Popis |
|---|---|
<id> |
ID workflowu (povinné) |
--output=<file> |
Cesta k súboru, do ktorého sa zapíše JSON. Predvolene sa vypíše na štandardný výstup. |
# Print to stdout
wp queuety workflow export 42
# Write to a file
wp queuety workflow export 42 --output=/tmp/workflow-42.json
Prehratie workflowu
PHP API
Zavolajte Queuety::replay_workflow() s údajmi exportu. Vráti ID nového workflowu:
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>
| Možnosť | Popis |
|---|---|
<file> |
Cesta k súboru s exportovaným JSON (povinné) |
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.
Štruktúra JSON
Export obsahuje úplný stav workflowu, súvisiace úlohy, udalosti trasovania, položky denníka, uložené signály, artefakty, bloky a všetky riadky čakania na závislosti workflowov:
{
"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"
}
V príklade vyššie sú niektoré polia skrátené. Skutočný export obsahuje všetky stĺpce trasovania z každého riadka udalosti.
Exporty workflowov zachovávajú aj metadáta workflowu, napríklad definition_version, definition_hash a idempotency_key, ak boli nastavené pri pôvodnom behu.
Ako funguje prehratie
Pri prehratí exportovaného workflowu:
- Vytvorí sa nový riadok workflowu s exportovaným stavom a definíciami krokov
- Názov nového workflowu je
{original_name}_replay_{timestamp} - Historické udalosti workflowu a položky denníka sa znova vložia do nového prostredia
- Uložené signály a riadky závislostí čakania na workflow sa prehrajú ako historický stav
- Ak bol pôvodný workflow stále v stave
running, aktuálny krok sa zaradí do frontu na spracovanie. Kroky Repeat astart_workflows()sa znova nezaraďujú do frontu, takže prehratie, ktoré sa na niektorom z nich zastaví, zostane v staverunningbez úlohy (#17) - Ak bol pôvodný workflow v stave
waiting_for_signal,waiting_for_workflows,paused,failed,cancelledalebocompleted, tento stav sa v prehratom workflowe zachová
Prehratý workflow dostane nové ID a funguje nezávisle. Pôvodný workflow neovplyvní.
Pri prehratí waiting_for_workflows sa exportované riadky závislostí vytvoria znova s rovnakými ID workflowov. Hodí sa to na auditovanie a pre prostredia, v ktorých tieto závislé workflowy tiež existujú, no ID závislostí sa medzi prostrediami automaticky nepriraďujú nanovo.
Prípady použitia
Reprodukcia chýb z produkcie
Exportujte neúspešný workflow z produkčného prostredia a prehrajte ho lokálne:
# 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
Prehraný workflow má presne rovnaký stav a definície krokov. Pri spustených workflowoch sa aktuálny krok znova zaradí do frontu, takže môžete pokračovať tam, kde sa vykonávanie zastavilo. Pozastavené workflowy alebo workflowy čakajúce na udalosť sa obnovia v zablokovanom stave, aby ste ich mohli skontrolovať.
Migrácia workflowov medzi prostrediami
Presuňte workflow zo stagingového do produkčného prostredia (alebo naopak) exportovaním a opätovným prehratím:
# On staging
wp queuety workflow export 15 --output=workflow.json
# On production
wp queuety workflow replay workflow.json
Audit a archivácia
Exportujte dokončené workflowy na dlhodobé uloženie alebo na účely súladu s predpismi. Súbor JSON obsahuje úplnú históriu vykonávania vrátane vstupov, výstupov, stavu pred a po, časových údajov a podrobností o chybách.
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.