middleware

package
v0.10.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2024 License: Apache-2.0 Imports: 5 Imported by: 1

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

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func ChainWithMiddleware

func ChainWithMiddleware(middleware ...Middleware) handler.BuilderComposer

func NewSyncID

func NewSyncID(size uint8) string

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

type BuilderMiddleware func(handler.Builder) handler.Builder

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

type HandlerMiddleware func(handler.Handler) handler.Handler

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

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL