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..6f96359eb 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 increaseOpen = 'increase('; + local increaseClose = '[%s])' % rate_interval; + { + classic: '%(increaseOpen)s%(metric)s_count{%(selector)s}%(increaseClose)s' % { + metric: metric, + rateInterval: rate_interval, + increaseOpen: increaseOpen, + increaseClose: increaseClose, + selector: selector, + }, + native: 'histogram_count(%(increaseOpen)s%(metric)s{%(selector)s}%(increaseClose)s)' % { + metric: metric, + rateInterval: rate_interval, + increaseOpen: increaseOpen, + increaseClose: increaseClose, + 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