Przejdź do treści

Eksportowanie i odtwarzanie przepływu pracy

Queuety może eksportować pełną historię wykonania przepływu pracy do przenośnego formatu JSON i odtwarzać ją w innym środowisku. Przydaje się to do lokalnego odtwarzania błędów z produkcji, przenoszenia przepływów między środowiskami i przeprowadzania audytów.

Eksportowanie przepływu pracy

PHP API

Wywołaj Queuety::export_workflow() z identyfikatorem przepływu pracy. Zwraca tablicę możliwą do serializacji do JSON:

PHP
use Queuety\Queuety;

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

Aby bezpośrednio uzyskać ciąg JSON:

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

CLI

Powłoka
wp queuety workflow export <id> [--output=<file>]
Opcja Opis
<id> Ścieżka pliku, do którego zapisać JSON. Domyślnie: standardowe wyjście.
--output=<file>
Powłoka
# Print to stdout
wp queuety workflow export 42

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

Odtwarzanie przepływu pracy

PHP API

Wywołaj Queuety::replay_workflow() z danymi eksportu. Zwraca nowy identyfikator przepływu pracy:

PHP
use Queuety\Queuety;

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

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

CLI

Powłoka
wp queuety workflow replay <file>
Opcja Opis
<file> Ścieżka do wyeksportowanego pliku JSON (wymagana)
Powłoka
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.

Struktura JSON

Eksport zawiera pełny stan przepływu pracy, powiązane zadania, zdarzenia śladu, wpisy dziennika, zapisane sygnały, artefakty, fragmenty i wszystkie wiersze oczekiwania na zależności przepływów pracy:

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

Niektóre pola w powyższym przykładzie zostały skrócone. Rzeczywisty eksport zawiera wszystkie kolumny śladu z każdego wiersza zdarzenia.

Eksporty przepływów pracy zachowują także metadane, takie jak definition_version, definition_hash i idempotency_key, jeśli zostały ustawione podczas pierwotnego przebiegu.

Jak działa odtwarzanie

Podczas odtwarzania wyeksportowanego przepływu pracy:

  1. Tworzony jest nowy wiersz przepływu pracy z wyeksportowanym stanem i definicjami kroków
  2. Nazwa nowego przepływu pracy to {original_name}_replay_{timestamp}
  3. Historyczne zdarzenia i wpisy dziennika przepływu pracy są ponownie wstawiane w nowym środowisku
  4. Zapisane sygnały i wiersze zależności oczekiwania są odtwarzane jako stan historyczny
  5. Jeśli pierwotny przepływ pracy nadal miał status running, bieżący krok jest umieszczany w kolejce do przetworzenia. Kroki powtarzania i start_workflows() nie są ponownie umieszczane w kolejce, więc odtworzenie zatrzymane na jednym z nich pozostaje w stanie running bez zadania (#17)
  6. Jeśli pierwotny przepływ pracy miał status waiting_for_signal, waiting_for_workflows, paused, failed, cancelled lub completed, status ten zostaje zachowany w odtworzonym przepływie pracy

Odtworzony przepływ pracy otrzymuje nowy identyfikator i działa niezależnie. Nie wpływa na oryginał.

W przypadku odtworzeń waiting_for_workflows wyeksportowane wiersze zależności są odtwarzane z tymi samymi identyfikatorami przepływów pracy. Przydaje się to podczas audytu i w środowiskach, w których istnieją również te zależne przepływy, ale identyfikatory zależności nie są automatycznie mapowane między środowiskami.

Zastosowania

Odtwarzanie błędów z produkcji

Wyeksportuj nieudany przepływ pracy z produkcji i odtwórz go lokalnie:

Powłoka
# 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

Odtworzony przepływ pracy ma dokładnie ten sam stan i definicje kroków. Działające przepływy ponownie umieszczają bieżący krok w kolejce, dzięki czemu można wznowić wykonanie od miejsca, w którym zostało przerwane. Wstrzymane lub oczekujące przepływy są odtwarzane w tym zablokowanym stanie na potrzeby inspekcji.

Przenoszenie przepływów pracy między środowiskami

Przenieś przepływ pracy ze środowiska testowego do produkcyjnego (lub odwrotnie), eksportując i odtwarzając go:

Powłoka
# On staging
wp queuety workflow export 15 --output=workflow.json

# On production
wp queuety workflow replay workflow.json

Audytowanie i archiwizacja

Eksportuj ukończone przepływy pracy do długoterminowego przechowywania lub na potrzeby zgodności. Plik JSON zawiera pełną historię wykonania, w tym dane wejściowe, wyjściowe, stan przed i po, informacje o czasie oraz szczegóły błędów.

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