diff --git a/coderd/coderd.go b/coderd/coderd.go index be2faa04c1..63c35bd1cb 100644 --- a/coderd/coderd.go +++ b/coderd/coderd.go @@ -198,8 +198,8 @@ func New(options *Options) *API { apps := func(r chi.Router) { r.Use( + tracing.Middleware(api.TracerProvider), httpmw.RateLimitPerMinute(options.APIRateLimit), - tracing.HTTPMW(api.TracerProvider), httpmw.ExtractAPIKey(options.Database, oauthConfigs, true), httpmw.ExtractUserParam(api.Database), // Extracts the from the url @@ -227,9 +227,9 @@ func New(options *Options) *API { }) }) r.Use( + tracing.Middleware(api.TracerProvider), // Specific routes can specify smaller limits. httpmw.RateLimitPerMinute(options.APIRateLimit), - tracing.HTTPMW(api.TracerProvider), ) r.Get("/", func(w http.ResponseWriter, r *http.Request) { httpapi.Write(w, http.StatusOK, codersdk.Response{ diff --git a/coderd/tracing/httpmw.go b/coderd/tracing/httpmw.go index 15f1189441..2cd1da2012 100644 --- a/coderd/tracing/httpmw.go +++ b/coderd/tracing/httpmw.go @@ -10,17 +10,21 @@ import ( "go.opentelemetry.io/otel/trace" ) -// HTTPMW adds tracing to http routes. -func HTTPMW(tracerProvider trace.TracerProvider) func(http.Handler) http.Handler { +// Middleware adds tracing to http routes. +func Middleware(tracerProvider trace.TracerProvider) func(http.Handler) http.Handler { + var tracer trace.Tracer + if tracerProvider != nil { + tracer = tracerProvider.Tracer(TracerName) + } return func(next http.Handler) http.Handler { return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { - if tracerProvider == nil { + if tracer == nil { next.ServeHTTP(rw, r) return } // start span with default span name. Span name will be updated to "method route" format once request finishes. - ctx, span := tracerProvider.Tracer("").Start(r.Context(), fmt.Sprintf("%s %s", r.Method, r.RequestURI)) + ctx, span := tracer.Start(r.Context(), fmt.Sprintf("%s %s", r.Method, r.RequestURI)) defer span.End() r = r.WithContext(ctx) @@ -59,5 +63,5 @@ func EndHTTPSpan(r *http.Request, status int, span trace.Span) { } func StartSpan(ctx context.Context, opts ...trace.SpanStartOption) (context.Context, trace.Span) { - return trace.SpanFromContext(ctx).TracerProvider().Tracer("").Start(ctx, FuncNameSkip(1), opts...) + return trace.SpanFromContext(ctx).TracerProvider().Tracer(TracerName).Start(ctx, FuncNameSkip(1), opts...) } diff --git a/coderd/tracing/util.go b/coderd/tracing/util.go index 8d8e44c3d9..cfa7c90160 100644 --- a/coderd/tracing/util.go +++ b/coderd/tracing/util.go @@ -5,6 +5,8 @@ import ( "strings" ) +const TracerName = "coderd" + func FuncName() string { fnpc, _, _, ok := runtime.Caller(1) if !ok {