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:
use Queuety\Queuety;
$data = Queuety::export_workflow( $workflow_id );
Para obter diretamente uma string JSON:
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );
CLI
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. |
# 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:
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>
| Opção | Descrição |
|---|---|
<file> |
Caminho para o arquivo JSON exportado (obrigatório) |
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:
{
"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:
- Uma nova linha de fluxo de trabalho é criada com o estado exportado e as definições das etapas
- O nome do novo fluxo de trabalho é
{original_name}_replay_{timestamp} - Os eventos e registros históricos do fluxo de trabalho são reinseridos no novo ambiente
- Os sinais armazenados e as linhas de dependências de espera do fluxo de trabalho são reproduzidos como estado histórico
- Se o fluxo de trabalho original ainda estiver
running, a etapa atual será enfileirada para processamento. As etapas Repeat estart_workflows()não são enfileiradas novamente; portanto, uma reprodução que pare em uma delas permanecerunningsem um trabalho (#17) - Se o fluxo de trabalho original estiver
waiting_for_signal,waiting_for_workflows,paused,failed,cancelledoucompleted, 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:
# 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:
# 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.
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.