@@ -2,6 +2,7 @@ package gzip
22
33import (
44 "net/http"
5+ "sync"
56
67 "github.com/klauspost/compress/gzhttp"
78 rrcontext "github.com/roadrunner-server/context"
@@ -20,14 +21,30 @@ type Plugin struct {
2021 prop propagation.TextMapPropagator
2122}
2223
24+ var onceDefault sync.Once //nolint:gochecknoglobals
25+ var defaultWrapper func (http.Handler ) http.HandlerFunc //nolint:gochecknoglobals
26+
27+ // GzipHandler allows to easily wrap an http handler with default settings.
28+ func gzipHandler (h http.Handler ) http.HandlerFunc {
29+ onceDefault .Do (func () {
30+ var err error
31+ defaultWrapper , err = gzhttp .NewWrapper (gzhttp .PreferZstd (false ), gzhttp .EnableZstd (false ), gzhttp .EnableGzip (true ))
32+ if err != nil {
33+ panic (err )
34+ }
35+ })
36+
37+ return defaultWrapper (h )
38+ }
39+
2340func (g * Plugin ) Init () error {
2441 g .prop = propagation .NewCompositeTextMapPropagator (propagation.TraceContext {}, propagation.Baggage {}, jprop.Jaeger {})
2542
2643 return nil
2744}
2845
2946func (g * Plugin ) Middleware (next http.Handler ) http.Handler {
30- return gzhttp . GzipHandler (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
47+ return gzipHandler (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
3148 if val , ok := r .Context ().Value (rrcontext .OtelTracerNameKey ).(string ); ok {
3249 tp := trace .SpanFromContext (r .Context ()).TracerProvider ()
3350 ctx , span := tp .Tracer (val , trace .WithSchemaURL (semconv .SchemaURL ),
0 commit comments