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 klog 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")
}
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 klog log level.