fix: traceability of the middleware plugins

This commit is contained in:
Ludovic Fernandez 2023-07-20 15:02:07 +02:00 committed by GitHub
parent 7792d197e6
commit 47faae25d7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 1 deletions

View file

@ -357,7 +357,7 @@ func (b *Builder) buildConstructor(ctx context.Context, middlewareName string) (
}
middleware = func(next http.Handler) (http.Handler, error) {
return plug(ctx, next)
return newTraceablePlugin(ctx, middlewareName, plug, next)
}
}

View file

@ -1,10 +1,14 @@
package middleware
import (
"context"
"errors"
"net/http"
"github.com/opentracing/opentracing-go/ext"
"github.com/traefik/traefik/v2/pkg/config/dynamic"
"github.com/traefik/traefik/v2/pkg/plugins"
"github.com/traefik/traefik/v2/pkg/tracing"
)
// PluginsBuilder the plugin's builder interface.
@ -31,3 +35,25 @@ func findPluginConfig(rawConfig map[string]dynamic.PluginConf) (string, map[stri
return pluginType, rawPluginConfig, nil
}
type traceablePlugin struct {
name string
h http.Handler
}
func newTraceablePlugin(ctx context.Context, name string, plug plugins.Constructor, next http.Handler) (*traceablePlugin, error) {
h, err := plug(ctx, next)
if err != nil {
return nil, err
}
return &traceablePlugin{name: name, h: h}, nil
}
func (s *traceablePlugin) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
s.h.ServeHTTP(rw, req)
}
func (s *traceablePlugin) GetTracingInformation() (string, ext.SpanKindEnum) {
return s.name, tracing.SpanKindNoneEnum
}