mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-25 05:06:38 +00:00
43 lines
1 KiB
Go
43 lines
1 KiB
Go
|
// Copyright The OpenTelemetry Authors
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
|
||
|
package aggregate // import "go.opentelemetry.io/otel/sdk/metric/internal/aggregate"
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
|
||
|
"go.opentelemetry.io/otel/sdk/metric/internal/exemplar"
|
||
|
"go.opentelemetry.io/otel/sdk/metric/metricdata"
|
||
|
)
|
||
|
|
||
|
var exemplarPool = sync.Pool{
|
||
|
New: func() any { return new([]exemplar.Exemplar) },
|
||
|
}
|
||
|
|
||
|
func collectExemplars[N int64 | float64](out *[]metricdata.Exemplar[N], f func(*[]exemplar.Exemplar)) {
|
||
|
dest := exemplarPool.Get().(*[]exemplar.Exemplar)
|
||
|
defer func() {
|
||
|
*dest = (*dest)[:0]
|
||
|
exemplarPool.Put(dest)
|
||
|
}()
|
||
|
|
||
|
*dest = reset(*dest, len(*out), cap(*out))
|
||
|
|
||
|
f(dest)
|
||
|
|
||
|
*out = reset(*out, len(*dest), cap(*dest))
|
||
|
for i, e := range *dest {
|
||
|
(*out)[i].FilteredAttributes = e.FilteredAttributes
|
||
|
(*out)[i].Time = e.Time
|
||
|
(*out)[i].SpanID = e.SpanID
|
||
|
(*out)[i].TraceID = e.TraceID
|
||
|
|
||
|
switch e.Value.Type() {
|
||
|
case exemplar.Int64ValueType:
|
||
|
(*out)[i].Value = N(e.Value.Int64())
|
||
|
case exemplar.Float64ValueType:
|
||
|
(*out)[i].Value = N(e.Value.Float64())
|
||
|
}
|
||
|
}
|
||
|
}
|