Skip to content

Commit

Permalink
feat: add trace.SpanIDFromContext and trace.TraceIDFromContext
Browse files Browse the repository at this point in the history
  • Loading branch information
kevwan committed Dec 1, 2022
1 parent 90828a0 commit 4ffab6f
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 21 deletions.
25 changes: 25 additions & 0 deletions core/internal/trace/trace.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package trace

import (
"context"

"go.opentelemetry.io/otel/trace"
)

func SpanIDFromContext(ctx context.Context) string {
spanCtx := trace.SpanContextFromContext(ctx)
if spanCtx.HasSpanID() {
return spanCtx.SpanID().String()
}

return ""
}

func TraceIDFromContext(ctx context.Context) string {
spanCtx := trace.SpanContextFromContext(ctx)
if spanCtx.HasTraceID() {
return spanCtx.TraceID().String()
}

return ""
}
32 changes: 32 additions & 0 deletions core/internal/trace/trace_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package trace

import (
"context"
"net/http"
"net/http/httptest"
"testing"

"github.com/stretchr/testify/assert"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
oteltrace "go.opentelemetry.io/otel/trace"
)

func TestSpanIDFromContext(t *testing.T) {
tracer := sdktrace.NewTracerProvider().Tracer("test")
ctx, span := tracer.Start(
context.Background(),
"foo",
oteltrace.WithSpanKind(oteltrace.SpanKindClient),
oteltrace.WithAttributes(semconv.HTTPClientAttributesFromHTTPRequest(httptest.NewRequest(http.MethodGet, "/", nil))...),
)
defer span.End()

assert.NotEmpty(t, TraceIDFromContext(ctx))
assert.NotEmpty(t, SpanIDFromContext(ctx))
}

func TestSpanIDFromContextEmpty(t *testing.T) {
assert.Empty(t, TraceIDFromContext(context.Background()))
assert.Empty(t, SpanIDFromContext(context.Background()))
}
24 changes: 3 additions & 21 deletions core/logx/richlogger.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import (
"fmt"
"time"

"github.com/zeromicro/go-zero/core/internal/trace"
"github.com/zeromicro/go-zero/core/timex"
"go.opentelemetry.io/otel/trace"
)

// WithCallerSkip returns a Logger with given caller skip.
Expand Down Expand Up @@ -136,12 +136,12 @@ func (l *richLogger) buildFields(fields ...LogField) []LogField {
return fields
}

traceID := traceIdFromContext(l.ctx)
traceID := trace.TraceIDFromContext(l.ctx)
if len(traceID) > 0 {
fields = append(fields, Field(traceKey, traceID))
}

spanID := spanIdFromContext(l.ctx)
spanID := trace.SpanIDFromContext(l.ctx)
if len(spanID) > 0 {
fields = append(fields, Field(spanKey, spanID))
}
Expand Down Expand Up @@ -179,21 +179,3 @@ func (l *richLogger) slow(v interface{}, fields ...LogField) {
getWriter().Slow(v, l.buildFields(fields...)...)
}
}

func spanIdFromContext(ctx context.Context) string {
spanCtx := trace.SpanContextFromContext(ctx)
if spanCtx.HasSpanID() {
return spanCtx.SpanID().String()
}

return ""
}

func traceIdFromContext(ctx context.Context) string {
spanCtx := trace.SpanContextFromContext(ctx)
if spanCtx.HasTraceID() {
return spanCtx.TraceID().String()
}

return ""
}
8 changes: 8 additions & 0 deletions core/trace/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,21 @@ import (
"net"
"strings"

ztrace "github.com/zeromicro/go-zero/core/internal/trace"
"go.opentelemetry.io/otel/attribute"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
"google.golang.org/grpc/peer"
)

const localhost = "127.0.0.1"

var (
// SpanIDFromContext returns the span id from ctx.
SpanIDFromContext = ztrace.SpanIDFromContext
// TraceIDFromContext returns the trace id from ctx.
TraceIDFromContext = ztrace.TraceIDFromContext
)

// PeerFromCtx returns the peer from ctx.
func PeerFromCtx(ctx context.Context) string {
p, ok := peer.FromContext(ctx)
Expand Down

0 comments on commit 4ffab6f

Please sign in to comment.