Skip to content

Commit

Permalink
Remove duplicate code in Builder
Browse files Browse the repository at this point in the history
  • Loading branch information
MrAlias committed Jul 24, 2023
1 parent e043e21 commit 7800f11
Showing 1 changed file with 16 additions and 29 deletions.
45 changes: 16 additions & 29 deletions sdk/metric/internal/aggregate/aggregate.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit 7800f11

Please sign in to comment.