Pular para o conteúdo

Exportação e reprodução de fluxos de trabalho

Queuety pode exportar o histórico completo de execução de um fluxo de trabalho em um formato portátil JSON e reproduzi-lo em outro ambiente. Isso é útil para reproduzir localmente bugs de produção, migrar fluxos de trabalho entre ambientes e fazer auditorias.

Exportar um fluxo de trabalho

PHP API

Chame Queuety::export_workflow() com o ID do fluxo de trabalho. Ele retorna um array serializável em JSON:

PHP
use Queuety\Queuety;

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

Para obter diretamente uma string 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ção Descrição
<id> ID do fluxo de trabalho (obrigatório)
--output=<file> Caminho do arquivo onde gravar o JSON. O padrão é stdout.
Shell
# Print to stdout
wp queuety workflow export 42

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

Reproduzir um fluxo de trabalho

PHP API

Chame Queuety::replay_workflow() com os dados da exportação. Ele retorna o novo ID do fluxo de trabalho:

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ção Descrição
<file> Caminho para o arquivo JSON exportado (obrigatório)
Shell
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.

Estrutura de JSON

A exportação contém o estado completo do fluxo de trabalho, os trabalhos associados, eventos de rastreamento, entradas de registro, sinais armazenados, artefatos, blocos e quaisquer linhas de espera por dependências do fluxo de trabalho:

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

Alguns campos estão abreviados no exemplo acima. A exportação real inclui todas as colunas de rastreamento de cada linha de evento.

As exportações de fluxos de trabalho também preservam metadados, como definition_version, definition_hash e idempotency_key, quando definidos na execução original.

Como funciona a reprodução

Ao reproduzir um fluxo de trabalho exportado:

  1. Uma nova linha de fluxo de trabalho é criada com o estado exportado e as definições das etapas
  2. O nome do novo fluxo de trabalho é {original_name}_replay_{timestamp}
  3. Os eventos e registros históricos do fluxo de trabalho são reinseridos no novo ambiente
  4. Os sinais armazenados e as linhas de dependências de espera do fluxo de trabalho são reproduzidos como estado histórico
  5. Se o fluxo de trabalho original ainda estiver running, a etapa atual será enfileirada para processamento. As etapas Repeat e start_workflows() não são enfileiradas novamente; portanto, uma reprodução que pare em uma delas permanece running sem um trabalho (#17)
  6. Se o fluxo de trabalho original estiver waiting_for_signal, waiting_for_workflows, paused, failed, cancelled ou completed, esse status será preservado no fluxo de trabalho reproduzido

O fluxo de trabalho reproduzido recebe um novo ID e funciona de forma independente. Ele não afeta o original.

Para reproduções waiting_for_workflows, as linhas de dependência exportadas são recriadas com os mesmos IDs de fluxo de trabalho. Isso é útil para auditorias e para ambientes onde esses fluxos de trabalho dependentes também existem, mas não remapeia automaticamente os IDs de dependência entre ambientes.

Casos de uso

Reproduzir bugs de produção

Exporte um fluxo de trabalho com falha da produção e reproduza-o localmente:

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

O fluxo de trabalho reproduzido tem exatamente o mesmo estado e as mesmas definições de etapas. Os fluxos de trabalho em execução enfileiram novamente a etapa atual, para que você possa continuar a execução de onde pararam; os fluxos de trabalho pausados ou em espera são recriados nesse estado bloqueado para inspeção.

Migrar fluxos de trabalho entre ambientes

Mova um fluxo de trabalho de staging para produção (ou vice-versa) exportando-o e reproduzindo-o:

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

# On production
wp queuety workflow replay workflow.json

Auditoria e arquivamento

Exporte fluxos de trabalho concluídos para armazenamento de longo prazo ou conformidade. O arquivo JSON contém o histórico completo de execução, incluindo entradas, saídas, estado antes e depois, dados de tempo e detalhes de erros.

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