package detect
import (
"context"
"os"
"github.com/moby/buildkit/util/appcontext"
"go.opentelemetry.io/otel/propagation"
)
const (
traceparentHeader = "traceparent"
tracestateHeader = "tracestate"
)
func init ( ) {
appcontext . Register ( initContext )
}
func initContext ( ctx context . Context ) context . Context {
// open-telemetry/opentelemetry-specification#740
parent := os . Getenv ( "TRACEPARENT" )
state := os . Getenv ( "TRACESTATE" )
if parent != "" {
tc := propagation . TraceContext { }
return tc . Extract ( ctx , & textMap { parent : parent , state : state } )
}
// deprecated: removed in v0.11.0
// previously defined in https://github.com/open-telemetry/opentelemetry-swift/blob/4ea467ed4b881d7329bf2254ca7ed7f2d9d6e1eb/Sources/OpenTelemetrySdk/Trace/Propagation/EnvironmentContextPropagator.swift#L14-L15
parent = os . Getenv ( "OTEL_TRACE_PARENT" )
state = os . Getenv ( "OTEL_TRACE_STATE" )
if parent == "" {
return ctx
}
tc := propagation . TraceContext { }
return tc . Extract ( ctx , & textMap { parent : parent , state : state } )
}
type textMap struct {
parent string
state string
}
func ( tm * textMap ) Get ( key string ) string {
switch key {
case traceparentHeader :
return tm . parent
case tracestateHeader :
return tm . state
default :
return ""
}
}
func ( tm * textMap ) Set ( key string , value string ) {
}
func ( tm * textMap ) Keys ( ) [ ] string {
return [ ] string { traceparentHeader , tracestateHeader }
}