Documentation ¶
Overview ¶
Package ratelimit Tokenbucket based request rate limiter
Index ¶
- Constants
- func FromCli(c *cli.Context) (plugin.Middleware, error)
- func FromOther(o RateLimit) (plugin.Middleware, error)
- func GetSpec() *plugin.MiddlewareSpec
- type MaxRateError
- type RateErrHandler
- type RateExtractor
- type RateExtractorFunc
- type RateLimit
- type RateSet
- type TokenBucketSet
- type TokenLimiter
- type TokenLimiterOption
Constants ¶
const DefaultCapacity = 65536
DefaultCapacity default capacity
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 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
RateExtractor rate extractor
type RateExtractorFunc ¶ added in v0.9.1
RateExtractorFunc rate extractor function type
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
Returns vulcan library compatible middleware
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.
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
func Clock(clock timetools.TimeProvider) TokenLimiterOption
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.