58 lines
2.9 KiB
Markdown
58 lines
2.9 KiB
Markdown
# 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`
|