Preskoči na vsebino

Izvoz in ponovno predvajanje poteka dela

Queuety lahko izvozi celotno zgodovino izvajanja poteka dela v prenosljivo obliko JSON in jo ponovno predvaja v drugem okolju. To je uporabno za lokalno ponovitev napak iz produkcije, selitev potekov dela med okolji in revizijo.

Izvoz poteka dela

PHP API

Pokličite Queuety::export_workflow() z ID-jem poteka dela. Vrne polje, ki ga je mogoče serializirati v JSON:

PHP
use Queuety\Queuety;

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

Če želite neposredno pridobiti niz JSON:

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

CLI

Lupina
wp queuety workflow export <id> [--output=<file>]
Možnost Opis
<id> ID poteka dela (obvezno)
--output=<file> Pot datoteke, v katero se zapiše JSON. Privzeto je stdout.
Lupina
# Print to stdout
wp queuety workflow export 42

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

Ponovno predvajanje poteka dela

PHP API

Pokličite Queuety::replay_workflow() s podatki izvoza. Vrne ID novega poteka dela:

PHP
use Queuety\Queuety;

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

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

CLI

Lupina
wp queuety workflow replay <file>
Možnost Opis
<file> Pot do izvožene datoteke JSON (obvezno)
Lupina
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.

Struktura JSON

Izvoz vsebuje celotno stanje poteka dela, povezana opravila, dogodke sledi, vnose dnevnika, shranjene signale, artefakte, kose in vse vrstice čakanja na odvisnosti potekov dela:

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

Nekatera polja so v zgornjem primeru skrajšana. Dejanski izvoz vključuje vse stolpce sledi iz vsake vrstice dogodka.

Izvozi potekov dela ohranijo tudi metapodatke poteka dela, kot so definition_version, definition_hash in idempotency_key, če so bili nastavljeni pri izvirnem izvajanju.

Kako deluje ponovno predvajanje

Ko ponovno predvajate izvožen potek dela:

  1. Ustvari se nova vrstica poteka dela z izvoženim stanjem in definicijami korakov
  2. Ime novega poteka dela je {original_name}_replay_{timestamp}
  3. Zgodovinski dogodki in dnevniki poteka dela se znova vstavijo v novo okolje
  4. Shranjeni signali in vrstice odvisnosti čakanja na potek dela se ponovno predvajajo kot zgodovinsko stanje
  5. Če je bil izvirni potek dela še vedno running, se trenutni korak postavi v čakalno vrsto za obdelavo. Koraki Repeat in start_workflows() se ne postavijo znova v čakalno vrsto, zato ponovno predvajanje, ki se ustavi pri enem od njih, ostane running brez opravila (#17)
  6. Če je bil izvirni potek dela v stanju waiting_for_signal, waiting_for_workflows, paused, failed, cancelled ali completed, se to stanje ohrani tudi pri ponovno predvajanem poteku dela

Ponovno predvajani potek dela dobi nov ID in deluje neodvisno. Na izvirnika ne vpliva.

Pri ponovnih predvajanjih waiting_for_workflows se izvožene vrstice odvisnosti ponovno ustvarijo z istimi ID-ji potekov dela. To je uporabno za revizijo in v okoljih, kjer ti odvisni poteki dela prav tako obstajajo, vendar ID-jev odvisnosti med okolji ne preslika samodejno.

Primeri uporabe

Ponovitev napak iz produkcije

Izvozite neuspešni potek dela iz produkcije in ga ponovno predvajajte lokalno:

Lupina
# 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

Ponovno predvajani potek dela ima povsem enako stanje in definicije korakov. Pri izvajajočih se potekih dela se trenutni korak znova postavi v čakalno vrsto, zato lahko izvajanje nadaljujete tam, kjer se je končalo. Začasno ustavljeni ali čakajoči poteki dela pa se ponovno ustvarijo v tem blokiranem stanju za pregled.

Selitev potekov dela med okolji

Potek dela premaknite iz pripravljalnega okolja v produkcijo (ali obratno) tako, da ga izvozite in ponovno predvajate:

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

# On production
wp queuety workflow replay workflow.json

Revizija in arhiviranje

Izvozite zaključene poteke dela za dolgoročno shranjevanje ali skladnost. Datoteka JSON vsebuje celotno zgodovino izvajanja, vključno z vhodi, izhodi, stanjem pred in po korakih, časovnimi podatki in podrobnostmi o napakah.

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