Ekspor dan Replay Alur Kerja
Queuety dapat mengekspor seluruh riwayat eksekusi alur kerja ke format JSON portabel dan me-replay-nya di lingkungan lain. Ini berguna untuk mereproduksi bug produksi secara lokal, memigrasikan alur kerja antarlingkungan, dan melakukan audit.
Mengekspor alur kerja
PHP API
Panggil Queuety::export_workflow() dengan ID alur kerja. Fungsi ini mengembalikan array yang dapat diserialisasi sebagai JSON:
use Queuety\Queuety;
$data = Queuety::export_workflow( $workflow_id );
Untuk mendapatkan string JSON secara langsung:
$json = json_encode( $data, JSON_PRETTY_PRINT );
file_put_contents( '/tmp/workflow-42.json', $json );
CLI
wp queuety workflow export <id> [--output=<file>]
| Opsi | Deskripsi |
|---|---|
<id> |
ID workflow (wajib) |
--output=<file> |
Jalur file untuk menulis JSON. Default-nya stdout. |
# Print to stdout
wp queuety workflow export 42
# Write to a file
wp queuety workflow export 42 --output=/tmp/workflow-42.json
Me-replay alur kerja
PHP API
Panggil Queuety::replay_workflow() dengan data ekspor. Fungsi ini mengembalikan ID alur kerja baru:
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>
| Opsi | Deskripsi |
|---|---|
<file> |
Jalur ke file JSON yang diekspor (wajib) |
wp queuety workflow replay /tmp/workflow-42.json
# Success: Workflow replayed. New workflow ID: 85.
Struktur JSON
Ekspor mencakup seluruh status alur kerja, tugas terkait, peristiwa jejak, entri log, sinyal tersimpan, artefak, potongan, dan baris tunggu dependensi alur kerja apa pun:
{
"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"
}
Beberapa kolom disingkat pada contoh di atas. Ekspor sebenarnya menyertakan semua kolom jejak dari setiap baris peristiwa.
Ekspor alur kerja juga mempertahankan metadata alur kerja seperti definition_version, definition_hash, dan idempotency_key jika metadata tersebut ditetapkan pada proses awal.
Cara kerja replay
Saat Anda me-replay alur kerja yang diekspor:
- Baris alur kerja baru dibuat dengan status dan definisi langkah yang diekspor
- Nama alur kerja baru adalah
{original_name}_replay_{timestamp} - Peristiwa dan log alur kerja historis dimasukkan kembali ke lingkungan baru
- Sinyal tersimpan dan baris dependensi workflow-wait diputar ulang sebagai status historis
- Jika alur kerja awal masih
running, langkah saat ini dimasukkan ke antrean untuk diproses. Langkah Repeat danstart_workflows()tidak dimasukkan kembali ke antrean, jadi replay yang berhenti pada salah satunya tetaprunningtanpa tugas (#17) - Jika status alur kerja awal adalah
waiting_for_signal,waiting_for_workflows,paused,failed,cancelled, ataucompleted, status tersebut dipertahankan pada alur kerja hasil replay
Alur kerja hasil replay mendapat ID baru dan berjalan secara independen. Alur kerja ini tidak memengaruhi yang asli.
Untuk replay waiting_for_workflows, baris dependensi yang diekspor dibuat ulang dengan ID alur kerja yang sama. Ini berguna untuk audit dan lingkungan tempat alur kerja dependensi tersebut juga tersedia, tetapi ID dependensi tidak dipetakan ulang secara otomatis antarlingkungan.
Kasus penggunaan
Mereproduksi bug produksi
Ekspor alur kerja yang gagal dari produksi, lalu replay secara lokal:
# 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
Alur kerja hasil replay memiliki status dan definisi langkah yang persis sama. Alur kerja yang berjalan memasukkan kembali langkah saat ini ke antrean sehingga Anda dapat melanjutkan eksekusi dari titik berhenti. Alur kerja yang dijeda atau menunggu dibuat ulang dalam status tertahan tersebut untuk diperiksa.
Memigrasikan alur kerja antarlingkungan
Pindahkan alur kerja dari staging ke produksi (atau sebaliknya) dengan mengekspor dan me-replay-nya:
# On staging
wp queuety workflow export 15 --output=workflow.json
# On production
wp queuety workflow replay workflow.json
Audit dan pengarsipan
Ekspor alur kerja yang selesai untuk penyimpanan jangka panjang atau kepatuhan. File JSON berisi seluruh riwayat eksekusi, termasuk input, output, status sebelum/sesudah, data waktu, dan detail error.
$data = Queuety::export_workflow( $workflow_id );
// Store $data in your archive system, S3, etc.