From 833a484af505eb7a1ff3a2e259f0da834d631611 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gy=C3=B6rgy=20Krajcsovits?= Date: Thu, 4 Dec 2025 14:28:43 +0100 Subject: [PATCH 1/2] feat(mixin-utils): add ncHistogramCountIncrease MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on ncHistogramCountRate, but it cannot use the recording rule, because that does `rate` and not `incease`. Signed-off-by: György Krajcsovits --- .../test_native-classic-histogram.libsonnet | 20 ++++++++++++++++ mixin-utils/utils.libsonnet | 23 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/mixin-utils/test/test_native-classic-histogram.libsonnet b/mixin-utils/test/test_native-classic-histogram.libsonnet index 8a2f90e7b..11746e403 100644 --- a/mixin-utils/test/test_native-classic-histogram.libsonnet +++ b/mixin-utils/test/test_native-classic-histogram.libsonnet @@ -238,3 +238,23 @@ test.new(std.thisFile) } ) ) ++ test.case.new( + name='histogram count increase', + test=test.expect.eq( + actual=utils.ncHistogramCountIncrease('request_duration_seconds', 'cluster="cluster1", job="job1"'), + expected={ + classic: 'increase(request_duration_seconds_count{cluster="cluster1", job="job1"}[$__rate_interval])', + native: 'histogram_count(increase(request_duration_seconds{cluster="cluster1", job="job1"}[$__rate_interval]))', + } + ) +) ++ test.case.new( + name='histogram count increase with rate interval', + test=test.expect.eq( + actual=utils.ncHistogramCountIncrease('request_duration_seconds', 'cluster="cluster1", job="job1"', rate_interval='5m'), + expected={ + classic: 'increase(request_duration_seconds_count{cluster="cluster1", job="job1"}[5m])', + native: 'histogram_count(increase(request_duration_seconds{cluster="cluster1", job="job1"}[5m]))', + } + ) +) diff --git a/mixin-utils/utils.libsonnet b/mixin-utils/utils.libsonnet index 01eeda884..52d4e647b 100644 --- a/mixin-utils/utils.libsonnet +++ b/mixin-utils/utils.libsonnet @@ -94,6 +94,29 @@ local g = import 'grafana-builder/grafana.libsonnet'; }, }, + // The ncHistogramCountIncrease (native classic histogram count rate) function is + // used to calculate the histogram increase of count from native histograms or + // classic histograms. Metric name should be provided without _count suffix. + ncHistogramCountIncrease(metric, selector, rate_interval='$__rate_interval'):: + local rateOpen = 'increase('; + local rateClose = '[%s])' % rate_interval; + { + classic: '%(rateOpen)s%(metric)s_count{%(selector)s}%(rateClose)s' % { + metric: metric, + rateInterval: rate_interval, + rateOpen: rateOpen, + rateClose: rateClose, + selector: selector, + }, + native: 'histogram_count(%(rateOpen)s%(metric)s{%(selector)s}%(rateClose)s)' % { + metric: metric, + rateInterval: rate_interval, + rateOpen: rateOpen, + rateClose: rateClose, + selector: selector, + }, + }, + // TODO(krajorama) Switch to histogram_avg function for native histograms later. // ncHistogramAverageRate (native classic histogram average rate) function is // used to calculate the histogram average rate from native histograms or From 9fedcc246e5ac425d294df358cbbf7fe3920f015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gy=C3=B6rgy=20Krajcsovits?= Date: Thu, 4 Dec 2025 15:03:26 +0100 Subject: [PATCH 2/2] rename local vars MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: György Krajcsovits --- mixin-utils/utils.libsonnet | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mixin-utils/utils.libsonnet b/mixin-utils/utils.libsonnet index 52d4e647b..6f96359eb 100644 --- a/mixin-utils/utils.libsonnet +++ b/mixin-utils/utils.libsonnet @@ -98,21 +98,21 @@ local g = import 'grafana-builder/grafana.libsonnet'; // used to calculate the histogram increase of count from native histograms or // classic histograms. Metric name should be provided without _count suffix. ncHistogramCountIncrease(metric, selector, rate_interval='$__rate_interval'):: - local rateOpen = 'increase('; - local rateClose = '[%s])' % rate_interval; + local increaseOpen = 'increase('; + local increaseClose = '[%s])' % rate_interval; { - classic: '%(rateOpen)s%(metric)s_count{%(selector)s}%(rateClose)s' % { + classic: '%(increaseOpen)s%(metric)s_count{%(selector)s}%(increaseClose)s' % { metric: metric, rateInterval: rate_interval, - rateOpen: rateOpen, - rateClose: rateClose, + increaseOpen: increaseOpen, + increaseClose: increaseClose, selector: selector, }, - native: 'histogram_count(%(rateOpen)s%(metric)s{%(selector)s}%(rateClose)s)' % { + native: 'histogram_count(%(increaseOpen)s%(metric)s{%(selector)s}%(increaseClose)s)' % { metric: metric, rateInterval: rate_interval, - rateOpen: rateOpen, - rateClose: rateClose, + increaseOpen: increaseOpen, + increaseClose: increaseClose, selector: selector, }, },