Skip to content

Commit 50dd8eb

Browse files
refactor: improve OTLP endpoint configuration handling
Change InitTracer to accept endpoint as parameter instead of reading from environment variable. This improves testability and follows separation of concerns. Changes: - InitTracer now takes endpoint as parameter: InitTracer(ctx, endpoint) - Remove confusing env var manipulation in cmd/build.go - Simplify test (no need to manipulate environment) - Make configuration flow clearer: flag → function parameter Benefits: - Easier to test (no env var side effects) - Clearer API (explicit parameter vs implicit env var) - Consistent with other reporters (e.g., SegmentReporter) - No circular dependency between flag default and env var Co-authored-by: Ona <no-reply@ona.com>
1 parent 0e0a067 commit 50dd8eb

File tree

3 files changed

+7
-22
lines changed

3 files changed

+7
-22
lines changed

cmd/build.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -325,13 +325,8 @@ func getBuildOpts(cmd *cobra.Command) ([]leeway.BuildOption, cache.LocalCache, f
325325
if otelEndpoint, err := cmd.Flags().GetString("otel-endpoint"); err != nil {
326326
log.Fatal(err)
327327
} else if otelEndpoint != "" {
328-
// Set environment variable for InitTracer if not already set
329-
if os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT") == "" {
330-
os.Setenv("OTEL_EXPORTER_OTLP_ENDPOINT", otelEndpoint)
331-
}
332-
333-
// Initialize tracer
334-
tp, err := telemetry.InitTracer(context.Background())
328+
// Initialize tracer with the provided endpoint
329+
tp, err := telemetry.InitTracer(context.Background(), otelEndpoint)
335330
if err != nil {
336331
log.WithError(err).Warn("failed to initialize OpenTelemetry tracer")
337332
} else {

pkg/leeway/telemetry/tracer.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@ import (
1717
)
1818

1919
// InitTracer initializes the OpenTelemetry tracer with OTLP HTTP exporter.
20-
// It reads the OTEL_EXPORTER_OTLP_ENDPOINT environment variable for the endpoint.
20+
// The endpoint parameter specifies the OTLP endpoint URL (e.g., "localhost:4318").
2121
// Returns the TracerProvider which must be shut down when done.
22-
func InitTracer(ctx context.Context) (*sdktrace.TracerProvider, error) {
23-
endpoint := os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
22+
func InitTracer(ctx context.Context, endpoint string) (*sdktrace.TracerProvider, error) {
2423
if endpoint == "" {
25-
return nil, xerrors.Errorf("OTEL_EXPORTER_OTLP_ENDPOINT not set")
24+
return nil, xerrors.Errorf("OTLP endpoint not provided")
2625
}
2726

2827
// Create OTLP HTTP exporter

pkg/leeway/telemetry/tracer_test.go

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package telemetry
22

33
import (
44
"context"
5-
"os"
65
"testing"
76

87
"go.opentelemetry.io/otel/trace"
@@ -168,17 +167,9 @@ func TestFormatTraceContext_Invalid(t *testing.T) {
168167
}
169168

170169
func TestInitTracer_NoEndpoint(t *testing.T) {
171-
// Save and restore environment
172-
oldEndpoint := os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
173-
defer func() {
174-
_ = os.Setenv("OTEL_EXPORTER_OTLP_ENDPOINT", oldEndpoint)
175-
}()
176-
177-
_ = os.Unsetenv("OTEL_EXPORTER_OTLP_ENDPOINT")
178-
179-
_, err := InitTracer(context.Background())
170+
_, err := InitTracer(context.Background(), "")
180171
if err == nil {
181-
t.Error("InitTracer() should fail when OTEL_EXPORTER_OTLP_ENDPOINT is not set")
172+
t.Error("InitTracer() should fail when endpoint is empty")
182173
}
183174
}
184175

0 commit comments

Comments
 (0)