span.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package oc
  2. import (
  3. "context"
  4. "github.com/Microsoft/hcsshim/internal/log"
  5. "go.opencensus.io/trace"
  6. )
  7. var DefaultSampler = trace.AlwaysSample()
  8. // SetSpanStatus sets `span.SetStatus` to the proper status depending on `err`. If
  9. // `err` is `nil` assumes `trace.StatusCodeOk`.
  10. func SetSpanStatus(span *trace.Span, err error) {
  11. status := trace.Status{}
  12. if err != nil {
  13. status.Code = int32(toStatusCode(err))
  14. status.Message = err.Error()
  15. }
  16. span.SetStatus(status)
  17. }
  18. // StartSpan wraps "go.opencensus.io/trace".StartSpan, but, if the span is sampling,
  19. // adds a log entry to the context that points to the newly created span.
  20. func StartSpan(ctx context.Context, name string, o ...trace.StartOption) (context.Context, *trace.Span) {
  21. ctx, s := trace.StartSpan(ctx, name, o...)
  22. return update(ctx, s)
  23. }
  24. // StartSpanWithRemoteParent wraps "go.opencensus.io/trace".StartSpanWithRemoteParent.
  25. //
  26. // See StartSpan for more information.
  27. func StartSpanWithRemoteParent(ctx context.Context, name string, parent trace.SpanContext, o ...trace.StartOption) (context.Context, *trace.Span) {
  28. ctx, s := trace.StartSpanWithRemoteParent(ctx, name, parent, o...)
  29. return update(ctx, s)
  30. }
  31. func update(ctx context.Context, s *trace.Span) (context.Context, *trace.Span) {
  32. if s.IsRecordingEvents() {
  33. ctx = log.UpdateContext(ctx)
  34. }
  35. return ctx, s
  36. }
  37. var WithServerSpanKind = trace.WithSpanKind(trace.SpanKindServer)
  38. var WithClientSpanKind = trace.WithSpanKind(trace.SpanKindClient)
  39. func spanKindToString(sk int) string {
  40. switch sk {
  41. case trace.SpanKindClient:
  42. return "client"
  43. case trace.SpanKindServer:
  44. return "server"
  45. default:
  46. return ""
  47. }
  48. }