mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-05-31 22:49:54 +02:00
Move Version function and code from global to toplevel (#1330)
* Move global code to toplevel package * Move version function to toplevel package * Update changelog Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
This commit is contained in:
parent
20c78fed0a
commit
3d6e8b5078
@ -39,7 +39,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|||||||
- Move the `Number` type (together with related functions) from `go.opentelemetry.io/otel/api/metric` package into `go.opentelemetry.io/otel/metric/number` as a part of #1303. (#1316)
|
- Move the `Number` type (together with related functions) from `go.opentelemetry.io/otel/api/metric` package into `go.opentelemetry.io/otel/metric/number` as a part of #1303. (#1316)
|
||||||
- The function signature of the Span `AddEvent` method in `go.opentelemetry.io/otel` is updated to no longer take an unused context and instead take a required name and a variable number of `EventOption`s. (#1254)
|
- The function signature of the Span `AddEvent` method in `go.opentelemetry.io/otel` is updated to no longer take an unused context and instead take a required name and a variable number of `EventOption`s. (#1254)
|
||||||
- The function signature of the Span `RecordError` method in `go.opentelemetry.io/otel` is updated to no longer take an unused context and instead take a required error value and a variable number of `EventOption`s. (#1254)
|
- The function signature of the Span `RecordError` method in `go.opentelemetry.io/otel` is updated to no longer take an unused context and instead take a required error value and a variable number of `EventOption`s. (#1254)
|
||||||
- Move the `go.opentelemetry.io/otel/api/global` package to `go.opentelemetry.io/otel/global`. (#1262)
|
- Move the `go.opentelemetry.io/otel/api/global` package to `go.opentelemetry.io/otel`. (#1262) (#1330)
|
||||||
|
- Move the `Version` function from `go.opentelemetry.io/otel/sdk` to `go.opentelemetry.io/otel`. (#1330)
|
||||||
- Rename correlation context header from `"otcorrelations"` to `"baggage"` to match the OpenTelemetry specification. (#1267)
|
- Rename correlation context header from `"otcorrelations"` to `"baggage"` to match the OpenTelemetry specification. (#1267)
|
||||||
- Fix `Code.UnmarshalJSON` to work with valid json only. (#1276)
|
- Fix `Code.UnmarshalJSON` to work with valid json only. (#1276)
|
||||||
- The `resource.New()` method changes signature to support builtin attributes and functional options, including `telemetry.sdk.*` and
|
- The `resource.New()` method changes signature to support builtin attributes and functional options, including `telemetry.sdk.*` and
|
||||||
|
@ -20,8 +20,8 @@ import (
|
|||||||
|
|
||||||
octrace "go.opencensus.io/trace"
|
octrace "go.opencensus.io/trace"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
@ -60,7 +60,7 @@ func convertStartOptions(optFns []octrace.StartOption, name string) []trace.Span
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ocOpts.Sampler != nil {
|
if ocOpts.Sampler != nil {
|
||||||
global.Handle(fmt.Errorf("ignoring custom sampler for span %q created by OpenCensus because OpenTelemetry does not support creating a span with a custom sampler", name))
|
otel.Handle(fmt.Errorf("ignoring custom sampler for span %q created by OpenCensus because OpenTelemetry does not support creating a span with a custom sampler", name))
|
||||||
}
|
}
|
||||||
return otOpts
|
return otOpts
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ func (o *otelTracer) NewContext(parent context.Context, s *octrace.Span) context
|
|||||||
if otSpan, ok := s.Internal().(*span); ok {
|
if otSpan, ok := s.Internal().(*span); ok {
|
||||||
return trace.ContextWithSpan(parent, otSpan.otSpan)
|
return trace.ContextWithSpan(parent, otSpan.otSpan)
|
||||||
}
|
}
|
||||||
global.Handle(fmt.Errorf("unable to create context with span %q, since it was created using a different tracer", s.String()))
|
otel.Handle(fmt.Errorf("unable to create context with span %q, since it was created using a different tracer", s.String()))
|
||||||
return parent
|
return parent
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,7 +181,7 @@ func (s *span) AddMessageReceiveEvent(messageID, uncompressedByteSize, compresse
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *span) AddLink(l octrace.Link) {
|
func (s *span) AddLink(l octrace.Link) {
|
||||||
global.Handle(fmt.Errorf("ignoring OpenCensus link %+v for span %q because OpenTelemetry doesn't support setting links after creation", l, s.String()))
|
otel.Handle(fmt.Errorf("ignoring OpenCensus link %+v for span %q because OpenTelemetry doesn't support setting links after creation", l, s.String()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *span) String() string {
|
func (s *span) String() string {
|
||||||
@ -190,7 +190,7 @@ func (s *span) String() string {
|
|||||||
|
|
||||||
func otelSpanContextToOc(sc trace.SpanContext) octrace.SpanContext {
|
func otelSpanContextToOc(sc trace.SpanContext) octrace.SpanContext {
|
||||||
if sc.IsDebug() || sc.IsDeferred() {
|
if sc.IsDebug() || sc.IsDeferred() {
|
||||||
global.Handle(fmt.Errorf("ignoring OpenTelemetry Debug or Deferred trace flags for span %q because they are not supported by OpenCensus", sc.SpanID))
|
otel.Handle(fmt.Errorf("ignoring OpenTelemetry Debug or Deferred trace flags for span %q because they are not supported by OpenCensus", sc.SpanID))
|
||||||
}
|
}
|
||||||
var to octrace.TraceOptions
|
var to octrace.TraceOptions
|
||||||
if sc.IsSampled() {
|
if sc.IsSampled() {
|
||||||
|
@ -25,9 +25,9 @@ import (
|
|||||||
otext "github.com/opentracing/opentracing-go/ext"
|
otext "github.com/opentracing/opentracing-go/ext"
|
||||||
otlog "github.com/opentracing/opentracing-go/log"
|
otlog "github.com/opentracing/opentracing-go/log"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/bridge/opentracing/migration"
|
"go.opentelemetry.io/otel/bridge/opentracing/migration"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
otelglobal "go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/internal/baggage"
|
"go.opentelemetry.io/otel/internal/baggage"
|
||||||
"go.opentelemetry.io/otel/internal/trace/noop"
|
"go.opentelemetry.io/otel/internal/trace/noop"
|
||||||
otelparent "go.opentelemetry.io/otel/internal/trace/parent"
|
otelparent "go.opentelemetry.io/otel/internal/trace/parent"
|
||||||
@ -654,5 +654,5 @@ func (t *BridgeTracer) getPropagator() propagation.TextMapPropagator {
|
|||||||
if t.propagator != nil {
|
if t.propagator != nil {
|
||||||
return t.propagator
|
return t.propagator
|
||||||
}
|
}
|
||||||
return otelglobal.TextMapPropagator()
|
return otel.GetTextMapPropagator()
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
|
|
||||||
ot "github.com/opentracing/opentracing-go"
|
ot "github.com/opentracing/opentracing-go"
|
||||||
|
|
||||||
otelglobal "go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
otelbaggage "go.opentelemetry.io/otel/internal/baggage"
|
otelbaggage "go.opentelemetry.io/otel/internal/baggage"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
@ -130,7 +130,7 @@ func TestMixedAPIs(t *testing.T) {
|
|||||||
t.Log(msg)
|
t.Log(msg)
|
||||||
})
|
})
|
||||||
|
|
||||||
otelglobal.SetTracerProvider(otelProvider)
|
otel.SetTracerProvider(otelProvider)
|
||||||
ot.SetGlobalTracer(otTracer)
|
ot.SetGlobalTracer(otTracer)
|
||||||
|
|
||||||
tc.setup(t, mockOtelTracer)
|
tc.setup(t, mockOtelTracer)
|
||||||
@ -440,7 +440,7 @@ func (tm *tracerMessTest) setup(t *testing.T, tracer *internal.MockTracer) {
|
|||||||
|
|
||||||
func (tm *tracerMessTest) check(t *testing.T, tracer *internal.MockTracer) {
|
func (tm *tracerMessTest) check(t *testing.T, tracer *internal.MockTracer) {
|
||||||
globalOtTracer := ot.GlobalTracer()
|
globalOtTracer := ot.GlobalTracer()
|
||||||
globalOtelTracer := otelglobal.Tracer("")
|
globalOtelTracer := otel.Tracer("")
|
||||||
if len(tm.recordedOTSpanTracers) != 3 {
|
if len(tm.recordedOTSpanTracers) != 3 {
|
||||||
t.Errorf("Expected 3 recorded OpenTracing tracers from spans, got %d", len(tm.recordedOTSpanTracers))
|
t.Errorf("Expected 3 recorded OpenTracing tracers from spans, got %d", len(tm.recordedOTSpanTracers))
|
||||||
}
|
}
|
||||||
@ -684,7 +684,7 @@ func min(a, b int) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runOtelOTOtel(t *testing.T, ctx context.Context, name string, callback func(*testing.T, context.Context) context.Context) {
|
func runOtelOTOtel(t *testing.T, ctx context.Context, name string, callback func(*testing.T, context.Context) context.Context) {
|
||||||
tr := otelglobal.Tracer("")
|
tr := otel.Tracer("")
|
||||||
ctx, span := tr.Start(ctx, fmt.Sprintf("%s_Otel_OTOtel", name), trace.WithSpanKind(trace.SpanKindClient))
|
ctx, span := tr.Start(ctx, fmt.Sprintf("%s_Otel_OTOtel", name), trace.WithSpanKind(trace.SpanKindClient))
|
||||||
defer span.End()
|
defer span.End()
|
||||||
ctx = callback(t, ctx)
|
ctx = callback(t, ctx)
|
||||||
@ -701,7 +701,7 @@ func runOtelOTOtel(t *testing.T, ctx context.Context, name string, callback func
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runOTOtelOT(t *testing.T, ctx context.Context, name string, callback func(*testing.T, context.Context) context.Context) {
|
func runOTOtelOT(t *testing.T, ctx context.Context, name string, callback func(*testing.T, context.Context) context.Context) {
|
||||||
tr := otelglobal.Tracer("")
|
tr := otel.Tracer("")
|
||||||
span, ctx := ot.StartSpanFromContext(ctx, fmt.Sprintf("%s_OT_OtelOT", name), ot.Tag{Key: "span.kind", Value: "client"})
|
span, ctx := ot.StartSpanFromContext(ctx, fmt.Sprintf("%s_OT_OtelOT", name), ot.Tag{Key: "span.kind", Value: "client"})
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
ctx = callback(t, ctx)
|
ctx = callback(t, ctx)
|
||||||
|
113
doc.go
113
doc.go
@ -12,112 +12,9 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
/*
|
// Package global provides global providers, propagators and more.
|
||||||
Package otel provides an implementation of the OpenTelemetry API.
|
//
|
||||||
|
// This package is currently in a pre-GA phase. Backwards incompatible changes
|
||||||
This package is currently in a pre-GA phase. Backwards incompatible changes
|
// may be introduced in subsequent minor version releases as we work to track
|
||||||
may be introduced in subsequent minor version releases as we work to track the
|
// the evolving OpenTelemetry specification and user feedback.
|
||||||
evolving OpenTelemetry specification and user feedback.
|
|
||||||
|
|
||||||
The provided API is used to instrument code and measure data about that code's
|
|
||||||
performance and operation. The measured data, by default, is not processed or
|
|
||||||
transmitted anywhere. An implementation of the OpenTelemetry SDK, like the
|
|
||||||
default SDK implementation (go.opentelemetry.io/otel/sdk), and associated
|
|
||||||
exporters are used to process and transport this data.
|
|
||||||
|
|
||||||
Tracing
|
|
||||||
|
|
||||||
To participate in distributed traces a Span needs to be created for the
|
|
||||||
operation being performed as part of a traced workflow. It its simplest form:
|
|
||||||
|
|
||||||
var tracer otel.Tracer
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
tracer = global.Tracer("instrumentation/package/name")
|
|
||||||
}
|
|
||||||
|
|
||||||
func operation(ctx context.Context) {
|
|
||||||
var span trace.Span
|
|
||||||
ctx, span = tracer.Start(ctx, "operation")
|
|
||||||
defer span.End()
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
|
|
||||||
A Tracer is unique to the instrumentation and is used to create Spans.
|
|
||||||
Instrumentation should be designed to accept a TracerProvider from which it
|
|
||||||
can create its own unique Tracer. Alternatively, the registered global
|
|
||||||
TracerProvider from the go.opentelemetry.io/otel/global package can be used as
|
|
||||||
a default.
|
|
||||||
|
|
||||||
const (
|
|
||||||
name = "instrumentation/package/name"
|
|
||||||
version = "0.1.0"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Instrumentation struct {
|
|
||||||
tracer otel.Tracer
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewInstrumentation(tp otel.TracerProvider) *Instrumentation {
|
|
||||||
if tp == nil {
|
|
||||||
tp := global.TracerProvider()
|
|
||||||
}
|
|
||||||
return &Instrumentation{
|
|
||||||
tracer: tp.Tracer(name, otel.WithTracerVersion(version)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func operation(ctx context.Context, inst *Instrumentation) {
|
|
||||||
var span trace.Span
|
|
||||||
ctx, span = inst.tracer.Start(ctx, "operation")
|
|
||||||
defer span.End()
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
|
|
||||||
Metric Measurements
|
|
||||||
|
|
||||||
Measurements can be made about an operation being performed or the state of a
|
|
||||||
system in general. These measurements can be crucial to the reliable operation
|
|
||||||
of code and provide valuable insights about the inner workings of a system.
|
|
||||||
|
|
||||||
Measurements are made using instruments provided by this package. The type of
|
|
||||||
instrument used will depend on the type of measurement being made and of what
|
|
||||||
part of a system is being measured.
|
|
||||||
|
|
||||||
Instruments are categorized as Synchronous or Asynchronous and independently
|
|
||||||
as Adding or Grouping. Synchronous instruments are called by the user with a
|
|
||||||
Context. Asynchronous instruments are called by the SDK during collection.
|
|
||||||
Additive instruments are semantically intended for capturing a sum. Grouping
|
|
||||||
instruments are intended for capturing a distribution.
|
|
||||||
|
|
||||||
Additive instruments may be monotonic, in which case they are non-decreasing
|
|
||||||
and naturally define a rate.
|
|
||||||
|
|
||||||
The synchronous instrument names are:
|
|
||||||
|
|
||||||
Counter: additive, monotonic
|
|
||||||
UpDownCounter: additive
|
|
||||||
ValueRecorder: grouping
|
|
||||||
|
|
||||||
and the asynchronous instruments are:
|
|
||||||
|
|
||||||
SumObserver: additive, monotonic
|
|
||||||
UpDownSumObserver: additive
|
|
||||||
ValueObserver: grouping
|
|
||||||
|
|
||||||
All instruments are provided with support for either float64 or int64 input
|
|
||||||
values.
|
|
||||||
|
|
||||||
An instrument is created using a Meter. Additionally, a Meter is used to
|
|
||||||
record batches of synchronous measurements or asynchronous observations. A
|
|
||||||
Meter is obtained using a MeterProvider. A Meter, like a Tracer, is unique to
|
|
||||||
the instrumentation it instruments and must be named and versioned when
|
|
||||||
created with a MeterProvider with the name and version of the instrumentation
|
|
||||||
library.
|
|
||||||
|
|
||||||
Instrumentation should be designed to accept a MeterProvider from which it can
|
|
||||||
create its own unique Meter. Alternatively, the registered global
|
|
||||||
MeterProvider from the go.opentelemetry.io/otel/api/global package can be used
|
|
||||||
as a default.
|
|
||||||
*/
|
|
||||||
package otel // import "go.opentelemetry.io/otel"
|
package otel // import "go.opentelemetry.io/otel"
|
||||||
|
@ -18,9 +18,9 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/baggage"
|
"go.opentelemetry.io/otel/baggage"
|
||||||
"go.opentelemetry.io/otel/exporters/stdout"
|
"go.opentelemetry.io/otel/exporters/stdout"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
"go.opentelemetry.io/otel/propagation"
|
"go.opentelemetry.io/otel/propagation"
|
||||||
@ -59,13 +59,13 @@ func main() {
|
|||||||
)
|
)
|
||||||
pusher.Start()
|
pusher.Start()
|
||||||
defer pusher.Stop()
|
defer pusher.Stop()
|
||||||
global.SetTracerProvider(tp)
|
otel.SetTracerProvider(tp)
|
||||||
global.SetMeterProvider(pusher.MeterProvider())
|
otel.SetMeterProvider(pusher.MeterProvider())
|
||||||
|
|
||||||
// set global propagator to baggage (the default is no-op).
|
// set global propagator to baggage (the default is no-op).
|
||||||
global.SetTextMapPropagator(propagation.Baggage{})
|
otel.SetTextMapPropagator(propagation.Baggage{})
|
||||||
tracer := global.Tracer("ex.com/basic")
|
tracer := otel.Tracer("ex.com/basic")
|
||||||
meter := global.Meter("ex.com/basic")
|
meter := otel.Meter("ex.com/basic")
|
||||||
|
|
||||||
commonLabels := []label.KeyValue{lemonsKey.Int(10), label.String("A", "1"), label.String("B", "2"), label.String("C", "3")}
|
commonLabels := []label.KeyValue{lemonsKey.Int(10), label.String("A", "1"), label.String("B", "2"), label.String("C", "3")}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/exporters/trace/jaeger"
|
"go.opentelemetry.io/otel/exporters/trace/jaeger"
|
||||||
@ -53,7 +53,7 @@ func main() {
|
|||||||
flush := initTracer()
|
flush := initTracer()
|
||||||
defer flush()
|
defer flush()
|
||||||
|
|
||||||
tr := global.Tracer("component-main")
|
tr := otel.Tracer("component-main")
|
||||||
ctx, span := tr.Start(ctx, "foo")
|
ctx, span := tr.Start(ctx, "foo")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func bar(ctx context.Context) {
|
func bar(ctx context.Context) {
|
||||||
tr := global.Tracer("component-bar")
|
tr := otel.Tracer("component-bar")
|
||||||
_, span := tr.Start(ctx, "bar")
|
_, span := tr.Start(ctx, "bar")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ package foo // import "go.opentelemetry.io/otel/example/namedtracer/foo"
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
@ -31,7 +31,7 @@ var (
|
|||||||
func SubOperation(ctx context.Context) error {
|
func SubOperation(ctx context.Context) error {
|
||||||
// Using global provider. Alternative is to have application provide a getter
|
// Using global provider. Alternative is to have application provide a getter
|
||||||
// for its component to get the instance of the provider.
|
// for its component to get the instance of the provider.
|
||||||
tr := global.Tracer("example/namedtracer/foo")
|
tr := otel.Tracer("example/namedtracer/foo")
|
||||||
|
|
||||||
var span trace.Span
|
var span trace.Span
|
||||||
_, span = tr.Start(ctx, "Sub operation...")
|
_, span = tr.Start(ctx, "Sub operation...")
|
||||||
|
@ -18,10 +18,10 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/baggage"
|
"go.opentelemetry.io/otel/baggage"
|
||||||
"go.opentelemetry.io/otel/example/namedtracer/foo"
|
"go.opentelemetry.io/otel/example/namedtracer/foo"
|
||||||
"go.opentelemetry.io/otel/exporters/stdout"
|
"go.opentelemetry.io/otel/exporters/stdout"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
@ -52,7 +52,7 @@ func initTracer() {
|
|||||||
),
|
),
|
||||||
sdktrace.WithSpanProcessor(bsp),
|
sdktrace.WithSpanProcessor(bsp),
|
||||||
)
|
)
|
||||||
global.SetTracerProvider(tp)
|
otel.SetTracerProvider(tp)
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -25,8 +25,8 @@ import (
|
|||||||
|
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/exporters/otlp"
|
"go.opentelemetry.io/otel/exporters/otlp"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
"go.opentelemetry.io/otel/propagation"
|
"go.opentelemetry.io/otel/propagation"
|
||||||
@ -81,9 +81,9 @@ func initProvider() func() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
// set global propagator to tracecontext (the default is no-op).
|
// set global propagator to tracecontext (the default is no-op).
|
||||||
global.SetTextMapPropagator(propagation.TraceContext{})
|
otel.SetTextMapPropagator(propagation.TraceContext{})
|
||||||
global.SetTracerProvider(tracerProvider)
|
otel.SetTracerProvider(tracerProvider)
|
||||||
global.SetMeterProvider(pusher.MeterProvider())
|
otel.SetMeterProvider(pusher.MeterProvider())
|
||||||
pusher.Start()
|
pusher.Start()
|
||||||
|
|
||||||
return func() {
|
return func() {
|
||||||
@ -99,8 +99,8 @@ func main() {
|
|||||||
shutdown := initProvider()
|
shutdown := initProvider()
|
||||||
defer shutdown()
|
defer shutdown()
|
||||||
|
|
||||||
tracer := global.Tracer("test-tracer")
|
tracer := otel.Tracer("test-tracer")
|
||||||
meter := global.Meter("test-meter")
|
meter := otel.Meter("test-meter")
|
||||||
|
|
||||||
// labels represent additional key-value descriptors that can be bound to a
|
// labels represent additional key-value descriptors that can be bound to a
|
||||||
// metric observer or recorder.
|
// metric observer or recorder.
|
||||||
|
@ -22,8 +22,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/exporters/metric/prometheus"
|
"go.opentelemetry.io/otel/exporters/metric/prometheus"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
)
|
)
|
||||||
@ -48,7 +48,7 @@ func initMeter() {
|
|||||||
func main() {
|
func main() {
|
||||||
initMeter()
|
initMeter()
|
||||||
|
|
||||||
meter := global.Meter("ex.com/basic")
|
meter := otel.Meter("ex.com/basic")
|
||||||
observerLock := new(sync.RWMutex)
|
observerLock := new(sync.RWMutex)
|
||||||
observerValueToReport := new(float64)
|
observerValueToReport := new(float64)
|
||||||
observerLabelsToReport := new([]label.KeyValue)
|
observerLabelsToReport := new([]label.KeyValue)
|
||||||
|
@ -23,8 +23,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/exporters/trace/zipkin"
|
"go.opentelemetry.io/otel/exporters/trace/zipkin"
|
||||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||||
)
|
)
|
||||||
@ -57,7 +56,7 @@ func main() {
|
|||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
tr := global.TracerProvider().Tracer("component-main")
|
tr := otel.GetTracerProvider().Tracer("component-main")
|
||||||
ctx, span := tr.Start(ctx, "foo")
|
ctx, span := tr.Start(ctx, "foo")
|
||||||
<-time.After(6 * time.Millisecond)
|
<-time.After(6 * time.Millisecond)
|
||||||
bar(ctx)
|
bar(ctx)
|
||||||
@ -69,7 +68,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func bar(ctx context.Context) {
|
func bar(ctx context.Context) {
|
||||||
tr := global.TracerProvider().Tracer("component-bar")
|
tr := otel.GetTracerProvider().Tracer("component-bar")
|
||||||
_, span := tr.Start(ctx, "bar")
|
_, span := tr.Start(ctx, "bar")
|
||||||
<-time.After(6 * time.Millisecond)
|
<-time.After(6 * time.Millisecond)
|
||||||
span.End()
|
span.End()
|
||||||
|
@ -23,7 +23,7 @@ import (
|
|||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
"go.opentelemetry.io/otel/metric/number"
|
"go.opentelemetry.io/otel/metric/number"
|
||||||
@ -135,7 +135,7 @@ func InstallNewPipeline(config Config, options ...pull.Option) (*Exporter, error
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
global.SetMeterProvider(exp.MeterProvider())
|
otel.SetMeterProvider(exp.MeterProvider())
|
||||||
return exp, nil
|
return exp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ func (c *collector) Collect(ch chan<- prometheus.Metric) {
|
|||||||
|
|
||||||
ctrl := c.exp.Controller()
|
ctrl := c.exp.Controller()
|
||||||
if err := ctrl.Collect(context.Background()); err != nil {
|
if err := ctrl.Collect(context.Background()); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err := ctrl.ForEach(c.exp, func(record export.Record) error {
|
err := ctrl.ForEach(c.exp, func(record export.Record) error {
|
||||||
@ -254,7 +254,7 @@ func (c *collector) Collect(ch chan<- prometheus.Metric) {
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,8 +22,8 @@ import (
|
|||||||
|
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/exporters/otlp"
|
"go.opentelemetry.io/otel/exporters/otlp"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ func Example_insecure() {
|
|||||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
if err := exp.Shutdown(ctx); err != nil {
|
if err := exp.Shutdown(ctx); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -49,9 +49,9 @@ func Example_insecure() {
|
|||||||
sdktrace.WithMaxExportBatchSize(10),
|
sdktrace.WithMaxExportBatchSize(10),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
global.SetTracerProvider(tp)
|
otel.SetTracerProvider(tp)
|
||||||
|
|
||||||
tracer := global.Tracer("test-tracer")
|
tracer := otel.Tracer("test-tracer")
|
||||||
|
|
||||||
// Then use the OpenTelemetry tracing library, like we normally would.
|
// Then use the OpenTelemetry tracing library, like we normally would.
|
||||||
ctx, span := tracer.Start(context.Background(), "CollectorExporter-Example")
|
ctx, span := tracer.Start(context.Background(), "CollectorExporter-Example")
|
||||||
@ -80,7 +80,7 @@ func Example_withTLS() {
|
|||||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
if err := exp.Shutdown(ctx); err != nil {
|
if err := exp.Shutdown(ctx); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -93,9 +93,9 @@ func Example_withTLS() {
|
|||||||
sdktrace.WithMaxExportBatchSize(10),
|
sdktrace.WithMaxExportBatchSize(10),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
global.SetTracerProvider(tp)
|
otel.SetTracerProvider(tp)
|
||||||
|
|
||||||
tracer := global.Tracer("test-tracer")
|
tracer := otel.Tracer("test-tracer")
|
||||||
|
|
||||||
// Then use the OpenTelemetry tracing library, like we normally would.
|
// Then use the OpenTelemetry tracing library, like we normally would.
|
||||||
ctx, span := tracer.Start(context.Background(), "Securely-Talking-To-Collector-Span")
|
ctx, span := tracer.Start(context.Background(), "Securely-Talking-To-Collector-Span")
|
||||||
|
@ -18,8 +18,8 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/exporters/stdout"
|
"go.opentelemetry.io/otel/exporters/stdout"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
@ -31,12 +31,12 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
tracer = global.TracerProvider().Tracer(
|
tracer = otel.GetTracerProvider().Tracer(
|
||||||
instrumentationName,
|
instrumentationName,
|
||||||
trace.WithInstrumentationVersion(instrumentationVersion),
|
trace.WithInstrumentationVersion(instrumentationVersion),
|
||||||
)
|
)
|
||||||
|
|
||||||
meter = global.MeterProvider().Meter(
|
meter = otel.GetMeterProvider().Meter(
|
||||||
instrumentationName,
|
instrumentationName,
|
||||||
metric.WithInstrumentationVersion(instrumentationVersion),
|
metric.WithInstrumentationVersion(instrumentationVersion),
|
||||||
)
|
)
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
package stdout // import "go.opentelemetry.io/otel/exporters/stdout"
|
package stdout // import "go.opentelemetry.io/otel/exporters/stdout"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/sdk/export/metric"
|
"go.opentelemetry.io/otel/sdk/export/metric"
|
||||||
exporttrace "go.opentelemetry.io/otel/sdk/export/trace"
|
exporttrace "go.opentelemetry.io/otel/sdk/export/trace"
|
||||||
"go.opentelemetry.io/otel/sdk/metric/controller/push"
|
"go.opentelemetry.io/otel/sdk/metric/controller/push"
|
||||||
@ -87,7 +87,7 @@ func InstallNewPipeline(exportOpts []Option, pushOpts []push.Option) (*push.Cont
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return controller, err
|
return controller, err
|
||||||
}
|
}
|
||||||
global.SetTracerProvider(tracerProvider)
|
otel.SetTracerProvider(tracerProvider)
|
||||||
global.SetMeterProvider(controller.MeterProvider())
|
otel.SetMeterProvider(controller.MeterProvider())
|
||||||
return controller, err
|
return controller, err
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ func ProcessFromEnv() Process {
|
|||||||
if e := os.Getenv(envTags); e != "" {
|
if e := os.Getenv(envTags); e != "" {
|
||||||
tags, err := parseTags(e)
|
tags, err := parseTags(e)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
} else {
|
} else {
|
||||||
p.Tags = tags
|
p.Tags = tags
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,9 @@ import (
|
|||||||
|
|
||||||
"google.golang.org/api/support/bundler"
|
"google.golang.org/api/support/bundler"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
gen "go.opentelemetry.io/otel/exporters/trace/jaeger/internal/gen-go/jaeger"
|
gen "go.opentelemetry.io/otel/exporters/trace/jaeger/internal/gen-go/jaeger"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
export "go.opentelemetry.io/otel/sdk/export/trace"
|
export "go.opentelemetry.io/otel/sdk/export/trace"
|
||||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||||
@ -129,7 +129,7 @@ func NewRawExporter(endpointOption EndpointOption, opts ...Option) (*Exporter, e
|
|||||||
}
|
}
|
||||||
bundler := bundler.NewBundler((*gen.Span)(nil), func(bundle interface{}) {
|
bundler := bundler.NewBundler((*gen.Span)(nil), func(bundle interface{}) {
|
||||||
if err := e.upload(bundle.([]*gen.Span)); err != nil {
|
if err := e.upload(bundle.([]*gen.Span)); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ func InstallNewPipeline(endpointOption EndpointOption, opts ...Option) (func(),
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
global.SetTracerProvider(tp)
|
otel.SetTracerProvider(tp)
|
||||||
return flushFn, nil
|
return flushFn, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,9 +28,9 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"google.golang.org/api/support/bundler"
|
"google.golang.org/api/support/bundler"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
gen "go.opentelemetry.io/otel/exporters/trace/jaeger/internal/gen-go/jaeger"
|
gen "go.opentelemetry.io/otel/exporters/trace/jaeger/internal/gen-go/jaeger"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
ottest "go.opentelemetry.io/otel/internal/testing"
|
ottest "go.opentelemetry.io/otel/internal/testing"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
export "go.opentelemetry.io/otel/sdk/export/trace"
|
export "go.opentelemetry.io/otel/sdk/export/trace"
|
||||||
@ -81,9 +81,9 @@ func TestInstallNewPipeline(t *testing.T) {
|
|||||||
defer fn()
|
defer fn()
|
||||||
|
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.IsType(t, tc.expectedProvider, global.TracerProvider())
|
assert.IsType(t, tc.expectedProvider, otel.GetTracerProvider())
|
||||||
|
|
||||||
global.SetTracerProvider(nil)
|
otel.SetTracerProvider(nil)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -144,7 +144,7 @@ func TestNewExportPipeline(t *testing.T) {
|
|||||||
defer fn()
|
defer fn()
|
||||||
|
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.NotEqual(t, tp, global.TracerProvider())
|
assert.NotEqual(t, tp, otel.GetTracerProvider())
|
||||||
assert.IsType(t, tc.expectedProviderType, tp)
|
assert.IsType(t, tc.expectedProviderType, tp)
|
||||||
|
|
||||||
if tc.testSpanSampling {
|
if tc.testSpanSampling {
|
||||||
@ -342,8 +342,8 @@ func TestExporter_ExportSpan(t *testing.T) {
|
|||||||
sdktrace.WithConfig(sdktrace.Config{DefaultSampler: sdktrace.AlwaysSample()}),
|
sdktrace.WithConfig(sdktrace.Config{DefaultSampler: sdktrace.AlwaysSample()}),
|
||||||
sdktrace.WithSyncer(exp),
|
sdktrace.WithSyncer(exp),
|
||||||
)
|
)
|
||||||
global.SetTracerProvider(tp)
|
otel.SetTracerProvider(tp)
|
||||||
_, span := global.Tracer("test-tracer").Start(context.Background(), "test-span")
|
_, span := otel.Tracer("test-tracer").Start(context.Background(), "test-span")
|
||||||
span.End()
|
span.End()
|
||||||
|
|
||||||
assert.True(t, span.SpanContext().IsValid())
|
assert.True(t, span.SpanContext().IsValid())
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
export "go.opentelemetry.io/otel/sdk/export/trace"
|
export "go.opentelemetry.io/otel/sdk/export/trace"
|
||||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||||
)
|
)
|
||||||
@ -133,7 +133,7 @@ func InstallNewPipeline(collectorURL, serviceName string, opts ...Option) error
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
global.SetTracerProvider(tp)
|
otel.SetTracerProvider(tp)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,8 +30,8 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
export "go.opentelemetry.io/otel/sdk/export/trace"
|
export "go.opentelemetry.io/otel/sdk/export/trace"
|
||||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
@ -48,7 +48,7 @@ func TestInstallNewPipeline(t *testing.T) {
|
|||||||
serviceName,
|
serviceName,
|
||||||
)
|
)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.IsType(t, &sdktrace.TracerProvider{}, global.TracerProvider())
|
assert.IsType(t, &sdktrace.TracerProvider{}, otel.GetTracerProvider())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewExportPipeline(t *testing.T) {
|
func TestNewExportPipeline(t *testing.T) {
|
||||||
@ -90,7 +90,7 @@ func TestNewExportPipeline(t *testing.T) {
|
|||||||
tc.options...,
|
tc.options...,
|
||||||
)
|
)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.NotEqual(t, tp, global.TracerProvider())
|
assert.NotEqual(t, tp, otel.GetTracerProvider())
|
||||||
|
|
||||||
if tc.testSpanSampling {
|
if tc.testSpanSampling {
|
||||||
_, span := tp.Tracer("zipkin test").Start(context.Background(), tc.name)
|
_, span := tp.Tracer("zipkin test").Start(context.Background(), tc.name)
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
// 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 provides global providers, propagators and more.
|
|
||||||
//
|
|
||||||
// This package is currently in a pre-GA phase. Backwards incompatible changes
|
|
||||||
// may be introduced in subsequent minor version releases as we work to track
|
|
||||||
// the evolving OpenTelemetry specification and user feedback.
|
|
||||||
package global // import "go.opentelemetry.io/otel/global"
|
|
@ -12,15 +12,13 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package global // import "go.opentelemetry.io/otel/global"
|
package otel // import "go.opentelemetry.io/otel"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -37,7 +35,7 @@ var (
|
|||||||
delegateErrorHandlerOnce sync.Once
|
delegateErrorHandlerOnce sync.Once
|
||||||
|
|
||||||
// Comiple time check that loggingErrorHandler implements ErrorHandler.
|
// Comiple time check that loggingErrorHandler implements ErrorHandler.
|
||||||
_ otel.ErrorHandler = (*loggingErrorHandler)(nil)
|
_ ErrorHandler = (*loggingErrorHandler)(nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
// loggingErrorHandler logs all errors to STDERR.
|
// loggingErrorHandler logs all errors to STDERR.
|
||||||
@ -48,7 +46,7 @@ type loggingErrorHandler struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// setDelegate sets the ErrorHandler delegate if one is not already set.
|
// setDelegate sets the ErrorHandler delegate if one is not already set.
|
||||||
func (h *loggingErrorHandler) setDelegate(d otel.ErrorHandler) {
|
func (h *loggingErrorHandler) setDelegate(d ErrorHandler) {
|
||||||
if h.delegate.Load() != nil {
|
if h.delegate.Load() != nil {
|
||||||
// Delegate already registered
|
// Delegate already registered
|
||||||
return
|
return
|
||||||
@ -56,26 +54,26 @@ func (h *loggingErrorHandler) setDelegate(d otel.ErrorHandler) {
|
|||||||
h.delegate.Store(d)
|
h.delegate.Store(d)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle implements otel.ErrorHandler.
|
// Handle implements ErrorHandler.
|
||||||
func (h *loggingErrorHandler) Handle(err error) {
|
func (h *loggingErrorHandler) Handle(err error) {
|
||||||
if d := h.delegate.Load(); d != nil {
|
if d := h.delegate.Load(); d != nil {
|
||||||
d.(otel.ErrorHandler).Handle(err)
|
d.(ErrorHandler).Handle(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
h.l.Print(err)
|
h.l.Print(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ErrorHandler returns the global ErrorHandler instance. If no ErrorHandler
|
// GetErrorHandler returns the global ErrorHandler instance. If no ErrorHandler
|
||||||
// instance has been set (`SetErrorHandler`), the default ErrorHandler which
|
// instance has been set (`SetErrorHandler`), the default ErrorHandler which
|
||||||
// logs errors to STDERR is returned.
|
// logs errors to STDERR is returned.
|
||||||
func ErrorHandler() otel.ErrorHandler {
|
func GetErrorHandler() ErrorHandler {
|
||||||
return globalErrorHandler
|
return globalErrorHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetErrorHandler sets the global ErrorHandler to be h.
|
// SetErrorHandler sets the global ErrorHandler to be h.
|
||||||
func SetErrorHandler(h otel.ErrorHandler) {
|
func SetErrorHandler(h ErrorHandler) {
|
||||||
delegateErrorHandlerOnce.Do(func() {
|
delegateErrorHandlerOnce.Do(func() {
|
||||||
current := ErrorHandler()
|
current := GetErrorHandler()
|
||||||
if current == h {
|
if current == h {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -87,5 +85,5 @@ func SetErrorHandler(h otel.ErrorHandler) {
|
|||||||
|
|
||||||
// Handle is a convience function for ErrorHandler().Handle(err)
|
// Handle is a convience function for ErrorHandler().Handle(err)
|
||||||
func Handle(err error) {
|
func Handle(err error) {
|
||||||
ErrorHandler().Handle(err)
|
GetErrorHandler().Handle(err)
|
||||||
}
|
}
|
@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package global
|
package otel
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
@ -66,7 +66,7 @@ func (s *HandlerTestSuite) SetupTest() {
|
|||||||
|
|
||||||
func (s *HandlerTestSuite) TestGlobalHandler() {
|
func (s *HandlerTestSuite) TestGlobalHandler() {
|
||||||
errs := []string{"one", "two"}
|
errs := []string{"one", "two"}
|
||||||
ErrorHandler().Handle(errors.New(errs[0]))
|
GetErrorHandler().Handle(errors.New(errs[0]))
|
||||||
Handle(errors.New(errs[1]))
|
Handle(errors.New(errs[1]))
|
||||||
s.Assert().Equal(errs, s.errLogger.Got())
|
s.Assert().Equal(errs, s.errLogger.Got())
|
||||||
}
|
}
|
@ -12,24 +12,24 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal_test
|
package global_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/global/internal"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
)
|
)
|
||||||
|
|
||||||
func BenchmarkGlobalInt64CounterAddNoSDK(b *testing.B) {
|
func BenchmarkGlobalInt64CounterAddNoSDK(b *testing.B) {
|
||||||
// Compare with BenchmarkGlobalInt64CounterAddWithSDK() in
|
// Compare with BenchmarkGlobalInt64CounterAddWithSDK() in
|
||||||
// ../../../sdk/metric/benchmark_test.go to see the overhead of the
|
// ../../sdk/metric/benchmark_test.go to see the overhead of the
|
||||||
// global no-op system against a registered SDK.
|
// global no-op system against a registered SDK.
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
sdk := global.Meter("test")
|
sdk := otel.Meter("test")
|
||||||
labs := []label.KeyValue{label.String("A", "B")}
|
labs := []label.KeyValue{label.String("A", "B")}
|
||||||
cnt := Must(sdk).NewInt64Counter("int64.counter")
|
cnt := Must(sdk).NewInt64Counter("int64.counter")
|
||||||
|
|
||||||
@ -42,9 +42,9 @@ func BenchmarkGlobalInt64CounterAddNoSDK(b *testing.B) {
|
|||||||
|
|
||||||
func BenchmarkStartEndSpanNoSDK(b *testing.B) {
|
func BenchmarkStartEndSpanNoSDK(b *testing.B) {
|
||||||
// Compare with BenchmarkStartEndSpan() in
|
// Compare with BenchmarkStartEndSpan() in
|
||||||
// ../../../sdk/trace/benchmark_test.go.
|
// ../../sdk/trace/benchmark_test.go.
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
t := global.Tracer("Benchmark StartEndSpan")
|
t := otel.Tracer("Benchmark StartEndSpan")
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
@ -12,19 +12,19 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal_test
|
package global_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global/internal"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
ottest "go.opentelemetry.io/otel/internal/testing"
|
ottest "go.opentelemetry.io/otel/internal/testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Ensure struct alignment prior to running tests.
|
// Ensure struct alignment prior to running tests.
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
fieldsMap := internal.AtomicFieldOffsets()
|
fieldsMap := global.AtomicFieldOffsets()
|
||||||
fields := make([]ottest.FieldOffset, 0, len(fieldsMap))
|
fields := make([]ottest.FieldOffset, 0, len(fieldsMap))
|
||||||
for name, offset := range fieldsMap {
|
for name, offset := range fieldsMap {
|
||||||
fields = append(fields, ottest.FieldOffset{
|
fields = append(fields, ottest.FieldOffset{
|
@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal
|
package global
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal_test
|
package global_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@ -21,8 +21,8 @@ import (
|
|||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/global/internal"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
"go.opentelemetry.io/otel/metric/number"
|
"go.opentelemetry.io/otel/metric/number"
|
||||||
@ -35,11 +35,11 @@ var asInt = number.NewInt64Number
|
|||||||
var asFloat = number.NewFloat64Number
|
var asFloat = number.NewFloat64Number
|
||||||
|
|
||||||
func TestDirect(t *testing.T) {
|
func TestDirect(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
meter1 := global.Meter("test1", metric.WithInstrumentationVersion("semver:v1.0.0"))
|
meter1 := otel.Meter("test1", metric.WithInstrumentationVersion("semver:v1.0.0"))
|
||||||
meter2 := global.Meter("test2")
|
meter2 := otel.Meter("test2")
|
||||||
labels1 := []label.KeyValue{label.String("A", "B")}
|
labels1 := []label.KeyValue{label.String("A", "B")}
|
||||||
labels2 := []label.KeyValue{label.String("C", "D")}
|
labels2 := []label.KeyValue{label.String("C", "D")}
|
||||||
labels3 := []label.KeyValue{label.String("E", "F")}
|
labels3 := []label.KeyValue{label.String("E", "F")}
|
||||||
@ -67,7 +67,7 @@ func TestDirect(t *testing.T) {
|
|||||||
second.Record(ctx, 2, labels3...)
|
second.Record(ctx, 2, labels3...)
|
||||||
|
|
||||||
mock, provider := oteltest.NewMeterProvider()
|
mock, provider := oteltest.NewMeterProvider()
|
||||||
global.SetMeterProvider(provider)
|
otel.SetMeterProvider(provider)
|
||||||
|
|
||||||
counter.Add(ctx, 1, labels1...)
|
counter.Add(ctx, 1, labels1...)
|
||||||
valuerecorder.Record(ctx, 3, labels1...)
|
valuerecorder.Record(ctx, 3, labels1...)
|
||||||
@ -133,12 +133,12 @@ func TestDirect(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBound(t *testing.T) {
|
func TestBound(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
|
|
||||||
// Note: this test uses opposite Float64/Int64 number kinds
|
// Note: this test uses opposite Float64/Int64 number kinds
|
||||||
// vs. the above, to cover all the instruments.
|
// vs. the above, to cover all the instruments.
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
glob := global.Meter("test")
|
glob := otel.Meter("test")
|
||||||
labels1 := []label.KeyValue{label.String("A", "B")}
|
labels1 := []label.KeyValue{label.String("A", "B")}
|
||||||
|
|
||||||
counter := Must(glob).NewFloat64Counter("test.counter")
|
counter := Must(glob).NewFloat64Counter("test.counter")
|
||||||
@ -152,7 +152,7 @@ func TestBound(t *testing.T) {
|
|||||||
boundM.Record(ctx, 2)
|
boundM.Record(ctx, 2)
|
||||||
|
|
||||||
mock, provider := oteltest.NewMeterProvider()
|
mock, provider := oteltest.NewMeterProvider()
|
||||||
global.SetMeterProvider(provider)
|
otel.SetMeterProvider(provider)
|
||||||
|
|
||||||
boundC.Add(ctx, 1)
|
boundC.Add(ctx, 1)
|
||||||
boundM.Record(ctx, 3)
|
boundM.Record(ctx, 3)
|
||||||
@ -180,9 +180,9 @@ func TestBound(t *testing.T) {
|
|||||||
|
|
||||||
func TestUnbind(t *testing.T) {
|
func TestUnbind(t *testing.T) {
|
||||||
// Tests Unbind with SDK never installed.
|
// Tests Unbind with SDK never installed.
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
|
|
||||||
glob := global.Meter("test")
|
glob := otel.Meter("test")
|
||||||
labels1 := []label.KeyValue{label.String("A", "B")}
|
labels1 := []label.KeyValue{label.String("A", "B")}
|
||||||
|
|
||||||
counter := Must(glob).NewFloat64Counter("test.counter")
|
counter := Must(glob).NewFloat64Counter("test.counter")
|
||||||
@ -196,15 +196,15 @@ func TestUnbind(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestUnbindThenRecordOne(t *testing.T) {
|
func TestUnbindThenRecordOne(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
mock, provider := oteltest.NewMeterProvider()
|
mock, provider := oteltest.NewMeterProvider()
|
||||||
|
|
||||||
meter := global.Meter("test")
|
meter := otel.Meter("test")
|
||||||
counter := Must(meter).NewInt64Counter("test.counter")
|
counter := Must(meter).NewInt64Counter("test.counter")
|
||||||
boundC := counter.Bind()
|
boundC := counter.Bind()
|
||||||
global.SetMeterProvider(provider)
|
otel.SetMeterProvider(provider)
|
||||||
boundC.Unbind()
|
boundC.Unbind()
|
||||||
|
|
||||||
require.NotPanics(t, func() {
|
require.NotPanics(t, func() {
|
||||||
@ -230,10 +230,10 @@ func (m *meterWithConstructorError) NewSyncInstrument(_ metric.Descriptor) (metr
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestErrorInDeferredConstructor(t *testing.T) {
|
func TestErrorInDeferredConstructor(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
meter := global.MeterProvider().Meter("builtin")
|
meter := otel.GetMeterProvider().Meter("builtin")
|
||||||
|
|
||||||
c1 := Must(meter).NewInt64Counter("test")
|
c1 := Must(meter).NewInt64Counter("test")
|
||||||
c2 := Must(meter).NewInt64Counter("test")
|
c2 := Must(meter).NewInt64Counter("test")
|
||||||
@ -242,7 +242,7 @@ func TestErrorInDeferredConstructor(t *testing.T) {
|
|||||||
sdk := &meterProviderWithConstructorError{provider}
|
sdk := &meterProviderWithConstructorError{provider}
|
||||||
|
|
||||||
require.Panics(t, func() {
|
require.Panics(t, func() {
|
||||||
global.SetMeterProvider(sdk)
|
otel.SetMeterProvider(sdk)
|
||||||
})
|
})
|
||||||
|
|
||||||
c1.Add(ctx, 1)
|
c1.Add(ctx, 1)
|
||||||
@ -250,13 +250,13 @@ func TestErrorInDeferredConstructor(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestImplementationIndirection(t *testing.T) {
|
func TestImplementationIndirection(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
|
|
||||||
// Test that Implementation() does the proper indirection, i.e.,
|
// Test that Implementation() does the proper indirection, i.e.,
|
||||||
// returns the implementation interface not the global, after
|
// returns the implementation interface not the global, after
|
||||||
// registered.
|
// registered.
|
||||||
|
|
||||||
meter1 := global.Meter("test1")
|
meter1 := otel.Meter("test1")
|
||||||
|
|
||||||
// Sync: no SDK yet
|
// Sync: no SDK yet
|
||||||
counter := Must(meter1).NewInt64Counter("interface.counter")
|
counter := Must(meter1).NewInt64Counter("interface.counter")
|
||||||
@ -281,7 +281,7 @@ func TestImplementationIndirection(t *testing.T) {
|
|||||||
|
|
||||||
// Register the SDK
|
// Register the SDK
|
||||||
_, provider := oteltest.NewMeterProvider()
|
_, provider := oteltest.NewMeterProvider()
|
||||||
global.SetMeterProvider(provider)
|
otel.SetMeterProvider(provider)
|
||||||
|
|
||||||
// Repeat the above tests
|
// Repeat the above tests
|
||||||
|
|
||||||
@ -301,16 +301,16 @@ func TestImplementationIndirection(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestRecordBatchMock(t *testing.T) {
|
func TestRecordBatchMock(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
|
|
||||||
meter := global.MeterProvider().Meter("builtin")
|
meter := otel.GetMeterProvider().Meter("builtin")
|
||||||
|
|
||||||
counter := Must(meter).NewInt64Counter("test.counter")
|
counter := Must(meter).NewInt64Counter("test.counter")
|
||||||
|
|
||||||
meter.RecordBatch(context.Background(), nil, counter.Measurement(1))
|
meter.RecordBatch(context.Background(), nil, counter.Measurement(1))
|
||||||
|
|
||||||
mock, provider := oteltest.NewMeterProvider()
|
mock, provider := oteltest.NewMeterProvider()
|
||||||
global.SetMeterProvider(provider)
|
otel.SetMeterProvider(provider)
|
||||||
|
|
||||||
meter.RecordBatch(context.Background(), nil, counter.Measurement(1))
|
meter.RecordBatch(context.Background(), nil, counter.Measurement(1))
|
||||||
|
|
@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal
|
package global
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
@ -12,23 +12,23 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal_test
|
package global_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global/internal"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
"go.opentelemetry.io/otel/oteltest"
|
"go.opentelemetry.io/otel/oteltest"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestTextMapPropagatorDelegation(t *testing.T) {
|
func TestTextMapPropagatorDelegation(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
carrier := oteltest.NewTextMapCarrier(nil)
|
carrier := oteltest.NewTextMapCarrier(nil)
|
||||||
|
|
||||||
// The default should be a noop.
|
// The default should be a noop.
|
||||||
initial := internal.TextMapPropagator()
|
initial := global.TextMapPropagator()
|
||||||
initial.Inject(ctx, carrier)
|
initial.Inject(ctx, carrier)
|
||||||
ctx = initial.Extract(ctx, carrier)
|
ctx = initial.Extract(ctx, carrier)
|
||||||
if !carrier.GotN(t, 0) || !carrier.SetN(t, 0) {
|
if !carrier.GotN(t, 0) || !carrier.SetN(t, 0) {
|
||||||
@ -45,7 +45,7 @@ func TestTextMapPropagatorDelegation(t *testing.T) {
|
|||||||
|
|
||||||
// The initial propagator should use the delegate after it is set as the
|
// The initial propagator should use the delegate after it is set as the
|
||||||
// global.
|
// global.
|
||||||
internal.SetTextMapPropagator(delegate)
|
global.SetTextMapPropagator(delegate)
|
||||||
initial.Inject(ctx, carrier)
|
initial.Inject(ctx, carrier)
|
||||||
ctx = initial.Extract(ctx, carrier)
|
ctx = initial.Extract(ctx, carrier)
|
||||||
delegate.InjectedN(t, carrier, 2)
|
delegate.InjectedN(t, carrier, 2)
|
||||||
@ -53,12 +53,12 @@ func TestTextMapPropagatorDelegation(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestTextMapPropagatorDelegationNil(t *testing.T) {
|
func TestTextMapPropagatorDelegationNil(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
carrier := oteltest.NewTextMapCarrier(nil)
|
carrier := oteltest.NewTextMapCarrier(nil)
|
||||||
|
|
||||||
// The default should be a noop.
|
// The default should be a noop.
|
||||||
initial := internal.TextMapPropagator()
|
initial := global.TextMapPropagator()
|
||||||
initial.Inject(ctx, carrier)
|
initial.Inject(ctx, carrier)
|
||||||
ctx = initial.Extract(ctx, carrier)
|
ctx = initial.Extract(ctx, carrier)
|
||||||
if !carrier.GotN(t, 0) || !carrier.SetN(t, 0) {
|
if !carrier.GotN(t, 0) || !carrier.SetN(t, 0) {
|
||||||
@ -66,7 +66,7 @@ func TestTextMapPropagatorDelegationNil(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Delegation to nil should not make a change.
|
// Delegation to nil should not make a change.
|
||||||
internal.SetTextMapPropagator(nil)
|
global.SetTextMapPropagator(nil)
|
||||||
initial.Inject(ctx, carrier)
|
initial.Inject(ctx, carrier)
|
||||||
initial.Extract(ctx, carrier)
|
initial.Extract(ctx, carrier)
|
||||||
if !carrier.GotN(t, 0) || !carrier.SetN(t, 0) {
|
if !carrier.GotN(t, 0) || !carrier.SetN(t, 0) {
|
||||||
@ -75,8 +75,8 @@ func TestTextMapPropagatorDelegationNil(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestTextMapPropagatorFields(t *testing.T) {
|
func TestTextMapPropagatorFields(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
initial := internal.TextMapPropagator()
|
initial := global.TextMapPropagator()
|
||||||
delegate := oteltest.NewTextMapPropagator("test")
|
delegate := oteltest.NewTextMapPropagator("test")
|
||||||
delegateFields := delegate.Fields()
|
delegateFields := delegate.Fields()
|
||||||
|
|
||||||
@ -84,13 +84,13 @@ func TestTextMapPropagatorFields(t *testing.T) {
|
|||||||
if got := initial.Fields(); fieldsEqual(got, delegateFields) {
|
if got := initial.Fields(); fieldsEqual(got, delegateFields) {
|
||||||
t.Fatalf("testing fields (%v) matched Noop fields (%v)", delegateFields, got)
|
t.Fatalf("testing fields (%v) matched Noop fields (%v)", delegateFields, got)
|
||||||
}
|
}
|
||||||
internal.SetTextMapPropagator(delegate)
|
global.SetTextMapPropagator(delegate)
|
||||||
// Check previous returns from global not correctly delegate.
|
// Check previous returns from global not correctly delegate.
|
||||||
if got := initial.Fields(); !fieldsEqual(got, delegateFields) {
|
if got := initial.Fields(); !fieldsEqual(got, delegateFields) {
|
||||||
t.Errorf("global TextMapPropagator.Fields returned %v instead of delegating, want (%v)", got, delegateFields)
|
t.Errorf("global TextMapPropagator.Fields returned %v instead of delegating, want (%v)", got, delegateFields)
|
||||||
}
|
}
|
||||||
// Check new calls to global.
|
// Check new calls to global.
|
||||||
if got := internal.TextMapPropagator().Fields(); !fieldsEqual(got, delegateFields) {
|
if got := global.TextMapPropagator().Fields(); !fieldsEqual(got, delegateFields) {
|
||||||
t.Errorf("global TextMapPropagator.Fields returned %v, want (%v)", got, delegateFields)
|
t.Errorf("global TextMapPropagator.Fields returned %v, want (%v)", got, delegateFields)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal
|
package global
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal
|
package global
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sync"
|
"sync"
|
@ -12,25 +12,25 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal_test
|
package global_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global/internal"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestResetsOfGlobalsPanic(t *testing.T) {
|
func TestResetsOfGlobalsPanic(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
tests := map[string]func(){
|
tests := map[string]func(){
|
||||||
"SetTextMapPropagator": func() {
|
"SetTextMapPropagator": func() {
|
||||||
internal.SetTextMapPropagator(internal.TextMapPropagator())
|
global.SetTextMapPropagator(global.TextMapPropagator())
|
||||||
},
|
},
|
||||||
"SetTracerProvider": func() {
|
"SetTracerProvider": func() {
|
||||||
internal.SetTracerProvider(internal.TracerProvider())
|
global.SetTracerProvider(global.TracerProvider())
|
||||||
},
|
},
|
||||||
"SetMeterProvider": func() {
|
"SetMeterProvider": func() {
|
||||||
internal.SetMeterProvider(internal.MeterProvider())
|
global.SetMeterProvider(global.MeterProvider())
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal
|
package global
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file contains the forwarding implementation of the TracerProvider used as
|
This file contains the forwarding implementation of the TracerProvider used as
|
@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package internal_test
|
package global_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
@ -20,23 +20,23 @@ import (
|
|||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/global/internal"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
"go.opentelemetry.io/otel/oteltest"
|
"go.opentelemetry.io/otel/oteltest"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestTraceWithSDK(t *testing.T) {
|
func TestTraceWithSDK(t *testing.T) {
|
||||||
internal.ResetForTest()
|
global.ResetForTest()
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
gtp := global.TracerProvider()
|
gtp := otel.GetTracerProvider()
|
||||||
tracer1 := gtp.Tracer("pre")
|
tracer1 := gtp.Tracer("pre")
|
||||||
// This is started before an SDK was registered and should be dropped.
|
// This is started before an SDK was registered and should be dropped.
|
||||||
_, span1 := tracer1.Start(ctx, "span1")
|
_, span1 := tracer1.Start(ctx, "span1")
|
||||||
|
|
||||||
sr := new(oteltest.StandardSpanRecorder)
|
sr := new(oteltest.StandardSpanRecorder)
|
||||||
tp := oteltest.NewTracerProvider(oteltest.WithSpanRecorder(sr))
|
tp := oteltest.NewTracerProvider(oteltest.WithSpanRecorder(sr))
|
||||||
global.SetTracerProvider(tp)
|
otel.SetTracerProvider(tp)
|
||||||
|
|
||||||
// This span was started before initialization, it is expected to be dropped.
|
// This span was started before initialization, it is expected to be dropped.
|
||||||
span1.End()
|
span1.End()
|
@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
)
|
)
|
||||||
@ -41,7 +41,7 @@ type AsyncCollector interface {
|
|||||||
type AsyncInstrumentState struct {
|
type AsyncInstrumentState struct {
|
||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
|
|
||||||
// errorOnce will use the global.Handler to report an error
|
// errorOnce will use the otel.Handler to report an error
|
||||||
// once in case of an invalid runner attempting to run.
|
// once in case of an invalid runner attempting to run.
|
||||||
errorOnce sync.Once
|
errorOnce sync.Once
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ func (a *AsyncInstrumentState) Run(ctx context.Context, collector AsyncCollector
|
|||||||
}
|
}
|
||||||
|
|
||||||
a.errorOnce.Do(func() {
|
a.errorOnce.Do(func() {
|
||||||
global.Handle(fmt.Errorf("%w: type %T (reported once)", ErrInvalidAsyncRunner, rp))
|
otel.Handle(fmt.Errorf("%w: type %T (reported once)", ErrInvalidAsyncRunner, rp))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,10 +12,10 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package global // import "go.opentelemetry.io/otel/global"
|
package otel // import "go.opentelemetry.io/otel"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go.opentelemetry.io/otel/global/internal"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -28,10 +28,10 @@ import (
|
|||||||
//
|
//
|
||||||
// This is short for MeterProvider().Meter(name)
|
// This is short for MeterProvider().Meter(name)
|
||||||
func Meter(instrumentationName string, opts ...metric.MeterOption) metric.Meter {
|
func Meter(instrumentationName string, opts ...metric.MeterOption) metric.Meter {
|
||||||
return MeterProvider().Meter(instrumentationName, opts...)
|
return GetMeterProvider().Meter(instrumentationName, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MeterProvider returns the registered global meter provider. If
|
// GetMeterProvider returns the registered global meter provider. If
|
||||||
// none is registered then a default meter provider is returned that
|
// none is registered then a default meter provider is returned that
|
||||||
// forwards the Meter interface to the first registered Meter.
|
// forwards the Meter interface to the first registered Meter.
|
||||||
//
|
//
|
||||||
@ -39,11 +39,11 @@ func Meter(instrumentationName string, opts ...metric.MeterOption) metric.Meter
|
|||||||
// meter := global.MeterProvider().Meter("example.com/foo")
|
// meter := global.MeterProvider().Meter("example.com/foo")
|
||||||
// or
|
// or
|
||||||
// meter := global.Meter("example.com/foo")
|
// meter := global.Meter("example.com/foo")
|
||||||
func MeterProvider() metric.MeterProvider {
|
func GetMeterProvider() metric.MeterProvider {
|
||||||
return internal.MeterProvider()
|
return global.MeterProvider()
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetMeterProvider registers `mp` as the global meter provider.
|
// SetMeterProvider registers `mp` as the global meter provider.
|
||||||
func SetMeterProvider(mp metric.MeterProvider) {
|
func SetMeterProvider(mp metric.MeterProvider) {
|
||||||
internal.SetMeterProvider(mp)
|
global.SetMeterProvider(mp)
|
||||||
}
|
}
|
@ -12,12 +12,11 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package global_test
|
package otel
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -32,10 +31,10 @@ func (*testMeterProvider) Meter(_ string, _ ...metric.MeterOption) metric.Meter
|
|||||||
func TestMultipleGlobalMeterProvider(t *testing.T) {
|
func TestMultipleGlobalMeterProvider(t *testing.T) {
|
||||||
p1 := testMeterProvider{}
|
p1 := testMeterProvider{}
|
||||||
p2 := metric.NoopMeterProvider{}
|
p2 := metric.NoopMeterProvider{}
|
||||||
global.SetMeterProvider(&p1)
|
SetMeterProvider(&p1)
|
||||||
global.SetMeterProvider(&p2)
|
SetMeterProvider(&p2)
|
||||||
|
|
||||||
got := global.MeterProvider()
|
got := GetMeterProvider()
|
||||||
want := &p2
|
want := &p2
|
||||||
if got != want {
|
if got != want {
|
||||||
t.Fatalf("MeterProvider: got %p, want %p\n", got, want)
|
t.Fatalf("MeterProvider: got %p, want %p\n", got, want)
|
@ -54,7 +54,7 @@ if [[ ${TAG_FOUND} = ${TAG} ]] ; then
|
|||||||
exit -1
|
exit -1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get version for sdk/opentelemetry.go
|
# Get version for version.go
|
||||||
OTEL_VERSION=$(echo "${TAG}" | grep -o '^v[0-9]\+\.[0-9]\+\.[0-9]\+')
|
OTEL_VERSION=$(echo "${TAG}" | grep -o '^v[0-9]\+\.[0-9]\+\.[0-9]\+')
|
||||||
# Strip leading v
|
# Strip leading v
|
||||||
OTEL_VERSION="${OTEL_VERSION#v}"
|
OTEL_VERSION="${OTEL_VERSION#v}"
|
||||||
@ -68,10 +68,10 @@ if ! git diff --quiet; then \
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Update sdk/opentelemetry.go
|
# Update version.go
|
||||||
cp ./sdk/opentelemetry.go ./sdk/opentelemetry.go.bak
|
cp ./version.go ./version.go.bak
|
||||||
sed "s/\(return \"\)[0-9]*\.[0-9]*\.[0-9]*\"/\1${OTEL_VERSION}\"/" ./sdk/opentelemetry.go.bak >./sdk/opentelemetry.go
|
sed "s/\(return \"\)[0-9]*\.[0-9]*\.[0-9]*\"/\1${OTEL_VERSION}\"/" ./version.go.bak >./version.go
|
||||||
rm -f ./sdk/opentelemetry.go.bak
|
rm -f ./version.go.bak
|
||||||
|
|
||||||
# Update go.mod
|
# Update go.mod
|
||||||
git checkout -b pre_release_${TAG} master
|
git checkout -b pre_release_${TAG} master
|
||||||
|
@ -12,20 +12,20 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package global // import "go.opentelemetry.io/otel/global"
|
package otel // import "go.opentelemetry.io/otel"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go.opentelemetry.io/otel/global/internal"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
"go.opentelemetry.io/otel/propagation"
|
"go.opentelemetry.io/otel/propagation"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TextMapPropagator returns the global TextMapPropagator. If none has been
|
// GetTextMapPropagator returns the global TextMapPropagator. If none has been
|
||||||
// set, a No-Op TextMapPropagator is returned.
|
// set, a No-Op TextMapPropagator is returned.
|
||||||
func TextMapPropagator() propagation.TextMapPropagator {
|
func GetTextMapPropagator() propagation.TextMapPropagator {
|
||||||
return internal.TextMapPropagator()
|
return global.TextMapPropagator()
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetTextMapPropagator sets propagator as the global TSetTextMapPropagator.
|
// SetTextMapPropagator sets propagator as the global TSetTextMapPropagator.
|
||||||
func SetTextMapPropagator(propagator propagation.TextMapPropagator) {
|
func SetTextMapPropagator(propagator propagation.TextMapPropagator) {
|
||||||
internal.SetTextMapPropagator(propagator)
|
global.SetTextMapPropagator(propagator)
|
||||||
}
|
}
|
@ -15,12 +15,12 @@
|
|||||||
package propagation_test
|
package propagation_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/propagation"
|
"go.opentelemetry.io/otel/propagation"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ExampleTraceContext() {
|
func ExampleTraceContext() {
|
||||||
tc := propagation.TraceContext{}
|
tc := propagation.TraceContext{}
|
||||||
// Register the TraceContext propagator globally.
|
// Register the TraceContext propagator globally.
|
||||||
global.SetTextMapPropagator(tc)
|
otel.SetTextMapPropagator(tc)
|
||||||
}
|
}
|
||||||
|
@ -18,12 +18,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
opentelemetry "go.opentelemetry.io/otel/sdk"
|
"go.opentelemetry.io/otel"
|
||||||
)
|
)
|
||||||
|
|
||||||
// UserAgent is the user agent to be added to the outgoing
|
// UserAgent is the user agent to be added to the outgoing
|
||||||
// requests from the exporters.
|
// requests from the exporters.
|
||||||
var UserAgent = fmt.Sprintf("opentelemetry-go/%s", opentelemetry.Version())
|
var UserAgent = fmt.Sprintf("opentelemetry-go/%s", otel.Version())
|
||||||
|
|
||||||
// MonotonicEndTime returns the end time at present
|
// MonotonicEndTime returns the end time at present
|
||||||
// but offset from start, monotonically.
|
// but offset from start, monotonically.
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"math/rand"
|
"math/rand"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
export "go.opentelemetry.io/otel/sdk/export/metric"
|
export "go.opentelemetry.io/otel/sdk/export/metric"
|
||||||
@ -214,8 +214,8 @@ func BenchmarkGlobalInt64CounterAddWithSDK(b *testing.B) {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
fix := newFixture(b)
|
fix := newFixture(b)
|
||||||
|
|
||||||
sdk := global.Meter("test")
|
sdk := otel.Meter("test")
|
||||||
global.SetMeterProvider(fix)
|
otel.SetMeterProvider(fix)
|
||||||
|
|
||||||
labs := []label.KeyValue{label.String("A", "B")}
|
labs := []label.KeyValue{label.String("A", "B")}
|
||||||
cnt := Must(sdk).NewInt64Counter("int64.sum")
|
cnt := Must(sdk).NewInt64Counter("int64.sum")
|
||||||
|
@ -19,7 +19,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
"go.opentelemetry.io/otel/metric/registry"
|
"go.opentelemetry.io/otel/metric/registry"
|
||||||
export "go.opentelemetry.io/otel/sdk/export/metric"
|
export "go.opentelemetry.io/otel/sdk/export/metric"
|
||||||
@ -144,10 +144,10 @@ func (c *Controller) tick() {
|
|||||||
c.checkpointer.StartCollection()
|
c.checkpointer.StartCollection()
|
||||||
c.accumulator.Collect(ctx)
|
c.accumulator.Collect(ctx)
|
||||||
if err := c.checkpointer.FinishCollection(); err != nil {
|
if err := c.checkpointer.FinishCollection(); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := c.exporter.Export(ctx, ckpt); err != nil {
|
if err := c.exporter.Export(ctx, ckpt); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ import (
|
|||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
export "go.opentelemetry.io/otel/sdk/export/metric"
|
export "go.opentelemetry.io/otel/sdk/export/metric"
|
||||||
@ -61,7 +61,7 @@ var testHandler *handler
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
testHandler = new(handler)
|
testHandler = new(handler)
|
||||||
global.SetErrorHandler(testHandler)
|
otel.SetErrorHandler(testHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newExporter() *processorTest.Exporter {
|
func newExporter() *processorTest.Exporter {
|
||||||
|
@ -23,7 +23,7 @@ import (
|
|||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
"go.opentelemetry.io/otel/metric/number"
|
"go.opentelemetry.io/otel/metric/number"
|
||||||
@ -66,7 +66,7 @@ var testHandler *handler
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
testHandler = new(handler)
|
testHandler = new(handler)
|
||||||
global.SetErrorHandler(testHandler)
|
otel.SetErrorHandler(testHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
// correctnessProcessor could be replaced with processortest.Processor
|
// correctnessProcessor could be replaced with processortest.Processor
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
internal "go.opentelemetry.io/otel/internal/metric"
|
internal "go.opentelemetry.io/otel/internal/metric"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
@ -164,7 +164,7 @@ func (s *syncInstrument) Implementation() interface{} {
|
|||||||
|
|
||||||
func (a *asyncInstrument) observe(num number.Number, labels *label.Set) {
|
func (a *asyncInstrument) observe(num number.Number, labels *label.Set) {
|
||||||
if err := aggregator.RangeTest(num, &a.descriptor); err != nil {
|
if err := aggregator.RangeTest(num, &a.descriptor); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
recorder := a.getRecorder(labels)
|
recorder := a.getRecorder(labels)
|
||||||
@ -174,7 +174,7 @@ func (a *asyncInstrument) observe(num number.Number, labels *label.Set) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := recorder.Update(context.Background(), num, &a.descriptor); err != nil {
|
if err := recorder.Update(context.Background(), num, &a.descriptor); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -434,14 +434,14 @@ func (m *Accumulator) checkpointRecord(r *record) int {
|
|||||||
}
|
}
|
||||||
err := r.current.SynchronizedMove(r.checkpoint, &r.inst.descriptor)
|
err := r.current.SynchronizedMove(r.checkpoint, &r.inst.descriptor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
a := export.NewAccumulation(&r.inst.descriptor, r.labels, m.resource, r.checkpoint)
|
a := export.NewAccumulation(&r.inst.descriptor, r.labels, m.resource, r.checkpoint)
|
||||||
err = m.processor.Process(a)
|
err = m.processor.Process(a)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
@ -459,7 +459,7 @@ func (m *Accumulator) checkpointAsync(a *asyncInstrument) int {
|
|||||||
a := export.NewAccumulation(&a.descriptor, lrec.labels, m.resource, lrec.observed)
|
a := export.NewAccumulation(&a.descriptor, lrec.labels, m.resource, lrec.observed)
|
||||||
err := m.processor.Process(a)
|
err := m.processor.Process(a)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
checkpointed++
|
checkpointed++
|
||||||
}
|
}
|
||||||
@ -507,11 +507,11 @@ func (r *record) RecordOne(ctx context.Context, num number.Number) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := aggregator.RangeTest(num, &r.inst.descriptor); err != nil {
|
if err := aggregator.RangeTest(num, &r.inst.descriptor); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := r.current.Update(ctx, num, &r.inst.descriptor); err != nil {
|
if err := r.current.Update(ctx, num, &r.inst.descriptor); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Record was modified, inform the Collect() that things need
|
// Record was modified, inform the Collect() that things need
|
||||||
@ -539,7 +539,7 @@ func (m *Accumulator) fromSync(sync metric.SyncImpl) *syncInstrument {
|
|||||||
return inst
|
return inst
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
global.Handle(ErrUninitializedInstrument)
|
otel.Handle(ErrUninitializedInstrument)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -551,6 +551,6 @@ func (m *Accumulator) fromAsync(async metric.AsyncImpl) *asyncInstrument {
|
|||||||
return inst
|
return inst
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
global.Handle(ErrUninitializedInstrument)
|
otel.Handle(ErrUninitializedInstrument)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -19,8 +19,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
opentelemetry "go.opentelemetry.io/otel/sdk"
|
|
||||||
"go.opentelemetry.io/otel/semconv"
|
"go.opentelemetry.io/otel/semconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ func (TelemetrySDK) Detect(context.Context) (*Resource, error) {
|
|||||||
return NewWithAttributes(
|
return NewWithAttributes(
|
||||||
semconv.TelemetrySDKNameKey.String("opentelemetry-go"),
|
semconv.TelemetrySDKNameKey.String("opentelemetry-go"),
|
||||||
semconv.TelemetrySDKLanguageKey.String("go"),
|
semconv.TelemetrySDKLanguageKey.String("go"),
|
||||||
semconv.TelemetrySDKVersionKey.String(opentelemetry.Version()),
|
semconv.TelemetrySDKVersionKey.String(otel.Version()),
|
||||||
), nil
|
), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,9 +22,9 @@ import (
|
|||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
ottest "go.opentelemetry.io/otel/internal/testing"
|
ottest "go.opentelemetry.io/otel/internal/testing"
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
opentelemetry "go.opentelemetry.io/otel/sdk"
|
|
||||||
"go.opentelemetry.io/otel/sdk/resource"
|
"go.opentelemetry.io/otel/sdk/resource"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ func TestDefaultConfig(t *testing.T) {
|
|||||||
"host.name": hostname(),
|
"host.name": hostname(),
|
||||||
"telemetry.sdk.name": "opentelemetry-go",
|
"telemetry.sdk.name": "opentelemetry-go",
|
||||||
"telemetry.sdk.language": "go",
|
"telemetry.sdk.language": "go",
|
||||||
"telemetry.sdk.version": opentelemetry.Version(),
|
"telemetry.sdk.version": otel.Version(),
|
||||||
}, toMap(res))
|
}, toMap(res))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ func TestDefaultConfigNoHost(t *testing.T) {
|
|||||||
require.EqualValues(t, map[string]string{
|
require.EqualValues(t, map[string]string{
|
||||||
"telemetry.sdk.name": "opentelemetry-go",
|
"telemetry.sdk.name": "opentelemetry-go",
|
||||||
"telemetry.sdk.language": "go",
|
"telemetry.sdk.language": "go",
|
||||||
"telemetry.sdk.version": opentelemetry.Version(),
|
"telemetry.sdk.version": otel.Version(),
|
||||||
}, toMap(res))
|
}, toMap(res))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ func TestDefaultConfigNoEnv(t *testing.T) {
|
|||||||
"host.name": hostname(),
|
"host.name": hostname(),
|
||||||
"telemetry.sdk.name": "opentelemetry-go",
|
"telemetry.sdk.name": "opentelemetry-go",
|
||||||
"telemetry.sdk.language": "go",
|
"telemetry.sdk.language": "go",
|
||||||
"telemetry.sdk.version": opentelemetry.Version(),
|
"telemetry.sdk.version": otel.Version(),
|
||||||
}, toMap(res))
|
}, toMap(res))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ func TestDefaultConfigWithEnv(t *testing.T) {
|
|||||||
"host.name": hostname(),
|
"host.name": hostname(),
|
||||||
"telemetry.sdk.name": "opentelemetry-go",
|
"telemetry.sdk.name": "opentelemetry-go",
|
||||||
"telemetry.sdk.language": "go",
|
"telemetry.sdk.language": "go",
|
||||||
"telemetry.sdk.version": opentelemetry.Version(),
|
"telemetry.sdk.version": otel.Version(),
|
||||||
}, toMap(res))
|
}, toMap(res))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
export "go.opentelemetry.io/otel/sdk/export/trace"
|
export "go.opentelemetry.io/otel/sdk/export/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ func (bsp *BatchSpanProcessor) exportSpans() {
|
|||||||
|
|
||||||
if len(bsp.batch) > 0 {
|
if len(bsp.batch) > 0 {
|
||||||
if err := bsp.e.ExportSpans(context.Background(), bsp.batch); err != nil {
|
if err := bsp.e.ExportSpans(context.Background(), bsp.batch); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
bsp.batch = bsp.batch[:0]
|
bsp.batch = bsp.batch[:0]
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
|
|
||||||
export "go.opentelemetry.io/otel/sdk/export/trace"
|
export "go.opentelemetry.io/otel/sdk/export/trace"
|
||||||
@ -144,7 +144,7 @@ func (p *TracerProvider) UnregisterSpanProcessor(s SpanProcessor) {
|
|||||||
}
|
}
|
||||||
if stopOnce != nil {
|
if stopOnce != nil {
|
||||||
stopOnce.state.Do(func() {
|
stopOnce.state.Do(func() {
|
||||||
global.Handle(s.Shutdown(context.Background()))
|
otel.Handle(s.Shutdown(context.Background()))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if len(new) > 1 {
|
if len(new) > 1 {
|
||||||
@ -192,7 +192,7 @@ func (p *TracerProvider) Shutdown(ctx context.Context) error {
|
|||||||
|
|
||||||
for _, sps := range spss {
|
for _, sps := range spss {
|
||||||
sps.state.Do(func() {
|
sps.state.Do(func() {
|
||||||
global.Handle(sps.sp.Shutdown(ctx))
|
otel.Handle(sps.sp.Shutdown(ctx))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -17,7 +17,7 @@ package trace // import "go.opentelemetry.io/otel/sdk/trace"
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
"go.opentelemetry.io/otel"
|
||||||
export "go.opentelemetry.io/otel/sdk/export/trace"
|
export "go.opentelemetry.io/otel/sdk/export/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ func (ssp *SimpleSpanProcessor) OnStart(parent context.Context, sd *export.SpanD
|
|||||||
func (ssp *SimpleSpanProcessor) OnEnd(sd *export.SpanData) {
|
func (ssp *SimpleSpanProcessor) OnEnd(sd *export.SpanData) {
|
||||||
if ssp.e != nil && sd.SpanContext.IsSampled() {
|
if ssp.e != nil && sd.SpanContext.IsSampled() {
|
||||||
if err := ssp.e.ExportSpans(context.Background(), []*export.SpanData{sd}); err != nil {
|
if err := ssp.e.ExportSpans(context.Background(), []*export.SpanData{sd}); err != nil {
|
||||||
global.Handle(err)
|
otel.Handle(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
|
|
||||||
@ -208,7 +208,7 @@ func (s *span) SetName(name string) {
|
|||||||
defer s.mu.Unlock()
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
if s.data == nil {
|
if s.data == nil {
|
||||||
global.Handle(errUninitializedSpan)
|
otel.Handle(errUninitializedSpan)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
s.data.Name = name
|
s.data.Name = name
|
||||||
|
@ -25,8 +25,8 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/label"
|
"go.opentelemetry.io/otel/label"
|
||||||
"go.opentelemetry.io/otel/oteltest"
|
"go.opentelemetry.io/otel/oteltest"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
@ -54,7 +54,7 @@ func init() {
|
|||||||
tid, _ = trace.TraceIDFromHex("01020304050607080102040810203040")
|
tid, _ = trace.TraceIDFromHex("01020304050607080102040810203040")
|
||||||
sid, _ = trace.SpanIDFromHex("0102040810203040")
|
sid, _ = trace.SpanIDFromHex("0102040810203040")
|
||||||
|
|
||||||
global.SetErrorHandler(new(discardHandler))
|
otel.SetErrorHandler(new(discardHandler))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTracerFollowsExpectedAPIBehaviour(t *testing.T) {
|
func TestTracerFollowsExpectedAPIBehaviour(t *testing.T) {
|
||||||
|
@ -12,10 +12,10 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package global // import "go.opentelemetry.io/otel/global"
|
package otel // import "go.opentelemetry.io/otel"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go.opentelemetry.io/otel/global/internal"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -24,21 +24,21 @@ import (
|
|||||||
//
|
//
|
||||||
// This is short for TracerProvider().Tracer(name)
|
// This is short for TracerProvider().Tracer(name)
|
||||||
func Tracer(name string) trace.Tracer {
|
func Tracer(name string) trace.Tracer {
|
||||||
return TracerProvider().Tracer(name)
|
return GetTracerProvider().Tracer(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TracerProvider returns the registered global trace provider.
|
// TracerProvider returns the registered global trace provider.
|
||||||
// If none is registered then an instance of NoopTracerProvider is returned.
|
// If none is registered then an instance of NoopTracerProvider is returned.
|
||||||
//
|
//
|
||||||
// Use the trace provider to create a named tracer. E.g.
|
// Use the trace provider to create a named tracer. E.g.
|
||||||
// tracer := global.TracerProvider().Tracer("example.com/foo")
|
// tracer := global.GetTracerProvider().Tracer("example.com/foo")
|
||||||
// or
|
// or
|
||||||
// tracer := global.Tracer("example.com/foo")
|
// tracer := global.Tracer("example.com/foo")
|
||||||
func TracerProvider() trace.TracerProvider {
|
func GetTracerProvider() trace.TracerProvider {
|
||||||
return internal.TracerProvider()
|
return global.TracerProvider()
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetTracerProvider registers `tp` as the global trace provider.
|
// SetTracerProvider registers `tp` as the global trace provider.
|
||||||
func SetTracerProvider(tp trace.TracerProvider) {
|
func SetTracerProvider(tp trace.TracerProvider) {
|
||||||
internal.SetTracerProvider(tp)
|
global.SetTracerProvider(tp)
|
||||||
}
|
}
|
@ -12,12 +12,11 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package global_test
|
package otel
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/global"
|
|
||||||
"go.opentelemetry.io/otel/internal/trace/noop"
|
"go.opentelemetry.io/otel/internal/trace/noop"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
@ -33,10 +32,10 @@ func (*testTracerProvider) Tracer(_ string, _ ...trace.TracerOption) trace.Trace
|
|||||||
func TestMultipleGlobalTracerProvider(t *testing.T) {
|
func TestMultipleGlobalTracerProvider(t *testing.T) {
|
||||||
p1 := testTracerProvider{}
|
p1 := testTracerProvider{}
|
||||||
p2 := trace.NewNoopTracerProvider()
|
p2 := trace.NewNoopTracerProvider()
|
||||||
global.SetTracerProvider(&p1)
|
SetTracerProvider(&p1)
|
||||||
global.SetTracerProvider(p2)
|
SetTracerProvider(p2)
|
||||||
|
|
||||||
got := global.TracerProvider()
|
got := GetTracerProvider()
|
||||||
want := p2
|
want := p2
|
||||||
if got != want {
|
if got != want {
|
||||||
t.Fatalf("TracerProvider: got %p, want %p\n", got, want)
|
t.Fatalf("TracerProvider: got %p, want %p\n", got, want)
|
@ -12,12 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
// Package opentelemetry contains Go support for OpenTelemetry.
|
package otel // import "go.opentelemetry.io/otel"
|
||||||
//
|
|
||||||
// This package is currently in a pre-GA phase. Backwards incompatible changes
|
|
||||||
// may be introduced in subsequent minor version releases as we work to track
|
|
||||||
// the evolving OpenTelemetry specification and user feedback.
|
|
||||||
package opentelemetry // import "go.opentelemetry.io/otel/sdk"
|
|
||||||
|
|
||||||
// Version is the current release version of OpenTelemetry in use.
|
// Version is the current release version of OpenTelemetry in use.
|
||||||
func Version() string {
|
func Version() string {
|
Loading…
x
Reference in New Issue
Block a user