mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-01-26 03:52:03 +02:00
cbc5890d9c
Instead of treating the returned *lastValue as an aggregator from newLastValue, just use the type directly to construct the Measure and ComputeAggregation functions returned from the Builder. Accept a destination type for the underlying computeAggregation. This allows memory reuse for collections which adds a considerable optimization. Simplify the integration testing of the last-value aggregate. Update benchmarking.
98 lines
2.4 KiB
Go
98 lines
2.4 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package aggregate // import "go.opentelemetry.io/otel/sdk/metric/internal/aggregate"
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"go.opentelemetry.io/otel/sdk/metric/metricdata"
|
|
)
|
|
|
|
func TestLastValue(t *testing.T) {
|
|
t.Cleanup(mockTime(now))
|
|
|
|
t.Run("Int64", testLastValue[int64]())
|
|
t.Run("Float64", testLastValue[float64]())
|
|
}
|
|
|
|
func testLastValue[N int64 | float64]() func(*testing.T) {
|
|
in, out := Builder[N]{Filter: attrFltr}.LastValue()
|
|
ctx := context.Background()
|
|
return test[N](in, out, []teststep[N]{
|
|
{
|
|
// Empty output if nothing is measured.
|
|
input: []arg[N]{},
|
|
expect: output{n: 0, agg: metricdata.Gauge[N]{}},
|
|
}, {
|
|
input: []arg[N]{
|
|
{ctx, 1, alice},
|
|
{ctx, -1, bob},
|
|
{ctx, 1, fltrAlice},
|
|
{ctx, 2, alice},
|
|
{ctx, -10, bob},
|
|
},
|
|
expect: output{
|
|
n: 2,
|
|
agg: metricdata.Gauge[N]{
|
|
DataPoints: []metricdata.DataPoint[N]{
|
|
{
|
|
Attributes: fltrAlice,
|
|
Time: staticTime,
|
|
Value: 2,
|
|
},
|
|
{
|
|
Attributes: fltrBob,
|
|
Time: staticTime,
|
|
Value: -10,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}, {
|
|
// Everything resets, do not report old measurements.
|
|
input: []arg[N]{},
|
|
expect: output{n: 0, agg: metricdata.Gauge[N]{}},
|
|
}, {
|
|
input: []arg[N]{
|
|
{ctx, 10, alice},
|
|
{ctx, 3, bob},
|
|
},
|
|
expect: output{
|
|
n: 2,
|
|
agg: metricdata.Gauge[N]{
|
|
DataPoints: []metricdata.DataPoint[N]{
|
|
{
|
|
Attributes: fltrAlice,
|
|
Time: staticTime,
|
|
Value: 10,
|
|
},
|
|
{
|
|
Attributes: fltrBob,
|
|
Time: staticTime,
|
|
Value: 3,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
func BenchmarkLastValue(b *testing.B) {
|
|
b.Run("Int64", benchmarkAggregate(Builder[int64]{}.LastValue))
|
|
b.Run("Float64", benchmarkAggregate(Builder[float64]{}.LastValue))
|
|
}
|