You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-11-25 22:41:46 +02:00
Fixes https://github.com/open-telemetry/opentelemetry-go/issues/7035 Benchmarks with a default value of 2000. Parallel ``` goos: linux goarch: amd64 pkg: go.opentelemetry.io/otel/sdk/metric cpu: Intel(R) Xeon(R) CPU @ 2.20GHz │ main24.txt │ newwithlimit24.txt │ │ sec/op │ sec/op vs base │ SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/0-24 272.4n ± 6% 287.6n ± 11% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/1-24 318.1n ± 9% 289.9n ± 11% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/10-24 305.5n ± 13% 273.4n ± 9% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/0-24 263.4n ± 14% 273.1n ± 12% ~ (p=0.485 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/1-24 276.8n ± 8% 284.3n ± 10% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/10-24 266.2n ± 10% 285.9n ± 16% ~ (p=0.394 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/0-24 265.9n ± 11% 286.4n ± 14% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/1-24 301.6n ± 16% 286.1n ± 6% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/10-24 256.1n ± 16% 282.7n ± 14% +10.41% (p=0.041 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/0-24 269.1n ± 19% 272.0n ± 6% ~ (p=0.485 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/1-24 299.5n ± 12% 261.6n ± 16% -12.67% (p=0.013 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/10-24 286.3n ± 16% 275.8n ± 10% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/0-24 265.4n ± 4% 243.1n ± 11% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/1-24 260.6n ± 10% 258.7n ± 17% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/10-24 266.6n ± 15% 251.8n ± 16% ~ (p=0.699 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/0-24 265.4n ± 9% 263.3n ± 13% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/1-24 271.7n ± 15% 305.4n ± 21% ~ (p=0.132 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/10-24 287.4n ± 13% 265.7n ± 9% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/0-24 276.6n ± 9% 300.4n ± 25% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/1-24 294.9n ± 11% 276.8n ± 21% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/10-24 308.3n ± 8% 281.4n ± 20% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/0-24 296.1n ± 13% 286.5n ± 14% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/1-24 329.0n ± 19% 299.6n ± 8% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/10-24 288.1n ± 28% 309.9n ± 14% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/0-24 298.3n ± 12% 282.9n ± 9% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/1-24 309.7n ± 4% 355.2n ± 11% +14.67% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/10-24 308.5n ± 12% 307.6n ± 15% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/0-24 294.1n ± 17% 289.1n ± 24% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/1-24 326.6n ± 13% 299.2n ± 14% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/10-24 329.8n ± 19% 283.7n ± 15% ~ (p=0.132 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/0-24 269.9n ± 15% 266.7n ± 6% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/1-24 297.4n ± 9% 271.9n ± 5% -8.59% (p=0.009 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/10-24 326.4n ± 20% 276.3n ± 5% -15.32% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/0-24 298.1n ± 10% 259.6n ± 10% -12.92% (p=0.009 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/1-24 311.4n ± 6% 276.8n ± 7% -11.11% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/10-24 312.4n ± 7% 264.1n ± 8% -15.45% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/0-24 286.2n ± 8% 272.9n ± 13% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/1-24 310.1n ± 4% 289.2n ± 11% ~ (p=0.065 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/10-24 329.8n ± 8% 277.1n ± 11% -15.95% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/0-24 261.4n ± 17% 262.8n ± 7% ~ (p=0.965 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/1-24 292.3n ± 10% 271.2n ± 8% -7.22% (p=0.026 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/10-24 306.6n ± 12% 271.9n ± 7% ~ (p=0.065 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/0-24 263.2n ± 22% 254.7n ± 6% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/1-24 284.8n ± 5% 285.0n ± 11% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/10-24 285.7n ± 17% 296.6n ± 10% ~ (p=0.485 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/0-24 272.3n ± 11% 261.4n ± 8% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/1-24 281.9n ± 21% 287.8n ± 11% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/10-24 283.3n ± 15% 254.3n ± 12% -10.24% (p=0.041 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/0-24 296.1n ± 13% 295.5n ± 9% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/1-24 310.0n ± 19% 301.7n ± 11% ~ (p=0.485 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/10-24 298.8n ± 17% 297.1n ± 3% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/0-24 303.4n ± 7% 280.9n ± 8% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/1-24 292.2n ± 14% 290.7n ± 13% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/10-24 313.9n ± 20% 314.4n ± 8% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/0-24 289.8n ± 3% 287.3n ± 3% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/1-24 321.0n ± 6% 308.7n ± 8% -3.82% (p=0.041 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/10-24 313.1n ± 9% 315.4n ± 5% ~ (p=0.818 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/0-24 318.9n ± 13% 285.8n ± 24% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/1-24 319.0n ± 9% 317.0n ± 12% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/10-24 396.8n ± 15% 300.3n ± 5% -24.30% (p=0.002 n=6) geomean 294.1n 282.9n -3.80% ``` Single-threaded: ``` goos: linux goarch: amd64 pkg: go.opentelemetry.io/otel/sdk/metric cpu: Intel(R) Xeon(R) CPU @ 2.20GHz │ main1.txt │ newwithlimit1.txt │ │ sec/op │ sec/op vs base │ SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/0 117.5n ± 5% 109.8n ± 20% ~ (p=0.089 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/1 128.5n ± 35% 118.5n ± 3% -7.79% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Counter/Attributes/10 126.4n ± 4% 117.3n ± 4% -7.16% (p=0.004 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/0 110.4n ± 1% 112.2n ± 3% +1.59% (p=0.028 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/1 119.8n ± 2% 118.4n ± 4% ~ (p=0.171 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Counter/Attributes/10 120.1n ± 2% 121.9n ± 3% ~ (p=0.394 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/0 117.3n ± 38% 109.5n ± 2% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/1 120.8n ± 28% 119.9n ± 8% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64UpDownCounter/Attributes/10 121.1n ± 3% 117.0n ± 2% -3.38% (p=0.009 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/0 111.8n ± 11% 111.0n ± 2% ~ (p=0.331 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/1 121.7n ± 9% 117.5n ± 1% -3.49% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64UpDownCounter/Attributes/10 126.5n ± 4% 122.3n ± 8% ~ (p=0.290 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/0 125.5n ± 25% 109.2n ± 3% -12.98% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/1 121.7n ± 6% 116.5n ± 6% -4.31% (p=0.022 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Gauge/Attributes/10 119.9n ± 4% 120.8n ± 4% ~ (p=0.838 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/0 112.5n ± 6% 109.7n ± 40% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/1 121.2n ± 6% 121.4n ± 3% ~ (p=0.727 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Gauge/Attributes/10 118.6n ± 2% 120.5n ± 2% +1.69% (p=0.045 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/0 97.38n ± 14% 96.56n ± 10% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/1 107.1n ± 4% 105.6n ± 5% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/Int64Histogram/Attributes/10 109.7n ± 5% 108.4n ± 3% ~ (p=0.221 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/0 98.30n ± 4% 96.02n ± 2% -2.31% (p=0.015 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/1 107.9n ± 9% 106.2n ± 14% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsDisabled/Float64Histogram/Attributes/10 107.6n ± 1% 107.0n ± 1% ~ (p=0.485 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/0 151.5n ± 3% 149.7n ± 2% ~ (p=0.071 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/1 161.2n ± 2% 158.5n ± 3% -1.67% (p=0.035 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialInt64Histogram/Attributes/10 162.3n ± 2% 159.9n ± 37% ~ (p=0.240 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/0 154.7n ± 10% 149.0n ± 1% -3.68% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/1 161.0n ± 2% 160.5n ± 3% ~ (p=0.732 n=6) SyncMeasure/NoView/ExemplarsDisabled/ExponentialFloat64Histogram/Attributes/10 162.9n ± 1% 162.6n ± 27% ~ (p=0.838 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/0 180.1n ± 4% 174.0n ± 7% ~ (p=0.065 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/1 193.2n ± 12% 198.7n ± 10% ~ (p=1.000 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Counter/Attributes/10 191.4n ± 43% 183.8n ± 3% -4.02% (p=0.004 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/0 182.7n ± 5% 179.8n ± 4% ~ (p=0.132 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/1 199.4n ± 3% 185.1n ± 2% -7.17% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Counter/Attributes/10 198.5n ± 6% 193.0n ± 5% ~ (p=0.589 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/0 184.7n ± 19% 173.5n ± 5% ~ (p=0.058 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/1 183.2n ± 7% 180.7n ± 2% -1.39% (p=0.037 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64UpDownCounter/Attributes/10 185.3n ± 21% 183.6n ± 3% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/0 187.4n ± 7% 183.8n ± 6% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/1 194.6n ± 4% 189.2n ± 2% -2.75% (p=0.004 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64UpDownCounter/Attributes/10 199.9n ± 5% 189.4n ± 3% -5.23% (p=0.026 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/0 179.2n ± 5% 187.7n ± 4% ~ (p=0.065 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/1 188.6n ± 2% 192.1n ± 4% ~ (p=0.221 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Gauge/Attributes/10 186.2n ± 1% 189.9n ± 3% +2.04% (p=0.009 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/0 179.4n ± 4% 183.6n ± 8% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/1 188.0n ± 2% 190.6n ± 2% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Gauge/Attributes/10 197.1n ± 6% 188.3n ± 6% ~ (p=0.180 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/0 222.6n ± 10% 227.8n ± 5% ~ (p=0.310 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/1 224.2n ± 7% 230.8n ± 6% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Int64Histogram/Attributes/10 240.6n ± 10% 233.6n ± 6% ~ (p=0.394 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/0 216.9n ± 4% 222.0n ± 5% ~ (p=0.937 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/1 223.3n ± 3% 221.4n ± 4% ~ (p=0.372 n=6) SyncMeasure/NoView/ExemplarsEnabled/Float64Histogram/Attributes/10 240.8n ± 5% 224.5n ± 19% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/0 224.5n ± 2% 218.2n ± 2% -2.83% (p=0.030 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/1 230.9n ± 2% 228.8n ± 1% -0.95% (p=0.026 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialInt64Histogram/Attributes/10 231.5n ± 4% 242.1n ± 5% ~ (p=0.093 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/0 237.1n ± 3% 221.8n ± 6% -6.47% (p=0.004 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/1 245.3n ± 0% 234.4n ± 4% -4.46% (p=0.002 n=6) SyncMeasure/NoView/ExemplarsEnabled/ExponentialFloat64Histogram/Attributes/10 249.3n ± 11% 240.9n ± 17% ~ (p=0.589 n=6) geomean 159.1n 156.0n -1.97% ``` --------- Co-authored-by: Robert Pająk <pellared@hotmail.com>
251 lines
6.3 KiB
Go
251 lines
6.3 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package aggregate // import "go.opentelemetry.io/otel/sdk/metric/internal/aggregate"
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
"time"
|
|
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"go.opentelemetry.io/otel/sdk/metric/metricdata"
|
|
)
|
|
|
|
type sumValue[N int64 | float64] struct {
|
|
n N
|
|
res FilteredExemplarReservoir[N]
|
|
attrs attribute.Set
|
|
}
|
|
|
|
// valueMap is the storage for sums.
|
|
type valueMap[N int64 | float64] struct {
|
|
sync.Mutex
|
|
newRes func(attribute.Set) FilteredExemplarReservoir[N]
|
|
limit limiter[sumValue[N]]
|
|
values map[attribute.Distinct]sumValue[N]
|
|
}
|
|
|
|
func newValueMap[N int64 | float64](limit int, r func(attribute.Set) FilteredExemplarReservoir[N]) *valueMap[N] {
|
|
return &valueMap[N]{
|
|
newRes: r,
|
|
limit: newLimiter[sumValue[N]](limit),
|
|
values: make(map[attribute.Distinct]sumValue[N]),
|
|
}
|
|
}
|
|
|
|
func (s *valueMap[N]) measure(ctx context.Context, value N, fltrAttr attribute.Set, droppedAttr []attribute.KeyValue) {
|
|
s.Lock()
|
|
defer s.Unlock()
|
|
|
|
v, ok := s.values[fltrAttr.Equivalent()]
|
|
if !ok {
|
|
fltrAttr = s.limit.Attributes(fltrAttr, s.values)
|
|
v = s.values[fltrAttr.Equivalent()]
|
|
v.res = s.newRes(fltrAttr)
|
|
v.attrs = fltrAttr
|
|
}
|
|
|
|
v.n += value
|
|
v.res.Offer(ctx, value, droppedAttr)
|
|
|
|
s.values[fltrAttr.Equivalent()] = v
|
|
}
|
|
|
|
// newSum returns an aggregator that summarizes a set of measurements as their
|
|
// arithmetic sum. Each sum is scoped by attributes and the aggregation cycle
|
|
// the measurements were made in.
|
|
func newSum[N int64 | float64](monotonic bool, limit int, r func(attribute.Set) FilteredExemplarReservoir[N]) *sum[N] {
|
|
return &sum[N]{
|
|
valueMap: newValueMap[N](limit, r),
|
|
monotonic: monotonic,
|
|
start: now(),
|
|
}
|
|
}
|
|
|
|
// sum summarizes a set of measurements made as their arithmetic sum.
|
|
type sum[N int64 | float64] struct {
|
|
*valueMap[N]
|
|
|
|
monotonic bool
|
|
start time.Time
|
|
}
|
|
|
|
func (s *sum[N]) delta(
|
|
dest *metricdata.Aggregation, //nolint:gocritic // The pointer is needed for the ComputeAggregation interface
|
|
) int {
|
|
t := now()
|
|
|
|
// If *dest is not a metricdata.Sum, memory reuse is missed. In that case,
|
|
// use the zero-value sData and hope for better alignment next cycle.
|
|
sData, _ := (*dest).(metricdata.Sum[N])
|
|
sData.Temporality = metricdata.DeltaTemporality
|
|
sData.IsMonotonic = s.monotonic
|
|
|
|
s.Lock()
|
|
defer s.Unlock()
|
|
|
|
n := len(s.values)
|
|
dPts := reset(sData.DataPoints, n, n)
|
|
|
|
var i int
|
|
for _, val := range s.values {
|
|
dPts[i].Attributes = val.attrs
|
|
dPts[i].StartTime = s.start
|
|
dPts[i].Time = t
|
|
dPts[i].Value = val.n
|
|
collectExemplars(&dPts[i].Exemplars, val.res.Collect)
|
|
i++
|
|
}
|
|
// Do not report stale values.
|
|
clear(s.values)
|
|
// The delta collection cycle resets.
|
|
s.start = t
|
|
|
|
sData.DataPoints = dPts
|
|
*dest = sData
|
|
|
|
return n
|
|
}
|
|
|
|
func (s *sum[N]) cumulative(
|
|
dest *metricdata.Aggregation, //nolint:gocritic // The pointer is needed for the ComputeAggregation interface
|
|
) int {
|
|
t := now()
|
|
|
|
// If *dest is not a metricdata.Sum, memory reuse is missed. In that case,
|
|
// use the zero-value sData and hope for better alignment next cycle.
|
|
sData, _ := (*dest).(metricdata.Sum[N])
|
|
sData.Temporality = metricdata.CumulativeTemporality
|
|
sData.IsMonotonic = s.monotonic
|
|
|
|
s.Lock()
|
|
defer s.Unlock()
|
|
|
|
n := len(s.values)
|
|
dPts := reset(sData.DataPoints, n, n)
|
|
|
|
var i int
|
|
for _, value := range s.values {
|
|
dPts[i].Attributes = value.attrs
|
|
dPts[i].StartTime = s.start
|
|
dPts[i].Time = t
|
|
dPts[i].Value = value.n
|
|
collectExemplars(&dPts[i].Exemplars, value.res.Collect)
|
|
// TODO (#3006): This will use an unbounded amount of memory if there
|
|
// are unbounded number of attribute sets being aggregated. Attribute
|
|
// sets that become "stale" need to be forgotten so this will not
|
|
// overload the system.
|
|
i++
|
|
}
|
|
|
|
sData.DataPoints = dPts
|
|
*dest = sData
|
|
|
|
return n
|
|
}
|
|
|
|
// newPrecomputedSum returns an aggregator that summarizes a set of
|
|
// observations as their arithmetic sum. Each sum is scoped by attributes and
|
|
// the aggregation cycle the measurements were made in.
|
|
func newPrecomputedSum[N int64 | float64](
|
|
monotonic bool,
|
|
limit int,
|
|
r func(attribute.Set) FilteredExemplarReservoir[N],
|
|
) *precomputedSum[N] {
|
|
return &precomputedSum[N]{
|
|
valueMap: newValueMap[N](limit, r),
|
|
monotonic: monotonic,
|
|
start: now(),
|
|
}
|
|
}
|
|
|
|
// precomputedSum summarizes a set of observations as their arithmetic sum.
|
|
type precomputedSum[N int64 | float64] struct {
|
|
*valueMap[N]
|
|
|
|
monotonic bool
|
|
start time.Time
|
|
|
|
reported map[attribute.Distinct]N
|
|
}
|
|
|
|
func (s *precomputedSum[N]) delta(
|
|
dest *metricdata.Aggregation, //nolint:gocritic // The pointer is needed for the ComputeAggregation interface
|
|
) int {
|
|
t := now()
|
|
newReported := make(map[attribute.Distinct]N)
|
|
|
|
// If *dest is not a metricdata.Sum, memory reuse is missed. In that case,
|
|
// use the zero-value sData and hope for better alignment next cycle.
|
|
sData, _ := (*dest).(metricdata.Sum[N])
|
|
sData.Temporality = metricdata.DeltaTemporality
|
|
sData.IsMonotonic = s.monotonic
|
|
|
|
s.Lock()
|
|
defer s.Unlock()
|
|
|
|
n := len(s.values)
|
|
dPts := reset(sData.DataPoints, n, n)
|
|
|
|
var i int
|
|
for key, value := range s.values {
|
|
delta := value.n - s.reported[key]
|
|
|
|
dPts[i].Attributes = value.attrs
|
|
dPts[i].StartTime = s.start
|
|
dPts[i].Time = t
|
|
dPts[i].Value = delta
|
|
collectExemplars(&dPts[i].Exemplars, value.res.Collect)
|
|
|
|
newReported[key] = value.n
|
|
i++
|
|
}
|
|
// Unused attribute sets do not report.
|
|
clear(s.values)
|
|
s.reported = newReported
|
|
// The delta collection cycle resets.
|
|
s.start = t
|
|
|
|
sData.DataPoints = dPts
|
|
*dest = sData
|
|
|
|
return n
|
|
}
|
|
|
|
func (s *precomputedSum[N]) cumulative(
|
|
dest *metricdata.Aggregation, //nolint:gocritic // The pointer is needed for the ComputeAggregation interface
|
|
) int {
|
|
t := now()
|
|
|
|
// If *dest is not a metricdata.Sum, memory reuse is missed. In that case,
|
|
// use the zero-value sData and hope for better alignment next cycle.
|
|
sData, _ := (*dest).(metricdata.Sum[N])
|
|
sData.Temporality = metricdata.CumulativeTemporality
|
|
sData.IsMonotonic = s.monotonic
|
|
|
|
s.Lock()
|
|
defer s.Unlock()
|
|
|
|
n := len(s.values)
|
|
dPts := reset(sData.DataPoints, n, n)
|
|
|
|
var i int
|
|
for _, val := range s.values {
|
|
dPts[i].Attributes = val.attrs
|
|
dPts[i].StartTime = s.start
|
|
dPts[i].Time = t
|
|
dPts[i].Value = val.n
|
|
collectExemplars(&dPts[i].Exemplars, val.res.Collect)
|
|
|
|
i++
|
|
}
|
|
// Unused attribute sets do not report.
|
|
clear(s.values)
|
|
|
|
sData.DataPoints = dPts
|
|
*dest = sData
|
|
|
|
return n
|
|
}
|