ratelimit

package
v0.0.0-...-11f0800 Latest Latest
Warning

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

Go to latest
Published: Oct 4, 2024 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func WithConcurrentRequestRateLimiter

func WithConcurrentRequestRateLimiter(meter metricsApi.Meter, concurrentRequestAllowance int32) func(http.Handler) http.Handler

func WithRequestRateLimiter

func WithRequestRateLimiter(meter metricsApi.Meter, store config.Store) func(http.Handler) http.Handler

Types

type LimitStore

type LimitStore interface {
	TryPassRequestLimit(ctx context.Context) RequestLimitAllowance
}

func NewLimitStore

func NewLimitStore(store config.Store) (LimitStore, error)

type LocalAdaptiveTokenBucketLimit

type LocalAdaptiveTokenBucketLimit struct {
	Tiers          []RateLimitTier
	CurrentTierIdx int
	WindowStartTs  int64
	RejectCounter  int64
	AllowCounter   int64
	LastRefillTs   int64
	UsedTokens     int64
	// contains filtered or unexported fields
}

func NewLocalAdaptiveTokenBucketLimit

func NewLocalAdaptiveTokenBucketLimit(store config.Store) (*LocalAdaptiveTokenBucketLimit, error)

func (*LocalAdaptiveTokenBucketLimit) TryPassRequestLimit

type LocalFixedWindowLimit

type LocalFixedWindowLimit struct {
	Timestamp int64
	Limit     int64
	Counter   int64
	// contains filtered or unexported fields
}

func NewLocalFixedWindowLimit

func NewLocalFixedWindowLimit(store config.Store) (*LocalFixedWindowLimit, error)

func (*LocalFixedWindowLimit) TryPassRequestLimit

func (st *LocalFixedWindowLimit) TryPassRequestLimit(ctx context.Context) RequestLimitAllowance

type LocalSlidingWindowLimit

type LocalSlidingWindowLimit struct {
	Limit    int64
	Requests []int64
	// contains filtered or unexported fields
}

func NewLocalSlidingWindowLimit

func NewLocalSlidingWindowLimit(store config.Store) (*LocalSlidingWindowLimit, error)

func (*LocalSlidingWindowLimit) TryPassRequestLimit

func (lws *LocalSlidingWindowLimit) TryPassRequestLimit(ctx context.Context) RequestLimitAllowance

type LocalTokenBucketLimit

type LocalTokenBucketLimit struct {
	Limit          int32
	Counter        int32
	LastRefillTime int64
	// contains filtered or unexported fields
}

func NewLocalTokenBucketLimit

func NewLocalTokenBucketLimit(rateLimitPerSec int32) (*LocalTokenBucketLimit, error)

func (*LocalTokenBucketLimit) TryPassRequestLimit

func (tb *LocalTokenBucketLimit) TryPassRequestLimit(ctx context.Context) bool

type RateLimitTier

type RateLimitTier struct {
	Capacity           int64
	RefillInterval     int64
	WindowDuration     int64
	NextTierRejectRate int
}

type RedisAdaptiveTokenBucketLimit

type RedisAdaptiveTokenBucketLimit struct {
	Tiers []RateLimitTier
	// contains filtered or unexported fields
}

func NewRedisAdaptiveTokenBucketLimit

func NewRedisAdaptiveTokenBucketLimit(store config.Store) (*RedisAdaptiveTokenBucketLimit, error)

func (*RedisAdaptiveTokenBucketLimit) TryPassRequestLimit

type RedisFixedWindowLimit

type RedisFixedWindowLimit struct {
	Timestamp int64
	Limit     int64
	Counter   int64
	// contains filtered or unexported fields
}

func NewRedisFixedWindowLimit

func NewRedisFixedWindowLimit(store config.Store) (*RedisFixedWindowLimit, error)

func (*RedisFixedWindowLimit) TryPassRequestLimit

func (st *RedisFixedWindowLimit) TryPassRequestLimit(ctx context.Context) RequestLimitAllowance

type RedisSlidingWindowLimit

type RedisSlidingWindowLimit struct {
	Limit int64
	// contains filtered or unexported fields
}

func NewRedisSlidingWindowLimit

func NewRedisSlidingWindowLimit(store config.Store) (*RedisSlidingWindowLimit, error)

func (*RedisSlidingWindowLimit) TryPassRequestLimit

func (rsw *RedisSlidingWindowLimit) TryPassRequestLimit(ctx context.Context) RequestLimitAllowance

redis streams implementation

type RedisTokenBucketLimit

type RedisTokenBucketLimit struct {
	Capacity     int64
	RefillRateMs int32
	// contains filtered or unexported fields
}

func NewRedisTokenBucketLimit

func NewRedisTokenBucketLimit(store config.Store) (*RedisTokenBucketLimit, error)

func (*RedisTokenBucketLimit) TryPassRequestLimit

func (rsw *RedisTokenBucketLimit) TryPassRequestLimit(ctx context.Context) RequestLimitAllowance

type RequestLimitAllowance

type RequestLimitAllowance struct {
	Allowed        bool
	Limit          int64
	Remaining      int64
	LimitWindowSec int64
}

Jump to

Keyboard shortcuts

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