38 lines
1.2 KiB
Go
38 lines
1.2 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package componentattribute // import "go.opentelemetry.io/collector/internal/telemetry/componentattribute"
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"go.opentelemetry.io/otel/metric"
|
|
)
|
|
|
|
type meterProviderWithAttributes struct {
|
|
metric.MeterProvider
|
|
attrs []attribute.KeyValue
|
|
}
|
|
|
|
// MeterProviderWithAttributes creates a MeterProvider with a new set of injected instrumentation scope attributes.
|
|
func MeterProviderWithAttributes(mp metric.MeterProvider, attrs attribute.Set) metric.MeterProvider {
|
|
if mpwa, ok := mp.(meterProviderWithAttributes); ok {
|
|
mp = mpwa.MeterProvider
|
|
}
|
|
return meterProviderWithAttributes{
|
|
MeterProvider: mp,
|
|
attrs: attrs.ToSlice(),
|
|
}
|
|
}
|
|
|
|
func (mpwa meterProviderWithAttributes) Meter(name string, opts ...metric.MeterOption) metric.Meter {
|
|
conf := metric.NewMeterConfig(opts...)
|
|
attrSet := conf.InstrumentationAttributes()
|
|
// prepend our attributes so they can be overwritten
|
|
newAttrs := append(slices.Clone(mpwa.attrs), attrSet.ToSlice()...)
|
|
// append our attribute set option to overwrite the old one
|
|
opts = append(opts, metric.WithInstrumentationAttributes(newAttrs...))
|
|
return mpwa.MeterProvider.Meter(name, opts...)
|
|
}
|