diff --git a/go.mod b/go.mod index f6af100..1cdfe04 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.20 require ( github.com/opentracing/opentracing-go v1.2.0 - go.unistack.org/micro/v4 v4.0.10 + go.unistack.org/micro/v4 v4.0.13 ) require github.com/stretchr/testify v1.8.3 // indirect diff --git a/go.sum b/go.sum index d6ed6dc..75338ca 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -go.unistack.org/micro/v4 v4.0.10 h1:uKqED/n/zrJd4NGxm9OOUw26UMibgYFhf89MOTnM1go= -go.unistack.org/micro/v4 v4.0.10/go.mod h1:QT3gOIE4qGgBiQGm2Pad/62Sl5R53QfrgYHD448aX14= +go.unistack.org/micro/v4 v4.0.13 h1:wyprk+KNAv/zR6bri6p6ucmXcJ9WyZ/vzru4zjPd8dA= +go.unistack.org/micro/v4 v4.0.13/go.mod h1:ZDgU9931vm2l7X6RN/6UuwRIVp24GRdmQ7dKmegArk4= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/opentracing.go b/opentracing.go index d5019e7..c070054 100644 --- a/opentracing.go +++ b/opentracing.go @@ -65,6 +65,25 @@ type otSpan struct { statusMsg string } +type spanContext interface { + TraceID() fmt.Stringer + SpanID() fmt.Stringer +} + +func (os *otSpan) TraceID() string { + if spanctx, ok := os.span.Context().(spanContext); ok { + return spanctx.TraceID().String() + } + return "" +} + +func (os *otSpan) SpanID() string { + if spanctx, ok := os.span.Context().(spanContext); ok { + return spanctx.SpanID().String() + } + return "" +} + func (os *otSpan) SetStatus(st tracer.SpanStatus, msg string) { os.status = st os.statusMsg = msg @@ -78,6 +97,10 @@ func (os *otSpan) Tracer() tracer.Tracer { return &otTracer{tracer: os.span.Tracer()} } +func (os *otSpan) AddLogs(kv ...interface{}) { + os.span.LogKV(kv...) +} + func (os *otSpan) Finish(opts ...options.Option) { if len(os.opts.Labels)%2 != 0 { os.opts.Labels = os.opts.Labels[:len(os.opts.Labels)-1] diff --git a/opentracing_test.go b/opentracing_test.go deleted file mode 100644 index 858a4ab..0000000 --- a/opentracing_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package opentracing - -import ( - "context" - "sync" - "testing" - - opentracing "github.com/opentracing/opentracing-go" - "go.unistack.org/micro/v4/metadata" -) - -func TestStartSpanFromIncomingContext(t *testing.T) { - md := metadata.New(2) - md.Set("key", "val") - - var g sync.WaitGroup - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - ctx = metadata.NewIncomingContext(ctx, md) - - tracer := opentracing.GlobalTracer() - - g.Add(8000) - cherr := make(chan error) - for i := 0; i < 8000; i++ { - go func() { - defer g.Done() - _, sp, err := startSpanFromIncomingContext(ctx, tracer, "test") - if err != nil { - cherr <- err - } - sp.Finish() - }() - } - - for { - select { - default: - g.Wait() - close(cherr) - case err, ok := <-cherr: - if err != nil { - t.Fatal(err) - } else if !ok { - return - } - } - } -}