Files
ottyl/tickets/042-fix-sum-avg-timestamp-merge.md
T

1.6 KiB

042 — Verify/fix exact-timestamp merging for non-rate sum()/avg()

Summary

Non-rate sum()/avg() queries merge per-label series via merge_series_exact (src/engine.rs), which only combines values whose timestamps match exactly. In practice, raw occurrence timestamps across different label groups essentially never land on the same millisecond, so sum(requests) by (path) over raw occurrence counts likely produces sparse, near-empty merged series rather than a meaningful "total requests over time," even though that's the obvious expectation for such a query. The existing code comment justifying exact-match merging ("nothing to carry forward") only holds if the query isn't meant to sum sparse counts over time — which is exactly the common case for occurrence-count dashboards.

Scope

  • Build a seeded fixture with multiple label groups whose events arrive at different (non-coincident) timestamps and confirm whether sum(...) by (...) currently produces the expected combined total or the suspected sparse/near-empty result.
  • If confirmed broken: bucket points into fixed time windows (the same way rate() already windows) before summing/averaging across label groups, instead of requiring exact timestamp coincidence.
  • Add a regression test covering multi-label-group sum()/avg() over time.

Acceptance criteria

  • sum(metric) by (label) over multiple label groups with staggered event timestamps produces a sensible combined time series (not sparse/empty), verified by a new test fixture.
  • avg() behaves analogously.
  • Existing single-label-group queries are unaffected.

Depends on

None.