Skip to content

Commit cbd8986

Browse files
authored
feat(trace): Added CtxTracer function and updated dependencies (#123)
1 parent 3fcc8be commit cbd8986

File tree

6 files changed

+96
-465
lines changed

6 files changed

+96
-465
lines changed

trace/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,10 @@ This module provides the `CtxTracerProvider()` function that allow to extract th
7979
a `context.Context`.
8080

8181
If no tracer provider is found in context,
82-
the [global tracer](https://github.com/open-telemetry/opentelemetry-go/blob/main/trace.go) will be used.
82+
the [global tracer provider](https://github.com/open-telemetry/opentelemetry-go/blob/main/trace.go) will be used.
83+
84+
This module also provides the `CtxTracer()` function that allow to create a tracer (named `yokai`) from the tracer provider got from
85+
a `context.Context`.
8386

8487
#### Span processors
8588

trace/context.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ import (
77
"go.opentelemetry.io/otel/trace"
88
)
99

10+
// TracerName is the default tracer name.
11+
const TracerName = "yokai"
12+
1013
// CtxKey is a contextual struct key.
1114
type CtxKey struct{}
1215

@@ -27,3 +30,10 @@ func CtxTracerProvider(ctx context.Context) trace.TracerProvider {
2730
return otel.GetTracerProvider()
2831
}
2932
}
33+
34+
// CtxTracer returns the default contextual [OTEL Tracer] from a provided context (or returns the default one if missing).
35+
//
36+
// [OTEL Tracer]: https://go.opentelemetry.io/otel/trace
37+
func CtxTracer(ctx context.Context) trace.Tracer {
38+
return CtxTracerProvider(ctx).Tracer(TracerName)
39+
}

trace/context_test.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import (
88
"github.com/ankorstore/yokai/trace/tracetest"
99
"github.com/stretchr/testify/assert"
1010
"go.opentelemetry.io/otel"
11+
oteltrace "go.opentelemetry.io/otel/trace"
1112
)
1213

13-
func TestCtxTracerProviderWithDefaultTracerProvider(t *testing.T) {
14+
func TestCtxTracerProviderWithDefaultGlobalTracerProvider(t *testing.T) {
1415
t.Parallel()
1516

1617
assert.Equal(t, otel.GetTracerProvider(), trace.CtxTracerProvider(context.Background()))
@@ -29,3 +30,17 @@ func TestCtxTracerProviderWithCustomTracerProvider(t *testing.T) {
2930
ctx := trace.WithContext(context.Background(), tracerProvider)
3031
assert.Equal(t, tracerProvider, trace.CtxTracerProvider(ctx))
3132
}
33+
34+
func TestCtxTracer(t *testing.T) {
35+
t.Parallel()
36+
37+
exporter := tracetest.NewDefaultTestTraceExporter()
38+
39+
tracerProvider, err := trace.NewDefaultTracerProviderFactory().Create(
40+
trace.WithSpanProcessor(trace.NewTestSpanProcessor(exporter)),
41+
)
42+
assert.NoError(t, err)
43+
44+
ctx := trace.WithContext(context.Background(), tracerProvider)
45+
assert.Implements(t, (*oteltrace.Tracer)(nil), trace.CtxTracer(ctx))
46+
}

trace/go.mod

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,31 @@ module github.com/ankorstore/yokai/trace
33
go 1.20
44

55
require (
6-
github.com/stretchr/testify v1.8.4
7-
go.opentelemetry.io/otel v1.16.0
8-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0
9-
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.16.0
10-
go.opentelemetry.io/otel/sdk v1.16.0
11-
go.opentelemetry.io/otel/trace v1.16.0
12-
google.golang.org/grpc v1.56.2
6+
github.com/stretchr/testify v1.9.0
7+
go.opentelemetry.io/otel v1.24.0
8+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0
9+
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0
10+
go.opentelemetry.io/otel/sdk v1.24.0
11+
go.opentelemetry.io/otel/trace v1.24.0
12+
google.golang.org/grpc v1.62.1
1313
)
1414

1515
require (
1616
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
1717
github.com/davecgh/go-spew v1.1.1 // indirect
18-
github.com/go-logr/logr v1.2.4 // indirect
18+
github.com/go-logr/logr v1.4.1 // indirect
1919
github.com/go-logr/stdr v1.2.2 // indirect
20-
github.com/golang/protobuf v1.5.3 // indirect
21-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
20+
github.com/golang/protobuf v1.5.4 // indirect
21+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
2222
github.com/pmezard/go-difflib v1.0.0 // indirect
23-
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect
24-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 // indirect
25-
go.opentelemetry.io/otel/metric v1.16.0 // indirect
26-
go.opentelemetry.io/proto/otlp v0.19.0 // indirect
27-
golang.org/x/net v0.9.0 // indirect
28-
golang.org/x/sys v0.8.0 // indirect
29-
golang.org/x/text v0.9.0 // indirect
30-
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
31-
google.golang.org/protobuf v1.30.0 // indirect
23+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 // indirect
24+
go.opentelemetry.io/otel/metric v1.24.0 // indirect
25+
go.opentelemetry.io/proto/otlp v1.1.0 // indirect
26+
golang.org/x/net v0.22.0 // indirect
27+
golang.org/x/sys v0.18.0 // indirect
28+
golang.org/x/text v0.14.0 // indirect
29+
google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 // indirect
30+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240311173647-c811ad7063a7 // indirect
31+
google.golang.org/protobuf v1.33.0 // indirect
3232
gopkg.in/yaml.v3 v3.0.1 // indirect
3333
)

0 commit comments

Comments
 (0)