From 7bb95d548cf7f0aa6fa5b76facfc8155f2ac5a4b Mon Sep 17 00:00:00 2001 From: Andrew Hall Date: Thu, 27 Nov 2025 01:18:01 +0800 Subject: [PATCH] promql: Ensure that `rate`/`increase`/`delta` of histograms results in a gauge histogram. (#17608) Signed-off-by: Andrew Hall --- promql/functions.go | 1 + promql/functions_internal_test.go | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/promql/functions.go b/promql/functions.go index 3d85719895..925ae83ae5 100644 --- a/promql/functions.go +++ b/promql/functions.go @@ -400,6 +400,7 @@ func histogramRate(points []HPoint, isCounter bool, metricName string, pos posra annos.Add(annotations.NewNativeHistogramNotGaugeWarning(metricName, pos)) } + h.CounterResetHint = histogram.GaugeType return h.Compact(0), annos } diff --git a/promql/functions_internal_test.go b/promql/functions_internal_test.go index 658eb7550d..24d9a44e04 100644 --- a/promql/functions_internal_test.go +++ b/promql/functions_internal_test.go @@ -19,8 +19,23 @@ import ( "testing" "github.com/stretchr/testify/require" + + "github.com/prometheus/prometheus/model/histogram" + "github.com/prometheus/prometheus/promql/parser/posrange" ) +func TestHistogramRateCounterResetHint(t *testing.T) { + points := []HPoint{ + {T: 0, H: &histogram.FloatHistogram{CounterResetHint: histogram.CounterReset, Count: 5, Sum: 5}}, + {T: 1, H: &histogram.FloatHistogram{CounterResetHint: histogram.UnknownCounterReset, Count: 10, Sum: 10}}, + } + fh, _ := histogramRate(points, false, "foo", posrange.PositionRange{}) + require.Equal(t, histogram.GaugeType, fh.CounterResetHint) + + fh, _ = histogramRate(points, true, "foo", posrange.PositionRange{}) + require.Equal(t, histogram.GaugeType, fh.CounterResetHint) +} + func TestKahanSumInc(t *testing.T) { testCases := map[string]struct { first float64