Přejít k obsahu

Export a přehrání workflow

Queuety dokáže exportovat úplnou historii běhu workflow v přenositelném formátu JSON a přehrát ji v jiném prostředí. Hodí se k místnímu reprodukování chyb z produkce, migraci workflow mezi prostředími a auditům.

Export workflow

PHP API

Zavolejte Queuety::export_workflow() s ID workflow. Vrátí pole serializovatelné do JSON:

PHP
use Queuety\Queuety;

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

Chcete-li přímo získat řetězec JSON:

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>]
Možnost Popis
<id> ID pracovního postupu (povinné)
--output=<file> Cesta k souboru, do kterého se zapíše JSON. Výchozí je stdout.
Shell
# Print to stdout
wp queuety workflow export 42

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

Přehrání workflow

PHP API

Zavolejte Queuety::replay_workflow() s exportovanými daty. Vrátí nové ID workflow:

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>
Možnost Popis
<file> Cesta k exportovanému souboru JSON (povinné)
Shell
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.

Struktura JSON

Export obsahuje úplný stav workflow, související úlohy, události trasování, záznamy protokolu, uložené signály, artefakty, datové bloky a řádky čekání na závislosti workflow:

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

Některá pole jsou v příkladu výše zkrácená. Skutečný export obsahuje všechny sloupce trasování z každého řádku události.

Exporty workflow také zachovávají metadata workflow, například definition_version, definition_hash a idempotency_key, pokud byla nastavena při původním běhu.

Jak funguje přehrání

Při přehrání exportovaného workflow:

  1. Vytvoří se nový řádek workflow s exportovaným stavem a definicemi kroků
  2. Název nového workflow je {original_name}_replay_{timestamp}
  3. Historické události workflow a záznamy protokolu se znovu vloží do nového prostředí
  4. Uložené signály a řádky závislostí čekání na workflow se přehrají jako historický stav
  5. Pokud bylo původní workflow stále ve stavu running, aktuální krok se zařadí ke zpracování. Kroky Repeat a start_workflows() se znovu nezařazují, takže přehrání končící na jednom z nich zůstane ve stavu running bez úlohy (#17)
  6. Pokud bylo původní workflow ve stavu waiting_for_signal, waiting_for_workflows, paused, failed, cancelled nebo completed, tento stav se v přehrávaném workflow zachová

Přehrané workflow dostane nové ID a funguje nezávisle. Původní workflow nijak neovlivní.

Při přehráních waiting_for_workflows se exportované řádky závislostí znovu vytvoří se stejnými ID workflow. To se hodí pro audit a prostředí, ve kterých tato závislá workflow také existují, jejich ID závislostí se však mezi prostředími automaticky nepřemapují.

Příklady použití

Reprodukce chyb z produkce

Exportujte neúspěšné workflow z produkce a přehrajte ho lokálně:

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

Přehrané workflow má přesně stejný stav a definice kroků. U běžících workflow se aktuální krok zařadí znovu, takže můžete pokračovat od místa, kde skončila. Pozastavená workflow a workflow čekající na splnění podmínky se znovu vytvoří ve stejném zablokovaném stavu, abyste je mohli prozkoumat.

Migrace workflow mezi prostředími

Přesuňte workflow z přípravného prostředí do produkce (nebo naopak) exportem a přehráním:

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

# On production
wp queuety workflow replay workflow.json

Audit a archivace

Exportujte dokončená workflow pro dlouhodobé uchování nebo splnění požadavků. Soubor JSON obsahuje úplnou historii běhu včetně vstupů, výstupů, stavu před krokem i po něm, časových údajů a podrobností o chybách.

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