Liigu sisu juurde

Töövoo eksport ja taasesitus

Queuety saab eksportida töövoo täieliku käitusajaloo teisaldatavas JSON-vormingus ja taasesitada selle teises keskkonnas. See on kasulik tootmiskeskkonna vigade kohalikuks taasesitamiseks, töövoogude keskkondade vahel migreerimiseks ja auditeerimiseks.

Töövoo eksportimine

PHP API

Kutsu Queuety::export_workflow() välja töövoo ID-ga. See tagastab JSON-vormingusse teisendatava massiivi:

PHP
use Queuety\Queuety;

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

Et saada otse 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>]
Suvand Kirjeldus
<id> Töövoo ID (nõutav)
--output=<file> Failitee, kuhu kirjutada väärtus JSON. Vaikimisi standardväljundisse.
Shell
# Print to stdout
wp queuety workflow export 42

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

Töövoo taasesitamine

PHP API

Kutsu Queuety::replay_workflow() välja ekspordiandmetega. See tagastab uue töövoo 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>
Suvand Kirjeldus
<file> Eksporditud JSON faili tee (nõutav)
Shell
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.

Struktuur JSON

Eksport sisaldab töövoo täielikku olekut, seotud töid, jäljesündmusi, logikirjeid, salvestatud signaale, artefakte, tükke ja kõiki töövoogude sõltuvuste ooteandmeid:

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

Mõned väljad on ülaltoodud näites lühendatud. Tegelik eksport sisaldab kõiki jäljeveerge igast sündmuse reast.

Töövoo ekspordid säilitavad ka töövoo metaandmed, näiteks definition_version, definition_hash ja idempotency_key, kui need olid algsel käivitusel määratud.

Kuidas taasesitus toimib

Eksporditud töövoo taasesitamisel:

  1. Luuakse uus töövoo rida eksporditud oleku ja sammusätetega
  2. Uue töövoo nimi on {original_name}_replay_{timestamp}
  3. Ajaloolised töövoosündmused ja logid lisatakse uude keskkonda uuesti
  4. Salvestatud signaalid ja töövoo ootamise sõltuvusread taasesitatakse ajaloolise olekuna
  5. Kui algne töövoog oli endiselt olekus running, lisatakse praegune samm töötlemiseks järjekorda. Kordus- ja start_workflows()-samme uuesti järjekorda ei lisata, seega jääb ühel neist peatuv taasesitus olekusse running ilma tööta (#17)
  6. Kui algse töövoo olek oli waiting_for_signal, waiting_for_workflows, paused, failed, cancelled või completed, säilitatakse see olek taasesitatud töövoos

Taasesitatud töövoog saab uue ID ja töötab algsest sõltumatult. See ei mõjuta algset töövoogu.

waiting_for_workflows taasesituste korral luuakse eksporditud sõltuvusread uuesti samade töövoo ID-dega. See on kasulik auditeerimiseks ja keskkondades, kus need sõltuvustöövood on samuti olemas, kuid sõltuvuste ID-sid ei vastendata automaatselt eri keskkondade vahel.

Kasutusjuhud

Tootmiskeskkonna vigade taasesitamine

Ekspordi tootmiskeskkonnast nurjunud töövoog ja taasesita see kohalikult:

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

Taasesitatud töövoos on täpselt sama olek ja sammusätted. Töötavad töövood lisavad praeguse sammu uuesti järjekorda, et saaksid täitmist jätkata katkestuskohast, peatatud või ootel töövood luuakse aga kontrollimiseks uuesti samasse blokeeritud olekusse.

Töövoogude migreerimine keskkondade vahel

Töövoo saab viia testkeskkonnast tootmiskeskkonda (või vastupidi), eksportides ja taasesitades selle:

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

# On production
wp queuety workflow replay workflow.json

Auditeerimine ja arhiveerimine

Ekspordi lõpetatud töövood pikaajaliseks säilitamiseks või nõuetele vastavuse tagamiseks. JSON-fail sisaldab täielikku käitusajalugu, sealhulgas sisendeid, väljundeid, olekut enne ja pärast, ajastuse andmeid ning tõrgete üksikasju.

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