Skip to content

feat(orchestrator): C6 telemetry archive#48

Merged
martinjms merged 1 commit intomainfrom
feat/c6-telemetry-archive
May 2, 2026
Merged

feat(orchestrator): C6 telemetry archive#48
martinjms merged 1 commit intomainfrom
feat/c6-telemetry-archive

Conversation

@martinjms
Copy link
Copy Markdown
Collaborator

Implements #26 — orchestrator component C6 (operator-facing operational data persistence).

What this does

  • `TelemetryArchive` subscribes to a `TelemetrySource` broadcast and writes each snapshot as a standalone JSON file under the configured dir.
  • Filenames are `snapshot_<unix_ms>_.json` — monotonic + restart-safe (a new orchestrator process picks up where it left off without overwriting prior files because the `unix_ms` component keeps moving).
  • `Uploader` trait abstracts S3 — tests use `MockUploader`; production wires a real S3 client (deferred; no `aws-sdk-s3` dep yet). `NoopUploader` is the local-only deployment fallback.
  • Adds tokio `fs` + `io-util` features for async file I/O.

Out of scope (deliberate follow-up)

  • A real S3 `Uploader` impl. The trait is wired and tests verify the call shape end-to-end; only the concrete S3 client is deferred until we add the aws-sdk dep + bucket config plumbing.

Test plan

  • `cargo test -p arcane-swarm-orchestrator` — 56 passed, 0 failed (4 new C6 + 52 prior)
  • `cargo clippy -p arcane-swarm-orchestrator --all-targets -- -D warnings` clean
  • `cargo fmt --all -- --check` clean

Acceptance tests covered

All 4 from issue #26:

  • `snapshots_written_locally_during_run`
  • `snapshots_uploaded_to_s3` (verifies uploader received calls + bodies match local files byte-for-byte)
  • `snapshot_schema_includes_required_fields` (timestamp + recent_commands + fleet + per-cluster stats)
  • `restart_resumes_without_overwriting_prior_snapshots`

Closes #26.

🤖 Generated with Claude Code

Implements component C6 — operator-facing operational data persistence.

- TelemetryArchive subscribes to a TelemetrySource broadcast and writes
  each snapshot as a standalone JSON file under the configured dir.
- Filenames are snapshot_<unix_ms>_<seq>.json: monotonic, restart-safe
  (a new orchestrator process picks up where it left off without
  overwriting prior files because the unix_ms component keeps moving).
- Uploader trait abstracts S3; tests use MockUploader, production wires
  a real S3 client (deferred — no aws-sdk-s3 dep yet). NoopUploader is
  the local-only deployment fallback.
- Adds tokio fs + io-util features for async file I/O.

This is operational telemetry, not benchmark results. Per-phase /
per-tier benchmark output belongs to the benchmark controller in
arcane-scaling-benchmarks.

Closes #26.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@martinjms martinjms merged commit 6b4be0a into main May 2, 2026
1 check passed
@martinjms martinjms deleted the feat/c6-telemetry-archive branch May 2, 2026 16:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Orchestrator C6: telemetry archive (replaces results writer)

1 participant