Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var BucketSpecDisabled = BucketSpec{Enabled: false}
View Source
var DependencySet = wire.NewSet( NewLogger, wire.Struct(new(StorageRedis), "*"), wire.Struct(new(Limiter), "*"), wire.Bind(new(Storage), new(*StorageRedis)), )
View Source
var RateLimited = apierrors.TooManyRequest.WithReason("RateLimited")
Functions ¶
func ErrRateLimited ¶
func ErrRateLimited(bucketName BucketName) error
func IsRateLimitErrorWithBucketName ¶
func IsRateLimitErrorWithBucketName(err error, bucketName BucketName) bool
Types ¶
type BucketName ¶
type BucketName string
type BucketSpec ¶
type BucketSpec struct { Name BucketName Arguments []string IsGlobal bool Enabled bool Period time.Duration Burst int }
func NewBucketSpec ¶
func NewBucketSpec(config *config.RateLimitConfig, name BucketName, args ...string) BucketSpec
func NewCooldownSpec ¶
func NewCooldownSpec(name BucketName, period time.Duration, args ...string) BucketSpec
func NewGlobalBucketSpec ¶
func NewGlobalBucketSpec(e config.RateLimitsEnvironmentConfigEntry, name BucketName, args ...string) BucketSpec
func (BucketSpec) Key ¶
func (s BucketSpec) Key() string
type Limiter ¶
type Limiter struct { Logger Logger Storage Storage Config *config.RateLimitsFeatureConfig }
Limiter implements rate limiting using a simple token bucket algorithm. Consumers take token from a bucket every operation, and tokens are refilled periodically.
func (*Limiter) Allow ¶
func (l *Limiter) Allow(spec BucketSpec) error
func (*Limiter) Cancel ¶
func (l *Limiter) Cancel(r *Reservation)
func (*Limiter) Reserve ¶
func (l *Limiter) Reserve(spec BucketSpec) *Reservation
func (*Limiter) ReserveN ¶
func (l *Limiter) ReserveN(spec BucketSpec, n int) *Reservation
type Reservation ¶
type Reservation struct {
// contains filtered or unexported fields
}
func (*Reservation) Consume ¶
func (r *Reservation) Consume()
func (*Reservation) Error ¶
func (r *Reservation) Error() error
func (*Reservation) GetTimeToAct ¶
func (r *Reservation) GetTimeToAct() time.Time
type StorageRedis ¶
func (StorageRedis) Update ¶
func (s StorageRedis) Update(spec BucketSpec, delta int) (ok bool, timeToAct time.Time, err error)
Click to show internal directories.
Click to hide internal directories.