You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-09-16 09:26:25 +02:00
Remove dependency on metrics packages (#1988)
* Declare internal/metric module to version it separately Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com> * Remove dependency on metrics module from soon-to-be-stable modules Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com> * Add PR ID to CHANGELOG Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com> * rename metric/oteltest to metric/metrictest Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com> * Fix metrictest package name in CHANGELOG Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
This commit is contained in:
committed by
GitHub
parent
135ac4b6f9
commit
7728a52135
10
.github/dependabot.yml
vendored
10
.github/dependabot.yml
vendored
@@ -186,6 +186,16 @@ updates:
|
||||
schedule:
|
||||
day: sunday
|
||||
interval: weekly
|
||||
-
|
||||
package-ecosystem: gomod
|
||||
directory: /internal/metric
|
||||
labels:
|
||||
- dependencies
|
||||
- go
|
||||
- "Skip Changelog"
|
||||
schedule:
|
||||
day: sunday
|
||||
interval: weekly
|
||||
-
|
||||
package-ecosystem: gomod
|
||||
directory: /internal/tools
|
||||
|
@@ -81,6 +81,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||
- Rename `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/otlp` package. (#1985)
|
||||
- Rename `NewUnstartedExporter` to `NewUnstarted` in the `go.opentelemetry.io/otel/exporters/otlp` package. (#1985)
|
||||
- The `go.opentelemetry.io/otel/semconv` package has been moved to `go.opentelemetry.io/otel/semconv/v1.4.0` to allow for multiple [telemetry schema](https://github.com/open-telemetry/oteps/blob/main/text/0152-telemetry-schemas.md) versions to be used concurrently. (#1987)
|
||||
- Metrics test helpers in `go.opentelemetry.io/otel/oteltest` have been moved to `go.opentelemetry.io/otel/metric/metrictest`. (#1988)
|
||||
|
||||
### Deprecated
|
||||
|
||||
|
@@ -63,3 +63,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -59,3 +59,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -59,3 +59,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -60,3 +60,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -61,3 +61,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -63,3 +63,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -61,3 +61,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -62,3 +62,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -61,3 +61,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -60,3 +60,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -64,3 +64,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../otlp/otlptrac
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../../internal/metric
|
||||
|
@@ -71,3 +71,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ./otl
|
||||
replace go.opentelemetry.io/otel/example/passthrough => ../../example/passthrough
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ./otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -67,3 +67,5 @@ replace go.opentelemetry.io/otel/sdk/metric => ../../../sdk/metric
|
||||
replace go.opentelemetry.io/otel/example/passthrough => ../../../example/passthrough
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ./otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../../internal/metric
|
||||
|
@@ -64,3 +64,5 @@ replace go.opentelemetry.io/otel/sdk/metric => ../../../../sdk/metric
|
||||
replace go.opentelemetry.io/otel/example/passthrough => ../../../../example/passthrough
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../../../internal/metric
|
||||
|
@@ -61,3 +61,5 @@ replace go.opentelemetry.io/otel/sdk/export/metric => ../../../../sdk/export/met
|
||||
replace go.opentelemetry.io/otel/sdk/metric => ../../../../sdk/metric
|
||||
|
||||
replace go.opentelemetry.io/otel/trace => ../../../../trace
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../../../internal/metric
|
||||
|
@@ -65,3 +65,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../otlp/otlptrace
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -62,3 +62,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../otlp/otlptrac
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../../internal/metric
|
||||
|
@@ -63,3 +63,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../otlp/otlptrac
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../../internal/metric
|
||||
|
3
go.mod
3
go.mod
@@ -5,7 +5,6 @@ go 1.15
|
||||
require (
|
||||
github.com/google/go-cmp v0.5.6
|
||||
github.com/stretchr/testify v1.7.0
|
||||
go.opentelemetry.io/otel/metric v0.20.0
|
||||
go.opentelemetry.io/otel/oteltest v0.20.0
|
||||
go.opentelemetry.io/otel/trace v0.20.0
|
||||
)
|
||||
@@ -44,6 +43,8 @@ replace go.opentelemetry.io/otel/internal/tools => ./internal/tools
|
||||
|
||||
replace go.opentelemetry.io/otel/sdk => ./sdk
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ./internal/metric
|
||||
|
||||
replace go.opentelemetry.io/otel/metric => ./metric
|
||||
|
||||
replace go.opentelemetry.io/otel/oteltest => ./oteltest
|
||||
|
@@ -19,28 +19,9 @@ import (
|
||||
"testing"
|
||||
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/internal/global"
|
||||
metricglobal "go.opentelemetry.io/otel/metric/global"
|
||||
)
|
||||
|
||||
func BenchmarkGlobalInt64CounterAddNoSDK(b *testing.B) {
|
||||
// Compare with BenchmarkGlobalInt64CounterAddWithSDK() in
|
||||
// ../../sdk/metric/benchmark_test.go to see the overhead of the
|
||||
// global no-op system against a registered SDK.
|
||||
global.ResetForTest()
|
||||
ctx := context.Background()
|
||||
sdk := metricglobal.Meter("test")
|
||||
labs := []attribute.KeyValue{attribute.String("A", "B")}
|
||||
cnt := Must(sdk).NewInt64Counter("int64.counter")
|
||||
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
cnt.Add(ctx, 1, labs...)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkStartEndSpanNoSDK(b *testing.B) {
|
||||
// Compare with BenchmarkStartEndSpan() in
|
||||
// ../../sdk/trace/benchmark_test.go.
|
||||
|
@@ -18,7 +18,6 @@ import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/propagation"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
@@ -28,10 +27,6 @@ type (
|
||||
tp trace.TracerProvider
|
||||
}
|
||||
|
||||
meterProviderHolder struct {
|
||||
mp metric.MeterProvider
|
||||
}
|
||||
|
||||
propagatorsHolder struct {
|
||||
tm propagation.TextMapPropagator
|
||||
}
|
||||
@@ -39,10 +34,8 @@ type (
|
||||
|
||||
var (
|
||||
globalTracer = defaultTracerValue()
|
||||
globalMeter = defaultMeterValue()
|
||||
globalPropagators = defaultPropagatorsValue()
|
||||
|
||||
delegateMeterOnce sync.Once
|
||||
delegateTraceOnce sync.Once
|
||||
delegateTextMapPropagatorOnce sync.Once
|
||||
)
|
||||
@@ -69,28 +62,6 @@ func SetTracerProvider(tp trace.TracerProvider) {
|
||||
globalTracer.Store(tracerProviderHolder{tp: tp})
|
||||
}
|
||||
|
||||
// MeterProvider is the internal implementation for global.MeterProvider.
|
||||
func MeterProvider() metric.MeterProvider {
|
||||
return globalMeter.Load().(meterProviderHolder).mp
|
||||
}
|
||||
|
||||
// SetMeterProvider is the internal implementation for global.SetMeterProvider.
|
||||
func SetMeterProvider(mp metric.MeterProvider) {
|
||||
delegateMeterOnce.Do(func() {
|
||||
current := MeterProvider()
|
||||
|
||||
if current == mp {
|
||||
// Setting the provider to the prior default is nonsense, panic.
|
||||
// Panic is acceptable because we are likely still early in the
|
||||
// process lifetime.
|
||||
panic("invalid MeterProvider, the global instance cannot be reinstalled")
|
||||
} else if def, ok := current.(*meterProvider); ok {
|
||||
def.setDelegate(mp)
|
||||
}
|
||||
})
|
||||
globalMeter.Store(meterProviderHolder{mp: mp})
|
||||
}
|
||||
|
||||
// TextMapPropagator is the internal implementation for global.TextMapPropagator.
|
||||
func TextMapPropagator() propagation.TextMapPropagator {
|
||||
return globalPropagators.Load().(propagatorsHolder).tm
|
||||
@@ -120,12 +91,6 @@ func defaultTracerValue() *atomic.Value {
|
||||
return v
|
||||
}
|
||||
|
||||
func defaultMeterValue() *atomic.Value {
|
||||
v := &atomic.Value{}
|
||||
v.Store(meterProviderHolder{mp: newMeterProvider()})
|
||||
return v
|
||||
}
|
||||
|
||||
func defaultPropagatorsValue() *atomic.Value {
|
||||
v := &atomic.Value{}
|
||||
v.Store(propagatorsHolder{tm: newTextMapPropagator()})
|
||||
@@ -135,9 +100,7 @@ func defaultPropagatorsValue() *atomic.Value {
|
||||
// ResetForTest restores the initial global state, for testing purposes.
|
||||
func ResetForTest() {
|
||||
globalTracer = defaultTracerValue()
|
||||
globalMeter = defaultMeterValue()
|
||||
globalPropagators = defaultPropagatorsValue()
|
||||
delegateMeterOnce = sync.Once{}
|
||||
delegateTraceOnce = sync.Once{}
|
||||
delegateTextMapPropagatorOnce = sync.Once{}
|
||||
}
|
||||
|
@@ -29,9 +29,6 @@ func TestResetsOfGlobalsPanic(t *testing.T) {
|
||||
"SetTracerProvider": func() {
|
||||
global.SetTracerProvider(global.TracerProvider())
|
||||
},
|
||||
"SetMeterProvider": func() {
|
||||
global.SetMeterProvider(global.MeterProvider())
|
||||
},
|
||||
}
|
||||
|
||||
for name, test := range tests {
|
||||
|
41
internal/metric/global/benchmark_test.go
Normal file
41
internal/metric/global/benchmark_test.go
Normal file
@@ -0,0 +1,41 @@
|
||||
// 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 global_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
internalglobal "go.opentelemetry.io/otel/internal/metric/global"
|
||||
metricglobal "go.opentelemetry.io/otel/metric/global"
|
||||
)
|
||||
|
||||
func BenchmarkGlobalInt64CounterAddNoSDK(b *testing.B) {
|
||||
// Compare with BenchmarkGlobalInt64CounterAddWithSDK() in
|
||||
// ../../sdk/metric/benchmark_test.go to see the overhead of the
|
||||
// global no-op system against a registered SDK.
|
||||
internalglobal.ResetForTest()
|
||||
ctx := context.Background()
|
||||
sdk := metricglobal.Meter("test")
|
||||
labs := []attribute.KeyValue{attribute.String("A", "B")}
|
||||
cnt := Must(sdk).NewInt64Counter("int64.counter")
|
||||
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
cnt.Add(ctx, 1, labs...)
|
||||
}
|
||||
}
|
@@ -18,8 +18,8 @@ import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"go.opentelemetry.io/otel/internal/global"
|
||||
ottest "go.opentelemetry.io/otel/internal/internaltest"
|
||||
"go.opentelemetry.io/otel/internal/metric/global"
|
||||
)
|
||||
|
||||
// Ensure struct alignment prior to running tests.
|
@@ -22,11 +22,11 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/internal/global"
|
||||
"go.opentelemetry.io/otel/internal/metric/global"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
metricglobal "go.opentelemetry.io/otel/metric/global"
|
||||
"go.opentelemetry.io/otel/metric/metrictest"
|
||||
"go.opentelemetry.io/otel/metric/number"
|
||||
"go.opentelemetry.io/otel/oteltest"
|
||||
)
|
||||
|
||||
var Must = metric.Must
|
||||
@@ -66,7 +66,7 @@ func TestDirect(t *testing.T) {
|
||||
second.Record(ctx, 1, labels3...)
|
||||
second.Record(ctx, 2, labels3...)
|
||||
|
||||
mock, provider := oteltest.NewMeterProvider()
|
||||
mock, provider := metrictest.NewMeterProvider()
|
||||
metricglobal.SetMeterProvider(provider)
|
||||
|
||||
counter.Add(ctx, 1, labels1...)
|
||||
@@ -75,56 +75,56 @@ func TestDirect(t *testing.T) {
|
||||
|
||||
mock.RunAsyncInstruments()
|
||||
|
||||
measurements := oteltest.AsStructs(mock.MeasurementBatches)
|
||||
measurements := metrictest.AsStructs(mock.MeasurementBatches)
|
||||
|
||||
require.EqualValues(t,
|
||||
[]oteltest.Measured{
|
||||
[]metrictest.Measured{
|
||||
{
|
||||
Name: "test.counter",
|
||||
InstrumentationName: "test1",
|
||||
InstrumentationVersion: "semver:v1.0.0",
|
||||
Labels: oteltest.LabelsToMap(labels1...),
|
||||
Labels: metrictest.LabelsToMap(labels1...),
|
||||
Number: asInt(1),
|
||||
},
|
||||
{
|
||||
Name: "test.valuerecorder",
|
||||
InstrumentationName: "test1",
|
||||
InstrumentationVersion: "semver:v1.0.0",
|
||||
Labels: oteltest.LabelsToMap(labels1...),
|
||||
Labels: metrictest.LabelsToMap(labels1...),
|
||||
Number: asFloat(3),
|
||||
},
|
||||
{
|
||||
Name: "test.second",
|
||||
InstrumentationName: "test2",
|
||||
Labels: oteltest.LabelsToMap(labels3...),
|
||||
Labels: metrictest.LabelsToMap(labels3...),
|
||||
Number: asFloat(3),
|
||||
},
|
||||
{
|
||||
Name: "test.valueobserver.float",
|
||||
InstrumentationName: "test1",
|
||||
InstrumentationVersion: "semver:v1.0.0",
|
||||
Labels: oteltest.LabelsToMap(labels1...),
|
||||
Labels: metrictest.LabelsToMap(labels1...),
|
||||
Number: asFloat(1),
|
||||
},
|
||||
{
|
||||
Name: "test.valueobserver.float",
|
||||
InstrumentationName: "test1",
|
||||
InstrumentationVersion: "semver:v1.0.0",
|
||||
Labels: oteltest.LabelsToMap(labels2...),
|
||||
Labels: metrictest.LabelsToMap(labels2...),
|
||||
Number: asFloat(2),
|
||||
},
|
||||
{
|
||||
Name: "test.valueobserver.int",
|
||||
InstrumentationName: "test1",
|
||||
InstrumentationVersion: "semver:v1.0.0",
|
||||
Labels: oteltest.LabelsToMap(labels1...),
|
||||
Labels: metrictest.LabelsToMap(labels1...),
|
||||
Number: asInt(1),
|
||||
},
|
||||
{
|
||||
Name: "test.valueobserver.int",
|
||||
InstrumentationName: "test1",
|
||||
InstrumentationVersion: "semver:v1.0.0",
|
||||
Labels: oteltest.LabelsToMap(labels2...),
|
||||
Labels: metrictest.LabelsToMap(labels2...),
|
||||
Number: asInt(2),
|
||||
},
|
||||
},
|
||||
@@ -151,28 +151,28 @@ func TestBound(t *testing.T) {
|
||||
boundM.Record(ctx, 1)
|
||||
boundM.Record(ctx, 2)
|
||||
|
||||
mock, provider := oteltest.NewMeterProvider()
|
||||
mock, provider := metrictest.NewMeterProvider()
|
||||
metricglobal.SetMeterProvider(provider)
|
||||
|
||||
boundC.Add(ctx, 1)
|
||||
boundM.Record(ctx, 3)
|
||||
|
||||
require.EqualValues(t,
|
||||
[]oteltest.Measured{
|
||||
[]metrictest.Measured{
|
||||
{
|
||||
Name: "test.counter",
|
||||
InstrumentationName: "test",
|
||||
Labels: oteltest.LabelsToMap(labels1...),
|
||||
Labels: metrictest.LabelsToMap(labels1...),
|
||||
Number: asFloat(1),
|
||||
},
|
||||
{
|
||||
Name: "test.valuerecorder",
|
||||
InstrumentationName: "test",
|
||||
Labels: oteltest.LabelsToMap(labels1...),
|
||||
Labels: metrictest.LabelsToMap(labels1...),
|
||||
Number: asInt(3),
|
||||
},
|
||||
},
|
||||
oteltest.AsStructs(mock.MeasurementBatches))
|
||||
metrictest.AsStructs(mock.MeasurementBatches))
|
||||
|
||||
boundC.Unbind()
|
||||
boundM.Unbind()
|
||||
@@ -199,7 +199,7 @@ func TestUnbindThenRecordOne(t *testing.T) {
|
||||
global.ResetForTest()
|
||||
|
||||
ctx := context.Background()
|
||||
mock, provider := oteltest.NewMeterProvider()
|
||||
mock, provider := metrictest.NewMeterProvider()
|
||||
|
||||
meter := metricglobal.Meter("test")
|
||||
counter := Must(meter).NewInt64Counter("test.counter")
|
||||
@@ -238,7 +238,7 @@ func TestErrorInDeferredConstructor(t *testing.T) {
|
||||
c1 := Must(meter).NewInt64Counter("test")
|
||||
c2 := Must(meter).NewInt64Counter("test")
|
||||
|
||||
_, provider := oteltest.NewMeterProvider()
|
||||
_, provider := metrictest.NewMeterProvider()
|
||||
sdk := &meterProviderWithConstructorError{provider}
|
||||
|
||||
require.Panics(t, func() {
|
||||
@@ -264,7 +264,7 @@ func TestImplementationIndirection(t *testing.T) {
|
||||
ival := counter.Measurement(1).SyncImpl().Implementation()
|
||||
require.NotNil(t, ival)
|
||||
|
||||
_, ok := ival.(*oteltest.Sync)
|
||||
_, ok := ival.(*metrictest.Sync)
|
||||
require.False(t, ok)
|
||||
|
||||
// Async: no SDK yet
|
||||
@@ -276,11 +276,11 @@ func TestImplementationIndirection(t *testing.T) {
|
||||
ival = valueobserver.AsyncImpl().Implementation()
|
||||
require.NotNil(t, ival)
|
||||
|
||||
_, ok = ival.(*oteltest.Async)
|
||||
_, ok = ival.(*metrictest.Async)
|
||||
require.False(t, ok)
|
||||
|
||||
// Register the SDK
|
||||
_, provider := oteltest.NewMeterProvider()
|
||||
_, provider := metrictest.NewMeterProvider()
|
||||
metricglobal.SetMeterProvider(provider)
|
||||
|
||||
// Repeat the above tests
|
||||
@@ -289,14 +289,14 @@ func TestImplementationIndirection(t *testing.T) {
|
||||
ival = counter.Measurement(1).SyncImpl().Implementation()
|
||||
require.NotNil(t, ival)
|
||||
|
||||
_, ok = ival.(*oteltest.Sync)
|
||||
_, ok = ival.(*metrictest.Sync)
|
||||
require.True(t, ok)
|
||||
|
||||
// Async
|
||||
ival = valueobserver.AsyncImpl().Implementation()
|
||||
require.NotNil(t, ival)
|
||||
|
||||
_, ok = ival.(*oteltest.Async)
|
||||
_, ok = ival.(*metrictest.Async)
|
||||
require.True(t, ok)
|
||||
}
|
||||
|
||||
@@ -309,19 +309,19 @@ func TestRecordBatchMock(t *testing.T) {
|
||||
|
||||
meter.RecordBatch(context.Background(), nil, counter.Measurement(1))
|
||||
|
||||
mock, provider := oteltest.NewMeterProvider()
|
||||
mock, provider := metrictest.NewMeterProvider()
|
||||
metricglobal.SetMeterProvider(provider)
|
||||
|
||||
meter.RecordBatch(context.Background(), nil, counter.Measurement(1))
|
||||
|
||||
require.EqualValues(t,
|
||||
[]oteltest.Measured{
|
||||
[]metrictest.Measured{
|
||||
{
|
||||
Name: "test.counter",
|
||||
InstrumentationName: "builtin",
|
||||
Labels: oteltest.LabelsToMap(),
|
||||
Labels: metrictest.LabelsToMap(),
|
||||
Number: asInt(1),
|
||||
},
|
||||
},
|
||||
oteltest.AsStructs(mock.MeasurementBatches))
|
||||
metrictest.AsStructs(mock.MeasurementBatches))
|
||||
}
|
66
internal/metric/global/metric.go
Normal file
66
internal/metric/global/metric.go
Normal file
@@ -0,0 +1,66 @@
|
||||
// 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 global
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
)
|
||||
|
||||
type meterProviderHolder struct {
|
||||
mp metric.MeterProvider
|
||||
}
|
||||
|
||||
var (
|
||||
globalMeter = defaultMeterValue()
|
||||
|
||||
delegateMeterOnce sync.Once
|
||||
)
|
||||
|
||||
// MeterProvider is the internal implementation for global.MeterProvider.
|
||||
func MeterProvider() metric.MeterProvider {
|
||||
return globalMeter.Load().(meterProviderHolder).mp
|
||||
}
|
||||
|
||||
// SetMeterProvider is the internal implementation for global.SetMeterProvider.
|
||||
func SetMeterProvider(mp metric.MeterProvider) {
|
||||
delegateMeterOnce.Do(func() {
|
||||
current := MeterProvider()
|
||||
|
||||
if current == mp {
|
||||
// Setting the provider to the prior default is nonsense, panic.
|
||||
// Panic is acceptable because we are likely still early in the
|
||||
// process lifetime.
|
||||
panic("invalid MeterProvider, the global instance cannot be reinstalled")
|
||||
} else if def, ok := current.(*meterProvider); ok {
|
||||
def.setDelegate(mp)
|
||||
}
|
||||
})
|
||||
globalMeter.Store(meterProviderHolder{mp: mp})
|
||||
}
|
||||
|
||||
func defaultMeterValue() *atomic.Value {
|
||||
v := &atomic.Value{}
|
||||
v.Store(meterProviderHolder{mp: newMeterProvider()})
|
||||
return v
|
||||
}
|
||||
|
||||
// ResetForTest restores the initial global state, for testing purposes.
|
||||
func ResetForTest() {
|
||||
globalMeter = defaultMeterValue()
|
||||
delegateMeterOnce = sync.Once{}
|
||||
}
|
45
internal/metric/global/state_test.go
Normal file
45
internal/metric/global/state_test.go
Normal file
@@ -0,0 +1,45 @@
|
||||
// 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 global_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
internalglobal "go.opentelemetry.io/otel/internal/metric/global"
|
||||
metricglobal "go.opentelemetry.io/otel/metric/global"
|
||||
)
|
||||
|
||||
func TestResetsOfGlobalsPanic(t *testing.T) {
|
||||
internalglobal.ResetForTest()
|
||||
tests := map[string]func(){
|
||||
"SetMeterProvider": func() {
|
||||
metricglobal.SetMeterProvider(metricglobal.GetMeterProvider())
|
||||
},
|
||||
}
|
||||
|
||||
for name, test := range tests {
|
||||
shouldPanic(t, name, test)
|
||||
}
|
||||
}
|
||||
|
||||
func shouldPanic(t *testing.T, name string, f func()) {
|
||||
defer func() {
|
||||
if r := recover(); r == nil {
|
||||
t.Errorf("calling %s with default global did not panic", name)
|
||||
}
|
||||
}()
|
||||
|
||||
f()
|
||||
}
|
63
internal/metric/go.mod
Normal file
63
internal/metric/go.mod
Normal file
@@ -0,0 +1,63 @@
|
||||
module go.opentelemetry.io/otel/internal/metric
|
||||
|
||||
go 1.15
|
||||
|
||||
require (
|
||||
github.com/stretchr/testify v1.7.0
|
||||
go.opentelemetry.io/otel v0.20.0
|
||||
go.opentelemetry.io/otel/metric v0.20.0
|
||||
)
|
||||
|
||||
replace go.opentelemetry.io/otel => ../..
|
||||
|
||||
replace go.opentelemetry.io/otel/metric => ../../metric
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ./
|
||||
|
||||
replace go.opentelemetry.io/otel/bridge/opencensus => ../../bridge/opencensus
|
||||
|
||||
replace go.opentelemetry.io/otel/bridge/opentracing => ../../bridge/opentracing
|
||||
|
||||
replace go.opentelemetry.io/otel/example/jaeger => ../../example/jaeger
|
||||
|
||||
replace go.opentelemetry.io/otel/example/namedtracer => ../../example/namedtracer
|
||||
|
||||
replace go.opentelemetry.io/otel/example/opencensus => ../../example/opencensus
|
||||
|
||||
replace go.opentelemetry.io/otel/example/otel-collector => ../../example/otel-collector
|
||||
|
||||
replace go.opentelemetry.io/otel/example/passthrough => ../../example/passthrough
|
||||
|
||||
replace go.opentelemetry.io/otel/example/prom-collector => ../../example/prom-collector
|
||||
|
||||
replace go.opentelemetry.io/otel/example/prometheus => ../../example/prometheus
|
||||
|
||||
replace go.opentelemetry.io/otel/example/zipkin => ../../example/zipkin
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/metric/prometheus => ../../exporters/metric/prometheus
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp => ../../exporters/otlp
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otlp/otlptrace
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/stdout => ../../exporters/stdout
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/trace/jaeger => ../../exporters/trace/jaeger
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/trace/zipkin => ../../exporters/trace/zipkin
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/tools => ../tools
|
||||
|
||||
replace go.opentelemetry.io/otel/oteltest => ../../oteltest
|
||||
|
||||
replace go.opentelemetry.io/otel/sdk => ../../sdk
|
||||
|
||||
replace go.opentelemetry.io/otel/sdk/export/metric => ../../sdk/export/metric
|
||||
|
||||
replace go.opentelemetry.io/otel/sdk/metric => ../../sdk/metric
|
||||
|
||||
replace go.opentelemetry.io/otel/trace => ../../trace
|
15
internal/metric/go.sum
Normal file
15
internal/metric/go.sum
Normal file
@@ -0,0 +1,15 @@
|
||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
@@ -63,3 +63,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../metric
|
||||
|
@@ -15,7 +15,7 @@
|
||||
package global // import "go.opentelemetry.io/otel/metric/global"
|
||||
|
||||
import (
|
||||
"go.opentelemetry.io/otel/internal/global"
|
||||
"go.opentelemetry.io/otel/internal/metric/global"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
)
|
||||
|
||||
|
@@ -50,7 +50,7 @@ require (
|
||||
github.com/google/go-cmp v0.5.6
|
||||
github.com/stretchr/testify v1.7.0
|
||||
go.opentelemetry.io/otel v0.20.0
|
||||
go.opentelemetry.io/otel/oteltest v0.20.0
|
||||
go.opentelemetry.io/otel/internal/metric v0.20.0
|
||||
)
|
||||
|
||||
replace go.opentelemetry.io/otel/example/passthrough => ../example/passthrough
|
||||
@@ -60,3 +60,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../exporters/otlp/o
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../internal/metric
|
||||
|
@@ -21,9 +21,9 @@ import (
|
||||
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/metric/metrictest"
|
||||
"go.opentelemetry.io/otel/metric/number"
|
||||
"go.opentelemetry.io/otel/metric/unit"
|
||||
"go.opentelemetry.io/otel/oteltest"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@@ -119,14 +119,14 @@ func TestPrecomputedSum(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func checkSyncBatches(ctx context.Context, t *testing.T, labels []attribute.KeyValue, mock *oteltest.MeterImpl, nkind number.Kind, mkind metric.InstrumentKind, instrument metric.InstrumentImpl, expected ...float64) {
|
||||
func checkSyncBatches(ctx context.Context, t *testing.T, labels []attribute.KeyValue, mock *metrictest.MeterImpl, nkind number.Kind, mkind metric.InstrumentKind, instrument metric.InstrumentImpl, expected ...float64) {
|
||||
t.Helper()
|
||||
|
||||
batchesCount := len(mock.MeasurementBatches)
|
||||
if len(mock.MeasurementBatches) != len(expected) {
|
||||
t.Errorf("Expected %d recorded measurement batches, got %d", batchesCount, len(mock.MeasurementBatches))
|
||||
}
|
||||
recorded := oteltest.AsStructs(mock.MeasurementBatches)
|
||||
recorded := metrictest.AsStructs(mock.MeasurementBatches)
|
||||
|
||||
for i, batch := range mock.MeasurementBatches {
|
||||
if len(batch.Measurements) != 1 {
|
||||
@@ -136,11 +136,11 @@ func checkSyncBatches(ctx context.Context, t *testing.T, labels []attribute.KeyV
|
||||
measurement := batch.Measurements[0]
|
||||
descriptor := measurement.Instrument.Descriptor()
|
||||
|
||||
expected := oteltest.Measured{
|
||||
expected := metrictest.Measured{
|
||||
Name: descriptor.Name(),
|
||||
InstrumentationName: descriptor.InstrumentationName(),
|
||||
Labels: oteltest.LabelsToMap(labels...),
|
||||
Number: oteltest.ResolveNumberByKind(t, nkind, expected[i]),
|
||||
Labels: metrictest.LabelsToMap(labels...),
|
||||
Number: metrictest.ResolveNumberByKind(t, nkind, expected[i]),
|
||||
}
|
||||
require.Equal(t, expected, recorded[i])
|
||||
}
|
||||
@@ -308,7 +308,7 @@ func TestCounter(t *testing.T) {
|
||||
// N.B. the API does not check for negative
|
||||
// values, that's the SDK's responsibility.
|
||||
t.Run("float64 counter", func(t *testing.T) {
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
c := Must(meter).NewFloat64Counter("test.counter.float")
|
||||
ctx := context.Background()
|
||||
labels := []attribute.KeyValue{attribute.String("A", "B")}
|
||||
@@ -321,7 +321,7 @@ func TestCounter(t *testing.T) {
|
||||
)
|
||||
})
|
||||
t.Run("int64 counter", func(t *testing.T) {
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
c := Must(meter).NewInt64Counter("test.counter.int")
|
||||
ctx := context.Background()
|
||||
labels := []attribute.KeyValue{attribute.String("A", "B"), attribute.String("C", "D")}
|
||||
@@ -335,7 +335,7 @@ func TestCounter(t *testing.T) {
|
||||
|
||||
})
|
||||
t.Run("int64 updowncounter", func(t *testing.T) {
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
c := Must(meter).NewInt64UpDownCounter("test.updowncounter.int")
|
||||
ctx := context.Background()
|
||||
labels := []attribute.KeyValue{attribute.String("A", "B"), attribute.String("C", "D")}
|
||||
@@ -348,7 +348,7 @@ func TestCounter(t *testing.T) {
|
||||
)
|
||||
})
|
||||
t.Run("float64 updowncounter", func(t *testing.T) {
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
c := Must(meter).NewFloat64UpDownCounter("test.updowncounter.float")
|
||||
ctx := context.Background()
|
||||
labels := []attribute.KeyValue{attribute.String("A", "B"), attribute.String("C", "D")}
|
||||
@@ -364,7 +364,7 @@ func TestCounter(t *testing.T) {
|
||||
|
||||
func TestValueRecorder(t *testing.T) {
|
||||
t.Run("float64 valuerecorder", func(t *testing.T) {
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
m := Must(meter).NewFloat64ValueRecorder("test.valuerecorder.float")
|
||||
ctx := context.Background()
|
||||
labels := []attribute.KeyValue{}
|
||||
@@ -377,7 +377,7 @@ func TestValueRecorder(t *testing.T) {
|
||||
)
|
||||
})
|
||||
t.Run("int64 valuerecorder", func(t *testing.T) {
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
m := Must(meter).NewInt64ValueRecorder("test.valuerecorder.int")
|
||||
ctx := context.Background()
|
||||
labels := []attribute.KeyValue{attribute.Int("I", 1)}
|
||||
@@ -394,7 +394,7 @@ func TestValueRecorder(t *testing.T) {
|
||||
func TestObserverInstruments(t *testing.T) {
|
||||
t.Run("float valueobserver", func(t *testing.T) {
|
||||
labels := []attribute.KeyValue{attribute.String("O", "P")}
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
o := Must(meter).NewFloat64ValueObserver("test.valueobserver.float", func(_ context.Context, result metric.Float64ObserverResult) {
|
||||
result.Observe(42.1, labels...)
|
||||
})
|
||||
@@ -405,7 +405,7 @@ func TestObserverInstruments(t *testing.T) {
|
||||
})
|
||||
t.Run("int valueobserver", func(t *testing.T) {
|
||||
labels := []attribute.KeyValue{}
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
o := Must(meter).NewInt64ValueObserver("test.observer.int", func(_ context.Context, result metric.Int64ObserverResult) {
|
||||
result.Observe(-142, labels...)
|
||||
})
|
||||
@@ -416,7 +416,7 @@ func TestObserverInstruments(t *testing.T) {
|
||||
})
|
||||
t.Run("float sumobserver", func(t *testing.T) {
|
||||
labels := []attribute.KeyValue{attribute.String("O", "P")}
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
o := Must(meter).NewFloat64SumObserver("test.sumobserver.float", func(_ context.Context, result metric.Float64ObserverResult) {
|
||||
result.Observe(42.1, labels...)
|
||||
})
|
||||
@@ -427,7 +427,7 @@ func TestObserverInstruments(t *testing.T) {
|
||||
})
|
||||
t.Run("int sumobserver", func(t *testing.T) {
|
||||
labels := []attribute.KeyValue{}
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
o := Must(meter).NewInt64SumObserver("test.observer.int", func(_ context.Context, result metric.Int64ObserverResult) {
|
||||
result.Observe(-142, labels...)
|
||||
})
|
||||
@@ -438,7 +438,7 @@ func TestObserverInstruments(t *testing.T) {
|
||||
})
|
||||
t.Run("float updownsumobserver", func(t *testing.T) {
|
||||
labels := []attribute.KeyValue{attribute.String("O", "P")}
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
o := Must(meter).NewFloat64UpDownSumObserver("test.updownsumobserver.float", func(_ context.Context, result metric.Float64ObserverResult) {
|
||||
result.Observe(42.1, labels...)
|
||||
})
|
||||
@@ -449,7 +449,7 @@ func TestObserverInstruments(t *testing.T) {
|
||||
})
|
||||
t.Run("int updownsumobserver", func(t *testing.T) {
|
||||
labels := []attribute.KeyValue{}
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
o := Must(meter).NewInt64UpDownSumObserver("test.observer.int", func(_ context.Context, result metric.Int64ObserverResult) {
|
||||
result.Observe(-142, labels...)
|
||||
})
|
||||
@@ -461,7 +461,7 @@ func TestObserverInstruments(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestBatchObserverInstruments(t *testing.T) {
|
||||
mockSDK, meter := oteltest.NewMeter()
|
||||
mockSDK, meter := metrictest.NewMeter()
|
||||
|
||||
var obs1 metric.Int64ValueObserver
|
||||
var obs2 metric.Float64ValueObserver
|
||||
@@ -486,8 +486,8 @@ func TestBatchObserverInstruments(t *testing.T) {
|
||||
|
||||
require.Len(t, mockSDK.MeasurementBatches, 1)
|
||||
|
||||
impl1 := obs1.AsyncImpl().Implementation().(*oteltest.Async)
|
||||
impl2 := obs2.AsyncImpl().Implementation().(*oteltest.Async)
|
||||
impl1 := obs1.AsyncImpl().Implementation().(*metrictest.Async)
|
||||
impl2 := obs2.AsyncImpl().Implementation().(*metrictest.Async)
|
||||
|
||||
require.NotNil(t, impl1)
|
||||
require.NotNil(t, impl2)
|
||||
@@ -497,21 +497,21 @@ func TestBatchObserverInstruments(t *testing.T) {
|
||||
require.Len(t, got.Measurements, 2)
|
||||
|
||||
m1 := got.Measurements[0]
|
||||
require.Equal(t, impl1, m1.Instrument.Implementation().(*oteltest.Async))
|
||||
require.Equal(t, 0, m1.Number.CompareNumber(number.Int64Kind, oteltest.ResolveNumberByKind(t, number.Int64Kind, 42)))
|
||||
require.Equal(t, impl1, m1.Instrument.Implementation().(*metrictest.Async))
|
||||
require.Equal(t, 0, m1.Number.CompareNumber(number.Int64Kind, metrictest.ResolveNumberByKind(t, number.Int64Kind, 42)))
|
||||
|
||||
m2 := got.Measurements[1]
|
||||
require.Equal(t, impl2, m2.Instrument.Implementation().(*oteltest.Async))
|
||||
require.Equal(t, 0, m2.Number.CompareNumber(number.Float64Kind, oteltest.ResolveNumberByKind(t, number.Float64Kind, 42)))
|
||||
require.Equal(t, impl2, m2.Instrument.Implementation().(*metrictest.Async))
|
||||
require.Equal(t, 0, m2.Number.CompareNumber(number.Float64Kind, metrictest.ResolveNumberByKind(t, number.Float64Kind, 42)))
|
||||
}
|
||||
|
||||
func checkObserverBatch(t *testing.T, labels []attribute.KeyValue, mock *oteltest.MeterImpl, nkind number.Kind, mkind metric.InstrumentKind, observer metric.AsyncImpl, expected float64) {
|
||||
func checkObserverBatch(t *testing.T, labels []attribute.KeyValue, mock *metrictest.MeterImpl, nkind number.Kind, mkind metric.InstrumentKind, observer metric.AsyncImpl, expected float64) {
|
||||
t.Helper()
|
||||
assert.Len(t, mock.MeasurementBatches, 1)
|
||||
if len(mock.MeasurementBatches) < 1 {
|
||||
return
|
||||
}
|
||||
o := observer.Implementation().(*oteltest.Async)
|
||||
o := observer.Implementation().(*metrictest.Async)
|
||||
if !assert.NotNil(t, o) {
|
||||
return
|
||||
}
|
||||
@@ -523,8 +523,8 @@ func checkObserverBatch(t *testing.T, labels []attribute.KeyValue, mock *oteltes
|
||||
}
|
||||
measurement := got.Measurements[0]
|
||||
require.Equal(t, mkind, measurement.Instrument.Descriptor().InstrumentKind())
|
||||
assert.Equal(t, o, measurement.Instrument.Implementation().(*oteltest.Async))
|
||||
ft := oteltest.ResolveNumberByKind(t, nkind, expected)
|
||||
assert.Equal(t, o, measurement.Instrument.Implementation().(*metrictest.Async))
|
||||
ft := metrictest.ResolveNumberByKind(t, nkind, expected)
|
||||
assert.Equal(t, 0, measurement.Number.CompareNumber(nkind, ft))
|
||||
}
|
||||
|
||||
@@ -561,7 +561,7 @@ func TestWrappedInstrumentError(t *testing.T) {
|
||||
|
||||
func TestNilCallbackObserverNoop(t *testing.T) {
|
||||
// Tests that a nil callback yields a no-op observer without error.
|
||||
_, meter := oteltest.NewMeter()
|
||||
_, meter := metrictest.NewMeter()
|
||||
|
||||
observer := Must(meter).NewInt64ValueObserver("test.observer", nil)
|
||||
|
||||
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package oteltest
|
||||
package metrictest
|
||||
|
||||
import (
|
||||
"os"
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package oteltest // import "go.opentelemetry.io/otel/oteltest"
|
||||
package metrictest // import "go.opentelemetry.io/otel/metric/metrictest"
|
||||
|
||||
import (
|
||||
"context"
|
@@ -22,8 +22,8 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/metric/metrictest"
|
||||
"go.opentelemetry.io/otel/metric/registry"
|
||||
"go.opentelemetry.io/otel/oteltest"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -72,7 +72,7 @@ func unwrap(impl interface{}, err error) (metric.InstrumentImpl, error) {
|
||||
|
||||
func TestRegistrySameInstruments(t *testing.T) {
|
||||
for _, nf := range allNew {
|
||||
_, provider := oteltest.NewMeterProvider()
|
||||
_, provider := metrictest.NewMeterProvider()
|
||||
|
||||
meter := provider.Meter("meter")
|
||||
inst1, err1 := nf(meter, "this")
|
||||
@@ -86,7 +86,7 @@ func TestRegistrySameInstruments(t *testing.T) {
|
||||
|
||||
func TestRegistryDifferentNamespace(t *testing.T) {
|
||||
for _, nf := range allNew {
|
||||
_, provider := oteltest.NewMeterProvider()
|
||||
_, provider := metrictest.NewMeterProvider()
|
||||
|
||||
meter1 := provider.Meter("meter1")
|
||||
meter2 := provider.Meter("meter2")
|
||||
@@ -101,7 +101,7 @@ func TestRegistryDifferentNamespace(t *testing.T) {
|
||||
|
||||
func TestRegistryDiffInstruments(t *testing.T) {
|
||||
for origName, origf := range allNew {
|
||||
_, provider := oteltest.NewMeterProvider()
|
||||
_, provider := metrictest.NewMeterProvider()
|
||||
meter := provider.Meter("meter")
|
||||
|
||||
_, err := origf(meter, "this")
|
||||
@@ -121,7 +121,7 @@ func TestRegistryDiffInstruments(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestMeterProvider(t *testing.T) {
|
||||
impl, _ := oteltest.NewMeter()
|
||||
impl, _ := metrictest.NewMeter()
|
||||
p := registry.NewMeterProvider(impl)
|
||||
m1 := p.Meter("m1")
|
||||
m1p := p.Meter("m1")
|
||||
|
@@ -36,6 +36,8 @@ replace go.opentelemetry.io/otel/internal/tools => ../internal/tools
|
||||
|
||||
replace go.opentelemetry.io/otel/metric => ../metric
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../internal/metric
|
||||
|
||||
replace go.opentelemetry.io/otel/oteltest => ./
|
||||
|
||||
replace go.opentelemetry.io/otel/sdk => ../sdk
|
||||
@@ -49,7 +51,6 @@ replace go.opentelemetry.io/otel/trace => ../trace
|
||||
require (
|
||||
github.com/stretchr/testify v1.7.0
|
||||
go.opentelemetry.io/otel v0.20.0
|
||||
go.opentelemetry.io/otel/metric v0.20.0
|
||||
go.opentelemetry.io/otel/trace v0.20.0
|
||||
)
|
||||
|
||||
|
@@ -60,3 +60,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../../exporters/
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../../internal/metric
|
||||
|
@@ -61,3 +61,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../exporters/otlp/o
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../internal/metric
|
||||
|
@@ -50,6 +50,7 @@ require (
|
||||
github.com/benbjohnson/clock v1.1.0 // do not upgrade to v1.1.x because it would require Go >= 1.15
|
||||
github.com/stretchr/testify v1.7.0
|
||||
go.opentelemetry.io/otel v0.20.0
|
||||
go.opentelemetry.io/otel/internal/metric v0.20.0
|
||||
go.opentelemetry.io/otel/metric v0.20.0
|
||||
go.opentelemetry.io/otel/sdk v0.20.0
|
||||
go.opentelemetry.io/otel/sdk/export/metric v0.20.0
|
||||
@@ -62,3 +63,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../exporters/otl
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../../internal/metric
|
||||
|
@@ -59,3 +59,5 @@ replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../exporters/otlp/o
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../exporters/otlp/otlptrace/otlptracegrpc
|
||||
|
||||
replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../exporters/otlp/otlptrace/otlptracehttp
|
||||
|
||||
replace go.opentelemetry.io/otel/internal/metric => ../internal/metric
|
||||
|
Reference in New Issue
Block a user