Eksport og afspilning af workflows
Queuety kan eksportere et workflows komplette kørselshistorik til et portabelt format JSON og afspille den i et andet miljø. Det er nyttigt til at genskabe produktionsfejl lokalt, flytte workflows mellem miljøer og udføre revision.
Eksport af et workflow
PHP API
Kald Queuety::export_workflow() med workflow-ID'et. Den returnerer et JSON-serialiserbart array:
use Queuety\Queuety;
$data = Queuety::export_workflow( $workflow_id );
Sådan får du direkte en JSON-streng:
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );
CLI
wp queuety workflow export <id> [--output=<file>]
| Valgmulighed | Beskrivelse |
|---|---|
<id> |
Workflow-id (påkrævet) |
--output=<file> |
Filsti, hvor JSON skal skrives. Standard er stdout. |
# Print to stdout
wp queuety workflow export 42
# Write to a file
wp queuety workflow export 42 --output=/tmp/workflow-42.json
Afspilning af et workflow
PHP API
Kald Queuety::replay_workflow() med eksportdataene. Den returnerer det nye 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>
| Valgmulighed | Beskrivelse |
|---|---|
<file> |
Sti til den eksporterede JSON-fil (påkrævet) |
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.
Struktur for JSON
Eksporten indeholder hele workflowtilstanden, tilhørende jobs, sporhændelser, logposter, gemte signaler, artefakter, bidder og eventuelle rækker for ventende workflowafhængigheder:
{
"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"
}
Nogle felter er forkortet i eksemplet ovenfor. Den faktiske eksport indeholder alle sporkolonner fra hver hændelsesrække.
Workfloweksporter bevarer også workflowmetadata såsom definition_version, definition_hash og idempotency_key, hvis de blev angivet i den oprindelige kørsel.
Sådan fungerer afspilning
Når du afspiller et eksporteret workflow:
- Der oprettes en ny workflowrække med den eksporterede tilstand og trindefinitioner
- Det nye workflows navn er
{original_name}_replay_{timestamp} - Historiske workflowhændelser og logge indsættes igen i det nye miljø
- Gemte signaler og rækker med ventende workflowafhængigheder afspilles som historisk tilstand
- Hvis det oprindelige workflow stadig var
running, sættes det aktuelle trin i kø til behandling. Repeat- ogstart_workflows()-trin sættes ikke i kø igen, så en afspilning, der stopper ved et af dem, forbliverrunninguden et job (#17) - Hvis det oprindelige workflow var
waiting_for_signal,waiting_for_workflows,paused,failed,cancelledellercompleted, bevares den status i det afspillede workflow
Det afspillede workflow får et nyt ID og kører uafhængigt. Det påvirker ikke originalen.
Ved afspilning af waiting_for_workflows genskabes de eksporterede afhængighedsrækker med de samme workflow-ID'er. Det er nyttigt til revision og i miljøer, hvor afhængighedsworkflowsene også findes, men afhængigheds-ID'er tilpasses ikke automatisk på tværs af miljøer.
Anvendelsesområder
Genskab produktionsfejl
Eksportér et fejlet workflow fra produktion, og afspil det lokalt:
# 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
Det afspillede workflow har præcis samme tilstand og trindefinitioner. Kørende workflows sætter det aktuelle trin i kø igen, så du kan fortsætte kørslen fra det sted, hvor de slap. Workflows, der er sat på pause eller venter, genskabes i den blokerede tilstand, så du kan undersøge dem.
Flyt workflows mellem miljøer
Flyt et workflow fra staging til produktion eller omvendt ved at eksportere og afspille det:
# On staging
wp queuety workflow export 15 --output=workflow.json
# On production
wp queuety workflow replay workflow.json
Revision og arkivering
Eksportér fuldførte workflows til langtidsopbevaring eller overholdelse af regler. Filen JSON indeholder hele kørselshistorikken, herunder input, output, tilstand før og efter, tidsdata og fejloplysninger.
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.