package oc import ( "context" "github.com/Microsoft/hcsshim/internal/log" "go.opencensus.io/trace" ) var DefaultSampler = trace.AlwaysSample() // SetSpanStatus sets `span.SetStatus` to the proper status depending on `err`. If // `err` is `nil` assumes `trace.StatusCodeOk`. func SetSpanStatus(span *trace.Span, err error) { status := trace.Status{} if err != nil { status.Code = int32(toStatusCode(err)) status.Message = err.Error() } span.SetStatus(status) } // StartSpan wraps "go.opencensus.io/trace".StartSpan, but, if the span is sampling, // adds a log entry to the context that points to the newly created span. func StartSpan(ctx context.Context, name string, o ...trace.StartOption) (context.Context, *trace.Span) { ctx, s := trace.StartSpan(ctx, name, o...) return update(ctx, s) } // StartSpanWithRemoteParent wraps "go.opencensus.io/trace".StartSpanWithRemoteParent. // // See StartSpan for more information. func StartSpanWithRemoteParent(ctx context.Context, name string, parent trace.SpanContext, o ...trace.StartOption) (context.Context, *trace.Span) { ctx, s := trace.StartSpanWithRemoteParent(ctx, name, parent, o...) return update(ctx, s) } func update(ctx context.Context, s *trace.Span) (context.Context, *trace.Span) { if s.IsRecordingEvents() { ctx = log.UpdateContext(ctx) } return ctx, s } var WithServerSpanKind = trace.WithSpanKind(trace.SpanKindServer) var WithClientSpanKind = trace.WithSpanKind(trace.SpanKindClient) func spanKindToString(sk int) string { switch sk { case trace.SpanKindClient: return "client" case trace.SpanKindServer: return "server" default: return "" } }