Documentation
¶
Overview ¶
Package middleware supports building middleware for handlers.
In the context of handlers, middleware runs in between each handler.
Logging middleware can be used to automatically log entry into a specific handler.
Index ¶
- func ChainWithMiddleware(middleware ...Middleware) handler.BuilderComposer
- func NewSyncID(size uint8) string
- func ParallelWithMiddleware(middleware ...Middleware) handler.BuilderComposer
- func WithMiddleware(composer handler.BuilderComposer, middleware ...Middleware) handler.BuilderComposer
- type BuilderMiddleware
- type HandlerMiddleware
- type Middleware
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ChainWithMiddleware ¶
func ChainWithMiddleware(middleware ...Middleware) handler.BuilderComposer
func NewSyncID ¶
NewSyncID returns a random string of length `size` that can be added to log messages. This is useful for identifying which logs came from which iteration of a reconciliation loop in a controller.
func ParallelWithMiddleware ¶
func ParallelWithMiddleware(middleware ...Middleware) handler.BuilderComposer
func WithMiddleware ¶
func WithMiddleware(composer handler.BuilderComposer, middleware ...Middleware) handler.BuilderComposer
WithMiddleware returns a new BuilderComposer with all middleware applied
Types ¶
type BuilderMiddleware ¶
BuilderMiddleware returns a new (wrapped) Builder given a Builder
func MakeBuilderMiddleware ¶
func MakeBuilderMiddleware(w HandlerMiddleware) BuilderMiddleware
MakeBuilderMiddleware generates the corresponding BuilderMiddleware from a HandlerMiddleware.
type HandlerMiddleware ¶
HandlerMiddleware returns a new (wrapped) Handler given a Handler
func HandlerLoggingMiddleware ¶
func HandlerLoggingMiddleware(level int) HandlerMiddleware
HandlerLoggingMiddleware logs on entry to a handler. It uses the logr logger found in the context.
Example ¶
package main import ( "context" "k8s.io/klog/v2" "github.com/authzed/controller-idioms/handler" ) func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() logger := klog.LoggerWithValues(klog.Background(), "syncID", NewSyncID(5), "controller", "my-controller", ) ctx = klog.NewContext(ctx, logger) ChainWithMiddleware(NewHandlerLoggingMiddleware(4))( firstStage, secondStage, ).Handler("chained").Handle(ctx) } func firstStage(next ...handler.Handler) handler.Handler { return handler.NewHandlerFromFunc(func(ctx context.Context) { klog.FromContext(ctx).V(4).Info("first") handler.Handlers(next).MustOne().Handle(ctx) }, "first") } func secondStage(next ...handler.Handler) handler.Handler { return handler.NewHandlerFromFunc(func(ctx context.Context) { klog.FromContext(ctx).V(4).Info("second") handler.Handlers(next).MustOne().Handle(ctx) }, "second") }
Output:
type Middleware ¶
type Middleware func(handler.BuilderComposer) handler.BuilderComposer
Middleware operates on BuilderComposer (to wrap all underlying builders)
func MakeMiddleware ¶
func MakeMiddleware(w HandlerMiddleware) Middleware
MakeMiddleware generates the corresponding Middleware for HandlerMiddleware
func NewHandlerLoggingMiddleware ¶
func NewHandlerLoggingMiddleware(level int) Middleware
NewHandlerLoggingMiddleware creates a new HandlerLoggingMiddleware for a particular logr log level.