package ratelimit
import "github.com/gravitational/oxy/ratelimit"
Tokenbucket based request rate limiter
Index ¶
- Constants
- type MaxRateError
- type RateErrHandler
- type RateExtractor
- type RateExtractorFunc
- type RateSet
- func NewRateSet() *RateSet
- func (rs *RateSet) Add(period time.Duration, average int64, burst int64) error
- func (rs *RateSet) String() string
- type TokenBucketSet
- func NewTokenBucketSet(rates *RateSet, clock timetools.TimeProvider) *TokenBucketSet
- func (tbs *TokenBucketSet) Consume(tokens int64) (time.Duration, error)
- func (tbs *TokenBucketSet) GetMaxPeriod() time.Duration
- func (tbs *TokenBucketSet) Update(rates *RateSet)
- type TokenLimiter
- func New(next http.Handler, extract utils.SourceExtractor, defaultRates *RateSet, opts ...TokenLimiterOption) (*TokenLimiter, error)
- func (tl *TokenLimiter) ServeHTTP(w http.ResponseWriter, req *http.Request)
- func (tl *TokenLimiter) Wrap(next http.Handler)
- type TokenLimiterOption
Constants ¶
const DefaultCapacity = 65536
const UndefinedDelay = -1
Types ¶
type MaxRateError ¶
type MaxRateError struct {
// contains filtered or unexported fields
}
func (*MaxRateError) Error ¶
func (m *MaxRateError) Error() string
type RateErrHandler ¶
type RateErrHandler struct { }
func (*RateErrHandler) ServeHTTP ¶
func (e *RateErrHandler) ServeHTTP(w http.ResponseWriter, req *http.Request, err error)
type RateExtractor ¶
type RateExtractorFunc ¶
func (RateExtractorFunc) Extract ¶
func (e RateExtractorFunc) Extract(r *http.Request) (*RateSet, error)
type RateSet ¶
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 ¶
func NewRateSet() *RateSet
NewRateSet crates an empty `RateSet` instance.
func (*RateSet) Add ¶
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 ¶
type TokenBucketSet ¶
type TokenBucketSet struct {
// contains filtered or unexported fields
}
TokenBucketSet represents a set of TokenBucket covering different time periods.
func NewTokenBucketSet ¶
func NewTokenBucketSet(rates *RateSet, clock timetools.TimeProvider) *TokenBucketSet
newTokenBucketSet creates a `TokenBucketSet` from the specified `rates`.
func (*TokenBucketSet) Consume ¶
func (tbs *TokenBucketSet) Consume(tokens int64) (time.Duration, error)
func (*TokenBucketSet) GetMaxPeriod ¶
func (tbs *TokenBucketSet) GetMaxPeriod() time.Duration
func (*TokenBucketSet) Update ¶
func (tbs *TokenBucketSet) Update(rates *RateSet)
Update brings the buckets in the set in accordance with the provided `rates`.
type TokenLimiter ¶
type TokenLimiter struct {
// contains filtered or unexported fields
}
TokenLimiter implements rate limiting middleware.
func New ¶
func New(next http.Handler, extract utils.SourceExtractor, defaultRates *RateSet, opts ...TokenLimiterOption) (*TokenLimiter, error)
New constructs a `TokenLimiter` middleware instance.
func (*TokenLimiter) ServeHTTP ¶
func (tl *TokenLimiter) ServeHTTP(w http.ResponseWriter, req *http.Request)
func (*TokenLimiter) Wrap ¶
func (tl *TokenLimiter) Wrap(next http.Handler)
type TokenLimiterOption ¶
type TokenLimiterOption func(l *TokenLimiter) error
func Capacity ¶
func Capacity(cap int) TokenLimiterOption
func Clock ¶
func Clock(clock timetools.TimeProvider) TokenLimiterOption
func ErrorHandler ¶
func ErrorHandler(h utils.ErrorHandler) TokenLimiterOption
ErrorHandler sets error handler of the server
func ExtractRates ¶
func ExtractRates(e RateExtractor) TokenLimiterOption
func Logger ¶
func Logger(l utils.Logger) TokenLimiterOption
Logger sets the logger that will be used by this middleware.
Source Files ¶
bucket.go bucketset.go tokenlimiter.go
- Version
- v0.0.0-20231219172753-f855322f2a6c (latest)
- Published
- Dec 19, 2023
- Platform
- linux/amd64
- Imports
- 9 packages
- Last checked
- 5 months ago –
Tools for package owners.