From 7800f11e5f0ccf9a735dc58475d2c318c9881e04 Mon Sep 17 00:00:00 2001 From: Tyler Yahn Date: Mon, 24 Jul 2023 12:17:47 -0700 Subject: [PATCH] Remove duplicate code in Builder --- sdk/metric/internal/aggregate/aggregate.go | 45 ++++++++-------------- 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/sdk/metric/internal/aggregate/aggregate.go b/sdk/metric/internal/aggregate/aggregate.go index 4a44b3d4a9d..f2a63be5edb 100644 --- a/sdk/metric/internal/aggregate/aggregate.go +++ b/sdk/metric/internal/aggregate/aggregate.go @@ -89,51 +89,38 @@ func (b Builder[N]) LastValue() (Measure[N], ComputeAggregation) { // arguments passed to the input are expected to be the precomputed sum values. func (b Builder[N]) PrecomputedSum(monotonic bool) (Measure[N], ComputeAggregation) { s := newPrecomputedSum[N]() - - var setData func(dest *[]metricdata.DataPoint[N]) - switch b.Temporality { - case metricdata.DeltaTemporality: - setData = s.delta - default: - setData = s.cumulative - } - return b.filter(s.measure), func(dest *metricdata.Aggregation) int { - // Ignore if dest is not a metricdata.Sum. The chance for memory - // reuse of the DataPoints is missed (better luck next time). - sData, _ := (*dest).(metricdata.Sum[N]) - sData.Temporality = b.Temporality - sData.IsMonotonic = monotonic - setData(&sData.DataPoints) - *dest = sData - - return len(sData.DataPoints) - } + f := b.dPtFunc(s.delta, s.cumulative) + return b.filter(s.measure), b.compSumFunc(monotonic, f) } // Sum returns a sum aggregate function input and output. func (b Builder[N]) Sum(monotonic bool) (Measure[N], ComputeAggregation) { s := newSum[N]() + f := b.dPtFunc(s.delta, s.cumulative) + return b.filter(s.measure), b.compSumFunc(monotonic, f) +} - var setData func(dest *[]metricdata.DataPoint[N]) - switch b.Temporality { - case metricdata.DeltaTemporality: - setData = s.delta - default: - setData = s.cumulative - } - return b.filter(s.measure), func(dest *metricdata.Aggregation) int { +func (b Builder[N]) compSumFunc(mono bool, f func(*[]metricdata.DataPoint[N])) ComputeAggregation { + return func(dest *metricdata.Aggregation) int { // Ignore if dest is not a metricdata.Sum. The chance for memory // reuse of the DataPoints is missed (better luck next time). sData, _ := (*dest).(metricdata.Sum[N]) sData.Temporality = b.Temporality - sData.IsMonotonic = monotonic - setData(&sData.DataPoints) + sData.IsMonotonic = mono + f(&sData.DataPoints) *dest = sData return len(sData.DataPoints) } } +func (b Builder[N]) dPtFunc(delta, cumulative func(*[]metricdata.DataPoint[N])) func(*[]metricdata.DataPoint[N]) { + if b.Temporality == metricdata.DeltaTemporality { + return delta + } + return cumulative +} + // ExplicitBucketHistogram returns a histogram aggregate function input and // output. func (b Builder[N]) ExplicitBucketHistogram(cfg aggregation.ExplicitBucketHistogram, noSum bool) (Measure[N], ComputeAggregation) {