Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
9b553cfa62 | |||
65ac3aff56 | |||
e9933df477 | |||
905910e8ce |
8
go.mod
8
go.mod
@@ -1,9 +1,11 @@
|
||||
module go.unistack.org/micro-tracer-opentracing/v3
|
||||
|
||||
go 1.20
|
||||
go 1.21
|
||||
|
||||
toolchain go1.22.2
|
||||
|
||||
require (
|
||||
github.com/opentracing/opentracing-go v1.2.0
|
||||
go.opentelemetry.io/otel v1.24.0
|
||||
go.unistack.org/micro/v3 v3.10.43
|
||||
go.opentelemetry.io/otel v1.26.0
|
||||
go.unistack.org/micro/v3 v3.10.77
|
||||
)
|
||||
|
14
go.sum
14
go.sum
@@ -1,15 +1,19 @@
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
|
||||
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||
go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
|
||||
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
|
||||
go.unistack.org/micro/v3 v3.10.43 h1:GjUgu1lSKrhIov67jZQg6hUVUw0xZ6+ub8s6JRu6uj4=
|
||||
go.unistack.org/micro/v3 v3.10.43/go.mod h1:CSmEf5ddmft94MyKHnUSMM0W5dpmmTVbgImbgQWV5Ak=
|
||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs=
|
||||
go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4=
|
||||
go.unistack.org/micro/v3 v3.10.77 h1:nn731y84q3S8a4UgpVdC/wN9cs30ruZeH81rKw6XcUc=
|
||||
go.unistack.org/micro/v3 v3.10.77/go.mod h1:erMgt3Bl7vQQ0e9UpQyR5NlLiZ9pKeEJ9+1tfYFaqUg=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
@@ -49,6 +49,9 @@ type spanContext interface {
|
||||
|
||||
func (t *otTracer) Start(ctx context.Context, name string, opts ...tracer.SpanOption) (context.Context, tracer.Span) {
|
||||
options := tracer.NewSpanOptions(opts...)
|
||||
if len(options.Labels)%2 != 0 {
|
||||
options.Labels = options.Labels[:len(options.Labels)-1]
|
||||
}
|
||||
var span ot.Span
|
||||
switch options.Kind {
|
||||
case tracer.SpanKindUnspecified:
|
||||
@@ -76,8 +79,6 @@ func (t *otTracer) Start(ctx context.Context, name string, opts ...tracer.SpanOp
|
||||
}
|
||||
}
|
||||
|
||||
sp.AddLabels(options.Labels...)
|
||||
|
||||
return tracer.NewSpanContext(ctx, sp), sp
|
||||
}
|
||||
|
||||
@@ -96,6 +97,8 @@ type otSpan struct {
|
||||
opts tracer.SpanOptions
|
||||
status tracer.SpanStatus
|
||||
statusMsg string
|
||||
labels []interface{}
|
||||
finished bool
|
||||
}
|
||||
|
||||
func (os *otSpan) TraceID() string {
|
||||
@@ -120,11 +123,28 @@ func (os *otSpan) Tracer() tracer.Tracer {
|
||||
}
|
||||
|
||||
func (os *otSpan) Finish(opts ...tracer.SpanOption) {
|
||||
if os.finished {
|
||||
return
|
||||
}
|
||||
|
||||
options := os.opts
|
||||
|
||||
options.Status = os.status
|
||||
options.StatusMsg = os.statusMsg
|
||||
options.Labels = append(options.Labels, os.labels...)
|
||||
|
||||
for _, o := range opts {
|
||||
o(&options)
|
||||
}
|
||||
|
||||
if !options.Record {
|
||||
return
|
||||
}
|
||||
|
||||
if len(options.Labels)%2 != 0 {
|
||||
options.Labels = options.Labels[:len(options.Labels)-1]
|
||||
}
|
||||
|
||||
l := len(options.Labels)
|
||||
for idx := 0; idx < l; idx++ {
|
||||
switch lt := options.Labels[idx].(type) {
|
||||
@@ -138,12 +158,15 @@ func (os *otSpan) Finish(opts ...tracer.SpanOption) {
|
||||
}
|
||||
}
|
||||
|
||||
if os.status == tracer.SpanStatusError {
|
||||
if options.Status == tracer.SpanStatusError {
|
||||
os.span.SetTag("error", true)
|
||||
os.span.LogKV("error", os.statusMsg)
|
||||
os.span.LogKV("error", options.StatusMsg)
|
||||
}
|
||||
|
||||
os.span.SetTag("span.kind", options.Kind)
|
||||
os.span.Finish()
|
||||
|
||||
os.finished = true
|
||||
}
|
||||
|
||||
func (os *otSpan) AddEvent(name string, opts ...tracer.EventOption) {
|
||||
@@ -171,19 +194,7 @@ func (os *otSpan) Kind() tracer.SpanKind {
|
||||
}
|
||||
|
||||
func (os *otSpan) AddLabels(labels ...interface{}) {
|
||||
l := len(labels)
|
||||
|
||||
for idx := 0; idx < l; idx++ {
|
||||
switch lt := labels[idx].(type) {
|
||||
case attribute.KeyValue:
|
||||
os.span.SetTag(string(lt.Key), lt.Value.AsInterface())
|
||||
case string:
|
||||
if l > idx+1 {
|
||||
os.span.SetTag(lt, labels[idx+1])
|
||||
idx++
|
||||
}
|
||||
}
|
||||
}
|
||||
os.labels = append(os.labels, labels...)
|
||||
}
|
||||
|
||||
func NewTracer(opts ...tracer.Option) *otTracer {
|
||||
|
@@ -2,6 +2,7 @@ package opentracing
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/opentracing/opentracing-go/mocktracer"
|
||||
@@ -46,8 +47,15 @@ func TestTraceTags(t *testing.T) {
|
||||
var sp tracer.Span
|
||||
|
||||
ctx, sp = tr.Start(ctx, "test", tracer.WithSpanLabels("key", "val", "odd"))
|
||||
sp.Finish()
|
||||
|
||||
sp.Finish(tracer.WithSpanLabels("xkey", "xval"))
|
||||
_ = ctx
|
||||
msp := mtr.FinishedSpans()[0]
|
||||
t.Logf("mock span %#+v", msp.Tags())
|
||||
|
||||
if "val" != fmt.Sprintf("%v", msp.Tags()["key"]) {
|
||||
t.Fatal("mock span invalid")
|
||||
}
|
||||
|
||||
if "xval" != fmt.Sprintf("%v", msp.Tags()["xkey"]) {
|
||||
t.Fatalf("mock span invalid %#+v", msp)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user