1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // 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 metric // import "go.opentelemetry.io/otel/metric"
- import "go.opentelemetry.io/otel/attribute"
- // MeterConfig contains options for Meters.
- type MeterConfig struct {
- instrumentationVersion string
- schemaURL string
- attrs attribute.Set
- // Ensure forward compatibility by explicitly making this not comparable.
- noCmp [0]func() //nolint: unused // This is indeed used.
- }
- // InstrumentationVersion returns the version of the library providing
- // instrumentation.
- func (cfg MeterConfig) InstrumentationVersion() string {
- return cfg.instrumentationVersion
- }
- // InstrumentationAttributes returns the attributes associated with the library
- // providing instrumentation.
- func (cfg MeterConfig) InstrumentationAttributes() attribute.Set {
- return cfg.attrs
- }
- // SchemaURL is the schema_url of the library providing instrumentation.
- func (cfg MeterConfig) SchemaURL() string {
- return cfg.schemaURL
- }
- // MeterOption is an interface for applying Meter options.
- type MeterOption interface {
- // applyMeter is used to set a MeterOption value of a MeterConfig.
- applyMeter(MeterConfig) MeterConfig
- }
- // NewMeterConfig creates a new MeterConfig and applies
- // all the given options.
- func NewMeterConfig(opts ...MeterOption) MeterConfig {
- var config MeterConfig
- for _, o := range opts {
- config = o.applyMeter(config)
- }
- return config
- }
- type meterOptionFunc func(MeterConfig) MeterConfig
- func (fn meterOptionFunc) applyMeter(cfg MeterConfig) MeterConfig {
- return fn(cfg)
- }
- // WithInstrumentationVersion sets the instrumentation version.
- func WithInstrumentationVersion(version string) MeterOption {
- return meterOptionFunc(func(config MeterConfig) MeterConfig {
- config.instrumentationVersion = version
- return config
- })
- }
- // WithInstrumentationAttributes sets the instrumentation attributes.
- //
- // The passed attributes will be de-duplicated.
- func WithInstrumentationAttributes(attr ...attribute.KeyValue) MeterOption {
- return meterOptionFunc(func(config MeterConfig) MeterConfig {
- config.attrs = attribute.NewSet(attr...)
- return config
- })
- }
- // WithSchemaURL sets the schema URL.
- func WithSchemaURL(schemaURL string) MeterOption {
- return meterOptionFunc(func(config MeterConfig) MeterConfig {
- config.schemaURL = schemaURL
- return config
- })
- }
|