fix: traceability of the middleware plugins
This commit is contained in:
parent
7792d197e6
commit
47faae25d7
2 changed files with 27 additions and 1 deletions
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue