Improve serve mux path

This commit is contained in:
2025-12-23 11:10:13 -05:00
parent 5201341251
commit 7cc4e7831e
2 changed files with 23 additions and 9 deletions

View File

@@ -59,17 +59,30 @@ func prepHTTPServer(opts *opts.AppHTTP) *http.Server {
// Inject extra handlers if given // Inject extra handlers if given
// Used for grpc-gateway runtime.ServeMux handlers // Used for grpc-gateway runtime.ServeMux handlers
for _, h := range opts.Handlers { for _, h := range opts.Handlers {
var servePath string
if h.Pattern != "" && h.Prefix != "" {
l.Fatal().Str("ExactPath", h.Pattern).Str("Prefix", h.Prefix).
Msg("Can't have both pattern and prefix match for http handler")
}
if h.Prefix != "" {
// prefix must end in / to route sub-paths // prefix must end in / to route sub-paths
if !strings.HasSuffix(h.Prefix, "/") { if !strings.HasSuffix(h.Prefix, "/") {
h.Prefix = h.Prefix + "/" h.Prefix = h.Prefix + "/"
} }
servePath = h.Prefix
// if enabled, the path prefix is stripped before // if enabled, the path prefix is stripped before
// requests are sent to the handler // requests are sent to the handler
if h.StripPrefix { if h.StripPrefix {
h.Handler = http.StripPrefix(h.Prefix[:len(h.Prefix)-1], h.Handler) h.Handler = http.StripPrefix(h.Prefix[:len(h.Prefix)-1], h.Handler)
} }
mux.Handle(h.Prefix, otelhttp.WithRouteTag(h.Prefix, h.Handler)) } else {
servePath = h.Pattern
}
mux.Handle(h.Prefix, otelhttp.WithRouteTag(servePath, h.Handler))
} }
// Add OTEL instrumentation, filter noise, set span names // Add OTEL instrumentation, filter noise, set span names

View File

@@ -22,7 +22,8 @@ type HTTPFunc struct {
} }
type HTTPHandler struct { type HTTPHandler struct {
Prefix string // path prefix under which to serve this handler/mux Prefix string // path prefix under which to serve this handler/mux, used for convenience
Pattern string // pattern match
StripPrefix bool // strip path before sending to handler/mux StripPrefix bool // strip path before sending to handler/mux
Handler http.Handler Handler http.Handler
} }