ratelimit

package
v0.0.0-...-122f59b Latest Latest
Warning

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

Go to latest
Published: Apr 23, 2024 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var BucketSpecDisabled = BucketSpec{Enabled: false}
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 (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 Logger

type Logger struct{ *log.Logger }

func NewLogger

func NewLogger(lf *log.Factory) Logger

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 Storage

type Storage interface {
	Update(spec BucketSpec, delta int) (ok bool, timeToAct time.Time, err error)
}

type StorageRedis

type StorageRedis struct {
	AppID config.AppID
	Redis *appredis.Handle
}

func (StorageRedis) Update

func (s StorageRedis) Update(spec BucketSpec, delta int) (ok bool, timeToAct time.Time, err error)

Jump to

Keyboard shortcuts

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