ratelimit

package
v0.9.2 Latest Latest
Warning

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

Go to latest
Published: Jul 10, 2023 License: Apache-2.0 Imports: 13 Imported by: 1

Documentation

Overview

Package ratelimit Tokenbucket based request rate limiter

Index

Constants

View Source
const DefaultCapacity = 65536

DefaultCapacity default capacity

View Source
const UndefinedDelay = -1

UndefinedDelay default delay

Variables

This section is empty.

Functions

func FromCli

func FromCli(c *cli.Context) (plugin.Middleware, error)

FromCli constructs a middleware instance from the command line parameters.

func FromOther

func FromOther(o RateLimit) (plugin.Middleware, error)

func GetSpec

func GetSpec() *plugin.MiddlewareSpec

Spec is an entry point of a plugin and will be called to register this middleware plugin withing vulcand

Types

type MaxRateError added in v0.9.1

type MaxRateError struct {
	// contains filtered or unexported fields
}

MaxRateError max rate error

func (*MaxRateError) Error added in v0.9.1

func (m *MaxRateError) Error() string

type RateErrHandler added in v0.9.1

type RateErrHandler struct{}

RateErrHandler error handler

func (*RateErrHandler) ServeHTTP added in v0.9.1

func (e *RateErrHandler) ServeHTTP(w http.ResponseWriter, req *http.Request, err error)

type RateExtractor added in v0.9.1

type RateExtractor interface {
	Extract(r *http.Request) (*RateSet, error)
}

RateExtractor rate extractor

type RateExtractorFunc added in v0.9.1

type RateExtractorFunc func(r *http.Request) (*RateSet, error)

RateExtractorFunc rate extractor function type

func (RateExtractorFunc) Extract added in v0.9.1

func (e RateExtractorFunc) Extract(r *http.Request) (*RateSet, error)

Extract extract from request

type RateLimit

type RateLimit struct {
	// Period in seconds, e.g. 3600 to set up hourly rates
	PeriodSeconds int64
	// Allowed average requests
	Requests int64
	// Burst count, allowes some extra variance for requests exceeding the average rate
	Burst int64
	// Variable defines how the limiting should be done. e.g. 'client.ip' or 'request.header.X-My-Header'
	Variable string
	// RateVar defines the source of rates configuration that should be used to
	// process a particular request. E.g. 'request.header.X-Rates'
	RateVar string
	// contains filtered or unexported fields
}

Rate controls how many requests per period of time is allowed for a location. Existing implementation is based on the token bucket algorightm http://en.wikipedia.org/wiki/Token_bucket

func (*RateLimit) NewHandler added in v0.9.0

func (r *RateLimit) NewHandler(next http.Handler) (http.Handler, error)

Returns vulcan library compatible middleware

func (*RateLimit) String

func (rl *RateLimit) String() string

type RateSet added in v0.9.1

type RateSet struct {
	// contains filtered or unexported fields
}

RateSet maintains a set of rates. It can contain only one rate per period at a time.

func NewRateSet added in v0.9.1

func NewRateSet() *RateSet

NewRateSet crates an empty `RateSet` instance.

func (*RateSet) Add added in v0.9.1

func (rs *RateSet) Add(period time.Duration, average int64, burst int64) error

Add adds a rate to the set. If there is a rate with the same period in the set then the new rate overrides the old one.

func (*RateSet) String added in v0.9.1

func (rs *RateSet) String() string

type TokenBucketSet added in v0.9.1

type TokenBucketSet struct {
	// contains filtered or unexported fields
}

TokenBucketSet represents a set of TokenBucket covering different time periods.

func NewTokenBucketSet added in v0.9.1

func NewTokenBucketSet(rates *RateSet, clock timetools.TimeProvider) *TokenBucketSet

NewTokenBucketSet creates a `TokenBucketSet` from the specified `rates`.

func (*TokenBucketSet) Consume added in v0.9.1

func (tbs *TokenBucketSet) Consume(tokens int64) (time.Duration, error)

Consume consume tokens

func (*TokenBucketSet) GetMaxPeriod added in v0.9.1

func (tbs *TokenBucketSet) GetMaxPeriod() time.Duration

GetMaxPeriod returns the max period

func (*TokenBucketSet) Update added in v0.9.1

func (tbs *TokenBucketSet) Update(rates *RateSet)

Update brings the buckets in the set in accordance with the provided `rates`.

type TokenLimiter added in v0.9.1

type TokenLimiter struct {
	// contains filtered or unexported fields
}

TokenLimiter implements rate limiting middleware.

func New added in v0.9.1

func New(next http.Handler, extract utils.SourceExtractor, defaultRates *RateSet, opts ...TokenLimiterOption) (*TokenLimiter, error)

New constructs a `TokenLimiter` middleware instance.

func (*TokenLimiter) ServeHTTP added in v0.9.1

func (tl *TokenLimiter) ServeHTTP(w http.ResponseWriter, req *http.Request)

func (*TokenLimiter) Wrap added in v0.9.1

func (tl *TokenLimiter) Wrap(next http.Handler)

Wrap sets the next handler to be called by token limiter handler.

type TokenLimiterOption added in v0.9.1

type TokenLimiterOption func(l *TokenLimiter) error

TokenLimiterOption token limiter option type

func Capacity added in v0.9.1

func Capacity(cap int) TokenLimiterOption

Capacity sets the capacity

func Clock added in v0.9.1

Clock sets the clock

func ErrorHandler added in v0.9.1

func ErrorHandler(h utils.ErrorHandler) TokenLimiterOption

ErrorHandler sets error handler of the server

func ExtractRates added in v0.9.1

func ExtractRates(e RateExtractor) TokenLimiterOption

ExtractRates sets the rate extractor

func Logger added in v0.9.1

func Logger(l *log.Logger) TokenLimiterOption

Logger defines the logger the token limiter will use.

It defaults to logrus.StandardLogger(), the global logger used by logrus.

Jump to

Keyboard shortcuts

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