3 Commits

Author SHA1 Message Date
7cc4e7831e Improve serve mux path 2025-12-23 11:10:13 -05:00
5201341251 add default tag name 2025-12-22 15:37:55 -05:00
854819d966 upgrade go 2025-09-02 13:20:21 -04:00
5 changed files with 27 additions and 11 deletions

View File

@@ -6,6 +6,8 @@
* chore: Add new test suites for logging, OpenTelemetry initialization, gRPC server setup, and HTTP server setup.
* chore: Enhance configuration loading tests to cover file and environment variable sources.
* chore: Improve config test comparison robustness using JSON marshaling.
## v0.12.3
* chore: Upgrade to go 1.25
# v0.12.0
* feat: Add support for excluding HTTP request paths from logging using configurable regular expressions.

2
go.mod
View File

@@ -1,6 +1,6 @@
module gitea.libretechconsulting.com/rmcguire/go-app
go 1.24.2
go 1.25
require (
buf.build/go/protovalidate v0.14.0

View File

@@ -63,7 +63,7 @@ func loadConfig(configPath string) (*AppConfig, error) {
}
}
if err := env.Parse(&cfg); err != nil {
if err := env.ParseWithOptions(&cfg, env.Options{DefaultValueTagName: "default"}); err != nil {
return nil, fmt.Errorf("could not parse environment variables: %w", err)
}

View File

@@ -59,17 +59,30 @@ func prepHTTPServer(opts *opts.AppHTTP) *http.Server {
// Inject extra handlers if given
// Used for grpc-gateway runtime.ServeMux handlers
for _, h := range opts.Handlers {
// prefix must end in / to route sub-paths
if !strings.HasSuffix(h.Prefix, "/") {
h.Prefix = h.Prefix + "/"
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 enabled, the path prefix is stripped before
// requests are sent to the handler
if h.StripPrefix {
h.Handler = http.StripPrefix(h.Prefix[:len(h.Prefix)-1], h.Handler)
if h.Prefix != "" {
// prefix must end in / to route sub-paths
if !strings.HasSuffix(h.Prefix, "/") {
h.Prefix = h.Prefix + "/"
}
servePath = h.Prefix
// if enabled, the path prefix is stripped before
// requests are sent to the handler
if h.StripPrefix {
h.Handler = http.StripPrefix(h.Prefix[:len(h.Prefix)-1], h.Handler)
}
} else {
servePath = h.Pattern
}
mux.Handle(h.Prefix, otelhttp.WithRouteTag(h.Prefix, h.Handler))
mux.Handle(h.Prefix, otelhttp.WithRouteTag(servePath, h.Handler))
}
// Add OTEL instrumentation, filter noise, set span names

View File

@@ -22,7 +22,8 @@ type HTTPFunc 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
Handler http.Handler
}