Siirry sisältöön

Työnkulun vienti ja toisto

Queuety voi viedä työnkulun koko suoritushistorian siirrettävään JSON-muotoon ja toistaa sen toisessa ympäristössä. Tämä on hyödyllistä tuotantovirheiden toistamiseen paikallisesti, työnkulkujen siirtämiseen ympäristöjen välillä ja auditointiin.

Työnkulun vieminen

PHP API

Kutsu Queuety::export_workflow() työnkulun tunnuksella. Se palauttaa JSON-sarjoitettavan taulukon:

PHP
use Queuety\Queuety;

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

Saat suoraan JSON-merkkijonon seuraavasti:

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>]
Valitsin Kuvaus
<id> Työnkulun tunniste (pakollinen)
--output=<file> JSON-tiedoston tallennuspolku. Oletusarvo on vakiotuloste.
Shell
# Print to stdout
wp queuety workflow export 42

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

Työnkulun toistaminen

PHP API

Kutsu Queuety::replay_workflow() vientitiedoilla. Se palauttaa uuden työnkulun tunnuksen:

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>
Valitsin Kuvaus
<file> Viedyn JSON-tiedoston polku (pakollinen)
Shell
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.

JSON-rakenne

Vienti sisältää työnkulun koko tilan, siihen liittyvät työt, jälkitapahtumat, lokimerkinnät, tallennetut signaalit, artefaktit, palat ja kaikki työnkulkujen riippuvuusodotusten rivit:

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

Osa kentistä on yllä olevassa esimerkissä lyhennetty. Todellinen vienti sisältää kaikkien tapahtumarivien kaikki jälkisarakkeet.

Työnkulkujen viennit säilyttävät myös työnkulun metatiedot, kuten definition_version, definition_hash ja idempotency_key, jos ne asetettiin alkuperäiselle suoritukselle.

Toiston toiminta

Kun toistat viedyn työnkulun:

  1. Luodaan uusi työnkulkumerkintä, jossa on viety tila ja vaihemääritelmät
  2. Uuden työnkulun nimi on {original_name}_replay_{timestamp}
  3. Historialliset työnkulun tapahtumat ja lokit lisätään uudelleen uuteen ympäristöön
  4. Tallennetut signaalit ja työnkulun odotuksen riippuvuusrivit toistetaan historiallisena tilana
  5. Jos alkuperäinen työnkulku oli edelleen running, nykyinen vaihe lisätään käsiteltäväksi. Repeat- ja start_workflows()-vaiheita ei lisätä uudelleen jonoon, joten jos toisto pysähtyy niihin, työnkulku jää tilaan running ilman työtä (#17)
  6. Jos alkuperäisen työnkulun tila oli waiting_for_signal, waiting_for_workflows, paused, failed, cancelled tai completed, sama tila säilyy toistetussa työnkulussa

Toistettu työnkulku saa uuden tunnuksen ja toimii itsenäisesti. Se ei vaikuta alkuperäiseen.

waiting_for_workflows-toistoissa viedyt riippuvuusrivit luodaan uudelleen samoilla työnkulkujen tunnuksilla. Tämä on hyödyllistä auditointiin ja ympäristöissä, joissa kyseiset riippuvuustyönkulut ovat myös olemassa, mutta riippuvuustunnuksia ei yhdistetä automaattisesti ympäristöjen välillä.

Käyttötapaukset

Tuotantovirheiden toistaminen

Vie epäonnistunut työnkulku tuotantoympäristöstä ja toista se paikallisesti:

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

Toistetulla työnkululla on täsmälleen sama tila ja samat vaihemääritelmät. Käynnissä olevissa työnkuluissa nykyinen vaihe lisätään uudelleen jonoon, jotta suoritusta voi jatkaa siitä, mihin se jäi. Keskeytetyt tai odottavat työnkulut luodaan tarkastelua varten uudelleen samaan estettyyn tilaan.

Työnkulkujen siirtäminen ympäristöjen välillä

Siirrä työnkulku testiympäristöstä tuotantoon tai päinvastoin viemällä ja toistamalla se:

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

# On production
wp queuety workflow replay workflow.json

Auditointi ja arkistointi

Vie valmistuneet työnkulut pitkäaikaista säilytystä tai vaatimustenmukaisuutta varten. JSON-tiedosto sisältää koko suoritushistorian, myös syötteet, tulosteet, tilan ennen ja jälkeen, ajoitustiedot ja virheiden tiedot.

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