mirror of
https://github.com/go-micro/go-micro.git
synced 2025-07-06 22:35:51 +02:00
31 lines
938 B
Go
31 lines
938 B
Go
package datadog
|
|
|
|
import (
|
|
"context"
|
|
|
|
log "go-micro.dev/v4/logger"
|
|
"go-micro.dev/v4/metadata"
|
|
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
|
|
)
|
|
|
|
// StartSpanFromContext returns a new span with the given operation name and options. If a span
|
|
// is found in the context, it will be used as the parent of the resulting span.
|
|
func StartSpanFromContext(ctx context.Context, operationName string, opts ...tracer.StartSpanOption) (tracer.Span, context.Context) {
|
|
md, ok := metadata.FromContext(ctx)
|
|
if !ok {
|
|
md = make(map[string]string)
|
|
}
|
|
|
|
if spanCtx, err := tracer.Extract(tracer.TextMapCarrier(md)); err == nil {
|
|
opts = append(opts, tracer.ChildOf(spanCtx))
|
|
}
|
|
|
|
span, ctx := tracer.StartSpanFromContext(ctx, operationName, opts...)
|
|
|
|
if err := tracer.Inject(span.Context(), tracer.TextMapCarrier(md)); err != nil {
|
|
log.Errorf("error while injecting trace to context: %s\n", err)
|
|
}
|
|
|
|
return span, metadata.NewContext(ctx, md)
|
|
}
|