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:
use Queuety\Queuety;
$data = Queuety::export_workflow( $workflow_id );
Če želite neposredno pridobiti niz JSON:
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );
CLI
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. |
# 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:
use Queuety\Queuety;
$json = file_get_contents( '/tmp/workflow-42.json' );
$data = json_decode( $json, true );
$new_id = Queuety::replay_workflow( $data );
CLI
wp queuety workflow replay <file>
| Možnost | Opis |
|---|---|
<file> |
Pot do izvožene datoteke JSON (obvezno) |
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:
{
"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:
- Ustvari se nova vrstica poteka dela z izvoženim stanjem in definicijami korakov
- Ime novega poteka dela je
{original_name}_replay_{timestamp} - Zgodovinski dogodki in dnevniki poteka dela se znova vstavijo v novo okolje
- Shranjeni signali in vrstice odvisnosti čakanja na potek dela se ponovno predvajajo kot zgodovinsko stanje
- Če je bil izvirni potek dela še vedno
running, se trenutni korak postavi v čakalno vrsto za obdelavo. Koraki Repeat instart_workflows()se ne postavijo znova v čakalno vrsto, zato ponovno predvajanje, ki se ustavi pri enem od njih, ostanerunningbrez opravila (#17) - Če je bil izvirni potek dela v stanju
waiting_for_signal,waiting_for_workflows,paused,failed,cancelledalicompleted, 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:
# 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:
# 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.
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.