tidaldb/.sdlc/features/pg1-instrumented-metrics/tasks.md

2.9 KiB

pg1-instrumented-metrics: Tasks

T1: Percentile Methods on LatencyHistogram

Files: tidal/src/db/metrics/histogram.rs

Add total_count(), percentile(p), and render_percentile_gauges(name) methods to LatencyHistogram. Add 7 unit tests covering: empty histogram, single observation, known distribution, beyond all bounds, total_count tracking, empty gauges render, format validation.

Tests: cargo test --manifest-path tidal/Cargo.toml --lib histogram --features metrics

T2: Per-Signal-Type Write Counters

Files: tidal/src/db/metrics/mod.rs, tidal/src/db/signals.rs

Add signal_writes_by_type: DashMap<String, AtomicU64> field to MetricsState. In signal(), after existing metrics block, increment the per-type counter (bounded at 256 entries). Update render_prometheus() to emit per-type counter lines.

Tests: cargo test --manifest-path tidal/Cargo.toml --lib --features metrics

T3: UserSignalTimestampMap

Files: tidal/src/db/metrics/mod.rs, tidal/src/db/signals.rs

Add UserSignalTimestampMap struct with new(), record(), get(), evict_oldest(). Add user_last_signal field to MetricsState. In signal_with_context(), record user timestamp before dispatch.

Tests: Unit tests for record/get/eviction in metrics module.

T4: Personalization Staleness Histogram

Files: tidal/src/db/metrics/mod.rs, tidal/src/db/query_ops.rs

Add personalization_staleness: LatencyHistogram field to MetricsState with staleness-appropriate bounds. At the top of retrieve() and search(), compute and record staleness. Update render_prometheus() with staleness histogram + percentiles.

Tests: cargo test --manifest-path tidal/Cargo.toml --lib --features metrics

T5: Feedback-Loop Latency Histogram

Files: tidal/src/db/metrics/mod.rs, tidal/src/db/query_ops.rs

Add feedback_loop_latency: LatencyHistogram field to MetricsState. After result assembly in retrieve() and search(), check if user's signaled entity is in results (within 60s) and record loop latency. Update render_prometheus().

Tests: cargo test --manifest-path tidal/Cargo.toml --lib --features metrics

T6: /diagnostics JSON Endpoint

Files: tidal/src/db/metrics/mod.rs, tidal/src/db/http.rs

Add render_diagnostics() method to MetricsState returning JSON with per-type counts, latency percentiles, staleness percentiles, feedback-loop percentiles. Add /diagnostics route to HTTP server (feature-gated).

Tests: cargo test --manifest-path tidal/Cargo.toml --lib --features metrics

T7: Integration Test

Files: tidal/tests/pg1_instrumented_metrics.rs

End-to-end test: open db with metrics feature, write signals with user context, run retrieve/search queries, verify Prometheus output contains new metric names and /diagnostics returns parseable JSON.

Tests: cargo test --manifest-path tidal/Cargo.toml --test pg1_instrumented_metrics --features metrics,test-utils