mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
Move internal/otelutil to daemon/internal/otelutil
Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
@@ -1,43 +0,0 @@
|
||||
package otelutil
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/containerd/log"
|
||||
"go.opentelemetry.io/otel/baggage"
|
||||
)
|
||||
|
||||
// TriggerKey is the key used for the 'trigger' member in the baggage. It is
|
||||
// used to know what triggered a code path (e.g. API call, libnet init, etc...)
|
||||
const TriggerKey = "trigger"
|
||||
|
||||
// MustNewBaggage creates an OTel Baggage containing the provided members. It
|
||||
// panics if the baggage cannot be created.
|
||||
//
|
||||
// DO NOT USE this function with dynamic values.
|
||||
func MustNewBaggage(members ...baggage.Member) baggage.Baggage {
|
||||
b, err := baggage.New(members...)
|
||||
if err != nil {
|
||||
log.G(context.Background()).WithFields(log.Fields{
|
||||
"error": err,
|
||||
"members": members,
|
||||
}).Fatal("OTel baggage creation failure")
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
// MustNewMemberRaw creates an OTel Baggage member with the provided key and
|
||||
// value. It panics if the key or value aren't valid UTF-8 strings.
|
||||
//
|
||||
// DO NOT USE this function with dynamic key/value.
|
||||
func MustNewMemberRaw(key, value string) baggage.Member {
|
||||
m, err := baggage.NewMemberRaw(key, value)
|
||||
if err != nil {
|
||||
log.G(context.Background()).WithFields(log.Fields{
|
||||
"error": err,
|
||||
"key": key,
|
||||
"value": value,
|
||||
}).Fatal("OTel baggage member creation failure")
|
||||
}
|
||||
return m
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
package otelutil
|
||||
|
||||
import (
|
||||
"os"
|
||||
)
|
||||
|
||||
const (
|
||||
traceParentKey = "traceparent"
|
||||
traceStateKey = "tracestate"
|
||||
|
||||
// See https://github.com/open-telemetry/opentelemetry-specification/issues/740
|
||||
// and https://github.com/open-telemetry/oteps/pull/258.
|
||||
traceParentEnvVar = "TRACEPARENT"
|
||||
traceStateEnvVar = "TRACESTATE"
|
||||
)
|
||||
|
||||
type EnvironCarrier struct {
|
||||
TraceParent, TraceState string
|
||||
}
|
||||
|
||||
// Get returns the value associated with the passed key.
|
||||
func (c *EnvironCarrier) Get(key string) string {
|
||||
switch key {
|
||||
case traceParentKey:
|
||||
return c.TraceParent
|
||||
case traceStateKey:
|
||||
return c.TraceState
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// Set stores the key-value pair.
|
||||
func (c *EnvironCarrier) Set(key, value string) {
|
||||
switch key {
|
||||
case traceParentKey:
|
||||
c.TraceParent = value
|
||||
case traceStateKey:
|
||||
c.TraceState = value
|
||||
}
|
||||
// Other keys are not supported at this time.
|
||||
}
|
||||
|
||||
// Keys lists the keys stored in this carrier.
|
||||
func (c *EnvironCarrier) Keys() []string {
|
||||
var k []string
|
||||
if c.TraceParent != "" {
|
||||
k = append(k, traceParentKey)
|
||||
}
|
||||
if c.TraceState != "" {
|
||||
k = append(k, traceStateKey)
|
||||
}
|
||||
return k
|
||||
}
|
||||
|
||||
func (c *EnvironCarrier) Environ() []string {
|
||||
var env []string
|
||||
if c.TraceParent != "" {
|
||||
env = append(env, traceParentEnvVar+"="+c.TraceParent)
|
||||
}
|
||||
if c.TraceState != "" {
|
||||
env = append(env, traceStateEnvVar+"="+c.TraceState)
|
||||
}
|
||||
return env
|
||||
}
|
||||
|
||||
func PropagateFromEnvironment() *EnvironCarrier {
|
||||
return &EnvironCarrier{
|
||||
TraceParent: os.Getenv(traceParentEnvVar),
|
||||
TraceState: os.Getenv(traceStateEnvVar),
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package otelutil
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/containerd/log"
|
||||
"github.com/moby/buildkit/util/tracing/detect"
|
||||
"go.opentelemetry.io/contrib/processors/baggagecopy"
|
||||
"go.opentelemetry.io/otel/baggage"
|
||||
"go.opentelemetry.io/otel/sdk/resource"
|
||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
"go.opentelemetry.io/otel/trace/noop"
|
||||
)
|
||||
|
||||
func NewTracerProvider(ctx context.Context, allowNoop bool) (trace.TracerProvider, func(context.Context) error) {
|
||||
noopShutdown := func(ctx context.Context) error { return nil }
|
||||
|
||||
exp, err := detect.NewSpanExporter(ctx)
|
||||
if err != nil {
|
||||
log.G(ctx).WithError(err).Warn("Failed to initialize tracing, skipping")
|
||||
if allowNoop {
|
||||
return noop.NewTracerProvider(), noopShutdown
|
||||
}
|
||||
}
|
||||
|
||||
if allowNoop && detect.IsNoneSpanExporter(exp) {
|
||||
log.G(ctx).Info("OTEL tracing is not configured, using no-op tracer provider")
|
||||
return noop.NewTracerProvider(), noopShutdown
|
||||
}
|
||||
|
||||
tp := sdktrace.NewTracerProvider(
|
||||
sdktrace.WithResource(resource.Default()),
|
||||
sdktrace.WithSyncer(detect.Recorder),
|
||||
sdktrace.WithBatcher(exp),
|
||||
sdktrace.WithSpanProcessor(baggagecopy.NewSpanProcessor(func(member baggage.Member) bool { return true })),
|
||||
)
|
||||
return tp, tp.Shutdown
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package otelutil
|
||||
|
||||
import (
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// RecordStatus records the status of a span based on the error provided.
|
||||
//
|
||||
// If err is nil, the span status is unmodified. If err is not nil, the span
|
||||
// takes status Error, and the error message is recorded.
|
||||
func RecordStatus(span trace.Span, err error) {
|
||||
if err != nil {
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, err.Error())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user