limits

package
v0.17.1 Latest Latest
Warning

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

Go to latest
Published: Feb 12, 2025 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AgentConfig

type AgentConfig struct {
	Agent    string        `yaml:"agent"`
	Schedule string        `yaml:"schedule"`
	Duration time.Duration `yaml:"duration"`
}

AgentConfig holds the limit configuration for a user agent.

type Agents

type Agents map[string]*Cron

Agents holds the cron limits for a set of user agents.

func ParseConfig

func ParseConfig(path string) (Agents, error)

ParseConfig interprets the configuration file and returns the set of agent limits.

type Config

type Config []AgentConfig

Config holds the limit configuration for all user agents.

type Cron

type Cron struct {
	*cronexpr.Expression
	// contains filtered or unexported fields
}

Cron infers time limits based on a cron schedule.

func NewCron

func NewCron(schedule string, duration time.Duration) *Cron

NewCron returns a new instance of Cron.

func (*Cron) IsLimited

func (c *Cron) IsLimited(t time.Time) bool

IsLimited returns whether the input time is within a time-limited window [start, end).

type RateLimitConfig added in v0.17.0

type RateLimitConfig struct {
	// Interval defines the duration of the sliding window.
	Interval time.Duration
	// MaxEvents defines the maximum number of events allowed in the interval.
	MaxEvents int
	// KeyPrefix is the prefix for Redis keys.
	KeyPrefix string
}

RateLimitConfig holds the configuration for IP+UA rate limiting.

type RateLimiter added in v0.17.0

type RateLimiter struct {
	// contains filtered or unexported fields
}

RateLimiter implements a distributed rate limiter using Redis sorted sets (ZSET). It maintains a sliding window of events for each IP+UA combination, where:

  • Each event is stored in a ZSET with the timestamp as score
  • Old events (outside the window) are automatically removed
  • Keys automatically expire after the configured interval

The limiter considers a request to be rate-limited if the number of events in the current window exceeds MaxEvents.

func NewRateLimiter added in v0.17.0

func NewRateLimiter(pool *redis.Pool, config RateLimitConfig) *RateLimiter

NewRateLimiter creates a new rate limiter.

func (*RateLimiter) IsLimited added in v0.17.0

func (rl *RateLimiter) IsLimited(ip, ua string) (bool, error)

IsLimited checks if the given IP and User-Agent combination should be rate limited.

Jump to

Keyboard shortcuts

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