From d4a22cff0a472ddc085b004d76e5873aca06c0f9 Mon Sep 17 00:00:00 2001 From: Brendan O'Handley Date: Fri, 28 Apr 2023 08:40:17 -0400 Subject: [PATCH] Prometheus: Fix regression for $__rate_interval comparison (#67460) * fix , comparison regression * intervalMs was not pressent before the regression and this value changes the adjusted interval calculating giving a false positive in favor of the regression --- pkg/tsdb/prometheus/models/query.go | 7 ++++++- pkg/tsdb/prometheus/models/query_test.go | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/tsdb/prometheus/models/query.go b/pkg/tsdb/prometheus/models/query.go index 741d6d4e8bc..384648bc837 100644 --- a/pkg/tsdb/prometheus/models/query.go +++ b/pkg/tsdb/prometheus/models/query.go @@ -156,6 +156,10 @@ func calculatePrometheusInterval( query backend.DataQuery, intervalCalculator intervalv2.Calculator, ) (time.Duration, error) { + // we need to compare the original query model after it is overwritten below to variables so that we can + // calculate the rateInterval if it is equal to $__rate_interval or ${__rate_interval} + originalQueryInterval := queryInterval + // If we are using variable for interval/step, we will replace it with calculated interval if isVariableInterval(queryInterval) { queryInterval = "" @@ -173,7 +177,8 @@ func calculatePrometheusInterval( adjustedInterval = calculatedInterval.Value } - if queryInterval == varRateInterval || queryInterval == varRateIntervalAlt { + // here is where we compare for $__rate_interval or ${__rate_interval} + if originalQueryInterval == varRateInterval || originalQueryInterval == varRateIntervalAlt { // Rate interval is final and is not affected by resolution return calculateRateInterval(adjustedInterval, timeInterval, intervalCalculator), nil } else { diff --git a/pkg/tsdb/prometheus/models/query_test.go b/pkg/tsdb/prometheus/models/query_test.go index ed48c1d0cfa..dd30c5f0b24 100644 --- a/pkg/tsdb/prometheus/models/query_test.go +++ b/pkg/tsdb/prometheus/models/query_test.go @@ -376,7 +376,6 @@ func TestParse(t *testing.T) { "format": "time_series", "intervalFactor": 1, "interval": "$__rate_interval", - "intervalMs": 60000, "refId": "A" }`, timeRange)