2.6 KiB
2.6 KiB
Phase 5 Verification: Health Checks
4-Layer Verification Results
| Layer | Command | Result |
|---|---|---|
| 1. Build | go build ./... |
PASS |
| 2. Vet | go vet ./... |
PASS |
| 3. Test | go test ./... |
PASS (cli, daemon, jobspec, store all green) |
| 4. Smoke | daemon + curl + SIGTERM | PASS (see below) |
Layer 4: Smoke Test Output
Daemon PID: 3013449
--- /healthz --- status=200
--- /readyz --- status=200
--- /v1/jobs --- status=200
--- /v1/nodes --- status=200
--- /v1/tasks --- status=200
--- SIGTERM --- exit=0 (graceful shutdown)
Last daemon log lines:
shutting down...
{"time":"...","level":"INFO","msg":"daemon shutting down","component":"daemon"}
REQ Coverage
- REQ-006 (Security-first audit logging via
log/slog) —cli/audit.go+ structured slog in daemon ✓ - REQ-017 (
context.Contextpropagation in all I/O) — all handlers user.Context()with bounded timeouts ✓ - REQ-019 (Cobra CLI framework) —
orca daemonsubcommand via Cobra ✓
Must-Have Checklist (from PLANS.md)
internal/daemon/server.go—net/httpserver withhttp.ServeMuxand lifecycle (MarkReady/Shutdown)internal/daemon/health.go—/healthzand/readyzhandlersinternal/daemon/jobs_handler.go—/v1/jobs/*handlers (GET collection, GET item, GET tasks-for-job)internal/daemon/nodes_handler.go—/v1/nodes/*handlers (GET collection)internal/daemon/tasks_handler.go—/v1/tasks/*handlers (GET collection with filters)- Graceful shutdown via
signal.NotifyContextin CLI - Health endpoint checks SQLite connectivity (PingContext with 2s timeout)
- CLI subcommand wired to daemon —
internal/cli/daemon.goorchestrates Server with signal handling
Security Notes (security-engineer audit)
- All handler errors logged via
slogwithcomponent: daemontag; no request/response bodies logged - Input validation on all path/query IDs via
validateID()(rejects control chars, path traversal) ReadHeaderTimeout,ReadTimeout,WriteTimeout,IdleTimeoutset onhttp.Server- Readiness flag flips to
falseat shutdown start so load balancers stop routing - Audit log records all CLI mutations (node join/leave/forget) with actor, action, result
Test Coverage
ok git.cloudinit.dev/coreci/orca/internal/cli 0.005s
ok git.cloudinit.dev/coreci/orca/internal/daemon 6.362s coverage: 67.5%
ok git.cloudinit.dev/coreci/orca/internal/jobspec 0.004s
ok git.cloudinit.dev/coreci/orca/internal/store 4.881s
Daemon coverage at 67.5% — handler paths, mux routing, validation, and lifecycle all exercised.