| 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 "" |
| } |
| } |