Skip to content

Commit

Permalink
tracing: Support placeholders in span name (#5329)
Browse files Browse the repository at this point in the history
Fixes #5171
  • Loading branch information
davidfrickert committed Jan 25, 2023
1 parent 98867ac commit 9623102
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
14 changes: 11 additions & 3 deletions modules/caddyhttp/tracing/module_test.go
Expand Up @@ -98,7 +98,7 @@ func TestTracing_ServeHTTP_Propagation_Without_Initial_Headers(t *testing.T) {
SpanName: "mySpan",
}

req := httptest.NewRequest("GET", "https://example.com/foo", nil)
req := createRequestWithContext("GET", "https://example.com/foo")
w := httptest.NewRecorder()

var handler caddyhttp.HandlerFunc = func(writer http.ResponseWriter, request *http.Request) error {
Expand Down Expand Up @@ -128,7 +128,7 @@ func TestTracing_ServeHTTP_Propagation_With_Initial_Headers(t *testing.T) {
SpanName: "mySpan",
}

req := httptest.NewRequest("GET", "https://example.com/foo", nil)
req := createRequestWithContext("GET", "https://example.com/foo")
req.Header.Set("traceparent", "00-11111111111111111111111111111111-1111111111111111-01")
w := httptest.NewRecorder()

Expand Down Expand Up @@ -159,7 +159,7 @@ func TestTracing_ServeHTTP_Next_Error(t *testing.T) {
SpanName: "mySpan",
}

req := httptest.NewRequest("GET", "https://example.com/foo", nil)
req := createRequestWithContext("GET", "https://example.com/foo")
w := httptest.NewRecorder()

expectErr := errors.New("test error")
Expand All @@ -180,3 +180,11 @@ func TestTracing_ServeHTTP_Next_Error(t *testing.T) {
t.Errorf("expected error, got: %v", err)
}
}

func createRequestWithContext(method string, url string) *http.Request {
r, _ := http.NewRequest(method, url, nil)
repl := caddy.NewReplacer()
ctx := context.WithValue(r.Context(), caddy.ReplacerCtxKey, repl)
r = r.WithContext(ctx)
return r
}
13 changes: 12 additions & 1 deletion modules/caddyhttp/tracing/tracer.go
Expand Up @@ -69,7 +69,13 @@ func newOpenTelemetryWrapper(
sdktrace.WithResource(res),
)

ot.handler = otelhttp.NewHandler(http.HandlerFunc(ot.serveHTTP), ot.spanName, otelhttp.WithTracerProvider(tracerProvider), otelhttp.WithPropagators(ot.propagators))
ot.handler = otelhttp.NewHandler(http.HandlerFunc(ot.serveHTTP),
ot.spanName,
otelhttp.WithTracerProvider(tracerProvider),
otelhttp.WithPropagators(ot.propagators),
otelhttp.WithSpanNameFormatter(ot.spanNameFormatter),
)

return ot, nil
}

Expand Down Expand Up @@ -106,3 +112,8 @@ func (ot *openTelemetryWrapper) newResource(
semconv.WebEngineVersionKey.String(webEngineVersion),
))
}

// spanNameFormatter performs the replacement of placeholders in the span name
func (ot *openTelemetryWrapper) spanNameFormatter(operation string, r *http.Request) string {
return r.Context().Value(caddy.ReplacerCtxKey).(*caddy.Replacer).ReplaceAll(operation, "")
}

0 comments on commit 9623102

Please sign in to comment.