Hoppa till innehåll

Exportera och spela upp arbetsflöden igen

Queuety kan exportera ett arbetsflödes fullständiga körningshistorik till ett portabelt format av typen JSON och spela upp det igen i en annan miljö. Det är användbart för att återskapa produktionsfel lokalt, flytta arbetsflöden mellan miljöer och granska körningar.

Exportera ett arbetsflöde

PHP API

Anropa Queuety::export_workflow() med arbetsflödes-ID:t. Metoden returnerar en array som kan serialiseras som JSON:

PHP
use Queuety\Queuety;

$data = Queuety::export_workflow( $workflow_id );

Hämta en JSON-sträng direkt:

PHP
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );

CLI

Shell
wp queuety workflow export <id> [--output=<file>]
Alternativ Beskrivning
<id> Arbetsflödes-ID (obligatoriskt)
--output=<file> Filsökväg där JSON ska skrivas. Standard är stdout.
Shell
# Print to stdout
wp queuety workflow export 42

# Write to a file
wp queuety workflow export 42 --output=/tmp/workflow-42.json

Spela upp ett arbetsflöde igen

PHP API

Anropa Queuety::replay_workflow() med exportdata. Metoden returnerar det nya arbetsflödes-ID:t:

PHP
use Queuety\Queuety;

$json = file_get_contents( '/tmp/workflow-42.json' );
$data = json_decode( $json, true );

$new_id = Queuety::replay_workflow( $data );

CLI

Shell
wp queuety workflow replay <file>
Alternativ Beskrivning
<file> Sökväg till den exporterade filen JSON (krävs)
Shell
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.

Strukturen hos JSON

Exporten innehåller hela arbetsflödestillståndet, tillhörande jobb, spårningshändelser, loggposter, lagrade signaler, artefakter, delar och eventuella väntposter för arbetsflödesberoenden:

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

Vissa fält är förkortade i exemplet ovan. Den faktiska exporten innehåller alla spårningskolumner från varje händelserad.

Arbetsflödesexporter bevarar också metadata som definition_version, definition_hash och idempotency_key när dessa angavs vid den ursprungliga körningen.

Så fungerar uppspelning

När du spelar upp ett exporterat arbetsflöde igen:

  1. En ny arbetsflödesrad skapas med det exporterade tillståndet och stegdefinitionerna
  2. Det nya arbetsflödets namn är {original_name}_replay_{timestamp}
  3. Historiska arbetsflödeshändelser och loggar läggs in igen i den nya miljön
  4. Lagrade signaler och beroenderader för väntande arbetsflöden spelas upp som historiskt tillstånd
  5. Om det ursprungliga arbetsflödet fortfarande var running köas det aktuella steget för bearbetning. Repeat- och start_workflows()-steg köas inte igen, så en uppspelning som stannar vid ett sådant steg förblir running utan jobb (#17)
  6. Om det ursprungliga arbetsflödet hade statusen waiting_for_signal, waiting_for_workflows, paused, failed, cancelled eller completed bevaras den statusen i det återuppspelade arbetsflödet

Det återuppspelade arbetsflödet får ett nytt ID och körs oberoende. Det påverkar inte originalet.

Vid waiting_for_workflows-uppspelningar återskapas de exporterade beroenderaderna med samma arbetsflödes-ID:n. Det är användbart för granskning och för miljöer där dessa beroendearbetsflöden också finns, men beroende-ID:n mappas inte automatiskt om mellan miljöer.

Användningsområden

Återskapa produktionsfel

Exportera ett arbetsflöde som misslyckades i produktion och spela upp det igen lokalt:

Shell
# 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 återuppspelade arbetsflödet har exakt samma tillstånd och stegdefinitioner. Pågående arbetsflöden köar det aktuella steget igen så att du kan fortsätta körningen där den avbröts, medan pausade eller väntande arbetsflöden återskapas i det blockerade tillståndet för granskning.

Flytta arbetsflöden mellan miljöer

Flytta ett arbetsflöde från staging till produktion, eller tvärtom, genom att exportera och spela upp det igen:

Shell
# On staging
wp queuety workflow export 15 --output=workflow.json

# On production
wp queuety workflow replay workflow.json

Granskning och arkivering

Exportera slutförda arbetsflöden för långtidslagring eller efterlevnad. Filen JSON innehåller hela körningshistoriken, inklusive indata, utdata, tillstånd före och efter, tidsuppgifter och felinformation.

PHP
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.