Ga naar de inhoud

Workflow exporteren en opnieuw afspelen

Queuety kan de volledige uitvoeringsgeschiedenis van een workflow exporteren naar een draagbaar formaat JSON en deze opnieuw afspelen in een andere omgeving. Dit is handig om productieproblemen lokaal te reproduceren, workflows tussen omgevingen te migreren en controles uit te voeren.

Een workflow exporteren

PHP API

Roep Queuety::export_workflow() aan met de workflow-ID. Dit retourneert een JSON-serialiseerbare array:

PHP
use Queuety\Queuety;

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

Zo krijg je direct een JSON-string:

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>]
Optie Beschrijving
<id> Workflow-ID (vereist)
--output=<file> Bestandspad waarnaar de JSON wordt geschreven. Standaard is stdout.
Shell
# Print to stdout
wp queuety workflow export 42

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

Een workflow opnieuw afspelen

PHP API

Roep Queuety::replay_workflow() aan met de exportgegevens. Dit retourneert de nieuwe workflow-ID:

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>
Optie Beschrijving
<file> Pad naar het geëxporteerde JSON-bestand (vereist)
Shell
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.

Structuur van JSON

De export bevat de volledige workflowstatus, bijbehorende taken, tracegebeurtenissen, logboekitems, opgeslagen signalen, artefacten, chunks en eventuele wachtrijrecords voor workflowafhankelijkheden:

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

Sommige velden zijn in het bovenstaande voorbeeld afgekort. De daadwerkelijke export bevat alle tracekolommen van elke gebeurtenisrij.

Workflowexports behouden ook workflowmetagegevens zoals definition_version, definition_hash en idempotency_key als die in de oorspronkelijke uitvoering waren ingesteld.

Hoe opnieuw afspelen werkt

Wanneer je een geëxporteerde workflow opnieuw afspeelt:

  1. Er wordt een nieuwe workflowrij aangemaakt met de geëxporteerde status en stapdefinities
  2. De naam van de nieuwe workflow is {original_name}_replay_{timestamp}
  3. Historische workflowgebeurtenissen en logboeken worden opnieuw ingevoegd in de nieuwe omgeving
  4. Opgeslagen signalen en afhankelijkheidsrijen voor workflowwachten worden opnieuw afgespeeld als historische status
  5. Als de oorspronkelijke workflow nog running was, wordt de huidige stap in de wachtrij geplaatst voor verwerking. Stappen voor herhaling en start_workflows() worden niet opnieuw in de wachtrij geplaatst, dus een replay die bij een ervan stopt, blijft running zonder taak (#17)
  6. Als de oorspronkelijke workflow waiting_for_signal, waiting_for_workflows, paused, failed, cancelled of completed was, blijft die status behouden in de opnieuw afgespeelde workflow

De opnieuw afgespeelde workflow krijgt een nieuwe ID en werkt onafhankelijk. Dit heeft geen invloed op het origineel.

Bij waiting_for_workflows-replays worden de geëxporteerde afhankelijkheidsrijen opnieuw aangemaakt met dezelfde workflow-ID's. Dat is handig voor controles en voor omgevingen waarin die afhankelijkheidsworkflows ook bestaan, maar afhankelijkheids-ID's worden niet automatisch tussen omgevingen omgezet.

Toepassingen

Productieproblemen reproduceren

Exporteer een mislukte workflow uit productie en speel deze lokaal opnieuw af:

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

De opnieuw afgespeelde workflow heeft exact dezelfde status en stapdefinities. Voor actieve workflows wordt de huidige stap opnieuw in de wachtrij geplaatst, zodat je de uitvoering kunt voortzetten vanaf het punt waar deze was gebleven. Gepauzeerde of wachtende workflows worden opnieuw aangemaakt in die geblokkeerde status, zodat je ze kunt inspecteren.

Workflows tussen omgevingen migreren

Verplaats een workflow van staging naar productie (of omgekeerd) door deze te exporteren en opnieuw af te spelen:

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

# On production
wp queuety workflow replay workflow.json

Controleren en archiveren

Exporteer voltooide workflows voor langdurige opslag of nalevingsdoeleinden. Het JSON-bestand bevat de volledige uitvoeringsgeschiedenis, inclusief invoer, uitvoer, status vóór en na, timinggegevens en foutdetails.

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