mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2024-12-28 21:09:17 +02:00
Accept scope attributes during Meter creation (#3738)
* Accept scope attr during Meter creation * Fix lint * Add changes to changelog * Return a Set from InstrumentationAttributes Likely these attributes will be stored as a Set in the SDK. Don't cause two conversions because we return a slice here. * Add config tests * Fix lint
This commit is contained in:
parent
59daa05b19
commit
c5c3c95077
@ -30,6 +30,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||
- `OtelLibraryName` -> `OTelLibraryName`
|
||||
- `OtelLibraryVersion` -> `OTelLibraryVersion`
|
||||
- `OtelStatusDescription` -> `OTelStatusDescription`
|
||||
- The `WithInstrumentationAttributes` option to `go.opentelemetry.io/otel/metric`. (#3738)
|
||||
|
||||
### Changed
|
||||
|
||||
|
@ -14,17 +14,30 @@
|
||||
|
||||
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 is the version of the library providing instrumentation.
|
||||
// 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
|
||||
@ -60,6 +73,16 @@ func WithInstrumentationVersion(version string) MeterOption {
|
||||
})
|
||||
}
|
||||
|
||||
// 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 {
|
||||
|
43
metric/config_test.go
Normal file
43
metric/config_test.go
Normal file
@ -0,0 +1,43 @@
|
||||
// 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_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
)
|
||||
|
||||
func TestConfig(t *testing.T) {
|
||||
version := "v1.1.1"
|
||||
schemaURL := "https://opentelemetry.io/schemas/1.0.0"
|
||||
attr := attribute.NewSet(
|
||||
attribute.String("user", "alice"),
|
||||
attribute.Bool("admin", true),
|
||||
)
|
||||
|
||||
c := metric.NewMeterConfig(
|
||||
metric.WithInstrumentationVersion(version),
|
||||
metric.WithSchemaURL(schemaURL),
|
||||
metric.WithInstrumentationAttributes(attr.ToSlice()...),
|
||||
)
|
||||
|
||||
assert.Equal(t, version, c.InstrumentationVersion(), "instrumentation version")
|
||||
assert.Equal(t, schemaURL, c.SchemaURL(), "schema URL")
|
||||
assert.Equal(t, attr, c.InstrumentationAttributes(), "instrumentation attributes")
|
||||
}
|
Loading…
Reference in New Issue
Block a user