Treci la conținut

Exportul și reluarea fluxurilor de lucru

Queuety poate exporta istoricul complet de execuție al unui flux de lucru într-un format portabil JSON și îl poate relua într-un alt mediu. Acest lucru este util pentru reproducerea locală a erorilor din producție, migrarea fluxurilor de lucru între medii și auditare.

Exportarea unui flux de lucru

PHP API

Apelați Queuety::export_workflow() cu ID-ul fluxului de lucru. Returnează un tablou serializabil JSON:

PHP
use Queuety\Queuety;

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

Pentru a obține direct un șir 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>]
Opțiune Descriere
<id> ID-ul fluxului de lucru (obligatoriu)
--output=<file> Calea fișierului în care se scrie JSON. Implicit, rezultatul este trimis la ieșirea standard.
Shell
# Print to stdout
wp queuety workflow export 42

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

Reluarea unui flux de lucru

PHP API

Apelați Queuety::replay_workflow() cu datele exportului. Returnează ID-ul noului flux de lucru:

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>
Opțiune Descriere
<file> Calea către fișierul JSON exportat (obligatoriu)
Shell
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.

Structura JSON

Exportul conține starea completă a fluxului de lucru, joburile asociate, evenimentele de urmărire, intrările în jurnal, semnalele stocate, artefactele, fragmentele și orice rânduri pentru așteptarea dependențelor dintre fluxurile de lucru:

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

Unele câmpuri sunt abreviate în exemplul de mai sus. Exportul real include toate coloanele de urmărire din fiecare rând de eveniment.

Exporturile fluxurilor de lucru păstrează și metadatele acestora, precum definition_version, definition_hash și idempotency_key, dacă acestea au fost setate în execuția inițială.

Cum funcționează reluarea

Când reluați un flux de lucru exportat:

  1. Se creează un rând nou pentru fluxul de lucru, cu starea și definițiile pașilor exportate
  2. Numele noului flux de lucru este {original_name}_replay_{timestamp}
  3. Evenimentele și intrările istorice din jurnalul fluxului de lucru sunt reinserate în noul mediu
  4. Semnalele stocate și rândurile dependențelor așteptate dintre fluxurile de lucru sunt reluate ca stare istorică
  5. Dacă fluxul de lucru inițial era încă running, pasul curent este pus în coadă pentru procesare. Pașii Repeat și start_workflows() nu sunt repuși în coadă, astfel că o reluare care se oprește la unul dintre ei rămâne running fără job (#17)
  6. Dacă fluxul de lucru inițial era waiting_for_signal, waiting_for_workflows, paused, failed, cancelled sau completed, acea stare este păstrată în fluxul de lucru reluat

Fluxul de lucru reluat primește un ID nou și funcționează independent. Nu afectează fluxul original.

Pentru reluările waiting_for_workflows, rândurile de dependență exportate sunt recreate cu aceleași ID-uri de flux de lucru. Acest lucru este util pentru auditare și pentru medii în care există și fluxurile de lucru dependente, dar ID-urile dependențelor nu sunt remapate automat între medii.

Cazuri de utilizare

Reproducerea erorilor din producție

Exportați un flux de lucru eșuat din mediul de producție și reluați-l local:

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

Fluxul de lucru reluat are exact aceeași stare și aceleași definiții ale pașilor. Fluxurile de lucru aflate în execuție repun pasul curent în coadă, astfel încât să puteți continua de unde s-au oprit, iar cele suspendate sau în așteptare sunt recreate în starea blocată, pentru a fi inspectate.

Migrarea fluxurilor de lucru între medii

Mutați un flux de lucru din staging în producție (sau invers) exportându-l și reluându-l:

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

# On production
wp queuety workflow replay workflow.json

Auditare și arhivare

Exportați fluxurile de lucru încheiate pentru stocare pe termen lung sau conformitate. Fișierul JSON conține istoricul complet de execuție, inclusiv intrările, ieșirile, starea înainte și după, datele de timp și detaliile erorilor.

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