 Documentation
      ¶
      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")
}
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.