ratelimit

package
v1.0.3 Latest Latest
Warning

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

Go to latest
Published: Aug 21, 2025 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AdaptiveRateLimitMiddleware

func AdaptiveRateLimitMiddleware(baseConfig *RateLimitConfig, logger *logrus.Logger) gin.HandlerFunc

AdaptiveRateLimitMiddleware rate limiting adaptativo basado en load

func DefaultKeyGenerator

func DefaultKeyGenerator(c *gin.Context) string

DefaultKeyGenerator generador de clave por defecto (por IP)

func PathKeyGenerator

func PathKeyGenerator(c *gin.Context) string

PathKeyGenerator generador de clave por path + IP

func PerPathRateLimitMiddleware

func PerPathRateLimitMiddleware(pathLimits map[string]*RateLimitConfig, logger *logrus.Logger) gin.HandlerFunc

PerPathRateLimitMiddleware rate limiting por path específico

func RateLimitMiddleware

func RateLimitMiddleware(rateLimiter RateLimiter, config *RateLimitConfig) gin.HandlerFunc

RateLimitMiddleware middleware de rate limiting

func RateLimitStatsHandler

func RateLimitStatsHandler(rateLimiter RateLimiter, config *RateLimitConfig) gin.HandlerFunc

RateLimitStatsHandler handler para obtener estadísticas de rate limiting

func TenantKeyGenerator

func TenantKeyGenerator(c *gin.Context) string

TenantKeyGenerator generador de clave por tenant

func UserKeyGenerator

func UserKeyGenerator(c *gin.Context) string

UserKeyGenerator generador de clave por usuario

Types

type AdaptiveConfig added in v1.0.0

type AdaptiveConfig struct {
	// CPU thresholds
	CPULowThreshold    float64 // < 50%
	CPUMediumThreshold float64 // < 80%
	CPUHighThreshold   float64 // >= 80%

	// Memory thresholds
	MemoryLowThreshold    float64 // < 60%
	MemoryMediumThreshold float64 // < 85%
	MemoryHighThreshold   float64 // >= 85%

	// Response time thresholds
	ResponseTimeLow    time.Duration // < 100ms
	ResponseTimeMedium time.Duration // < 500ms
	ResponseTimeHigh   time.Duration // >= 500ms

	// Adjustment factors
	LowLoadMultiplier    float64 // 1.5x normal limit
	MediumLoadMultiplier float64 // 1.0x normal limit
	HighLoadMultiplier   float64 // 0.5x normal limit

	// Evaluation interval
	EvaluationInterval time.Duration
}

AdaptiveConfig configuración para rate limiting adaptivo

type HeaderConfig added in v1.0.0

type HeaderConfig struct {
	RateLimitHeader  string // X-RateLimit-Limit
	RemainingHeader  string // X-RateLimit-Remaining
	ResetHeader      string // X-RateLimit-Reset
	RetryAfterHeader string // Retry-After
}

HeaderConfig configuración de headers de rate limit

type IntelligentRateLimitConfig added in v1.0.0

type IntelligentRateLimitConfig struct {
	// Strategy to use
	Strategy RateLimitStrategy

	// Default limits
	DefaultRequestsPerMin int
	DefaultBurstSize      int
	DefaultWindowSize     time.Duration

	// User tiers
	UserTiers map[string]*TierConfig

	// Key generators
	KeyGenerator      func(*gin.Context) string
	UserTierExtractor func(*gin.Context) string

	// Adaptive settings
	AdaptiveConfig *AdaptiveConfig

	// Storage
	CacheClient cache.CacheInterface
	CachePrefix string

	// Behavior
	SkipSuccessfulRequests bool
	SkipPaths              []string
	Headers                *HeaderConfig

	// Callbacks
	OnLimitExceeded func(*gin.Context, *LimitInfo)
	OnLimitWarning  func(*gin.Context, *LimitInfo)

	// Monitoring
	MetricsEnabled bool
}

IntelligentRateLimitConfig configuración del rate limiter inteligente

func DefaultConfig added in v1.0.0

func DefaultConfig() *IntelligentRateLimitConfig

DefaultConfig retorna configuración por defecto

type IntelligentRateLimiter added in v1.0.0

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

IntelligentRateLimiter implementa rate limiting inteligente

func NewIntelligentRateLimiter added in v1.0.0

func NewIntelligentRateLimiter(config *IntelligentRateLimitConfig) *IntelligentRateLimiter

NewIntelligentRateLimiter crea un nuevo rate limiter inteligente

func (*IntelligentRateLimiter) Middleware added in v1.0.0

func (irl *IntelligentRateLimiter) Middleware() gin.HandlerFunc

Middleware retorna middleware Gin

type KeyGeneratorFunc

type KeyGeneratorFunc func(c *gin.Context) string

KeyGeneratorFunc función para generar la clave de rate limiting

type LimitInfo added in v1.0.0

type LimitInfo struct {
	Key        string
	Limit      int
	Remaining  int
	ResetTime  time.Time
	RetryAfter time.Duration
	WindowSize time.Duration
	Strategy   RateLimitStrategy
	UserTier   string
	IsExceeded bool
	IsWarning  bool
}

LimitInfo información sobre el límite actual

type MemoryRateLimiter

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

MemoryRateLimiter implementación en memoria

func NewMemoryRateLimiter

func NewMemoryRateLimiter(config *RateLimitConfig, logger *logrus.Logger) *MemoryRateLimiter

NewMemoryRateLimiter crea un rate limiter en memoria

func (*MemoryRateLimiter) Allow

func (mrl *MemoryRateLimiter) Allow(ctx context.Context, key string) (*RateLimit, error)

Allow verifica si se permite la request

func (*MemoryRateLimiter) Close

func (mrl *MemoryRateLimiter) Close()

Close cierra el rate limiter

func (*MemoryRateLimiter) GetStats

func (mrl *MemoryRateLimiter) GetStats(ctx context.Context, key string) (*RateLimit, error)

GetStats obtiene estadísticas para una clave

func (*MemoryRateLimiter) Reset

func (mrl *MemoryRateLimiter) Reset(ctx context.Context, key string) error

Reset resetea el rate limit para una clave

type RateLimit

type RateLimit struct {
	Key             string
	Limit           int
	Remaining       int
	Reset           time.Time
	ResetDuration   time.Duration
	WindowStart     time.Time
	RequestCount    int
	LastRequestTime time.Time
}

RateLimit representa el estado del rate limiting

type RateLimitConfig

type RateLimitConfig struct {
	// Rate limiting settings
	RequestsPerSecond int
	RequestsPerMinute int
	RequestsPerHour   int
	BurstSize         int

	// Window settings
	WindowSize time.Duration

	// Key generation
	KeyGenerator KeyGeneratorFunc

	// Skip conditions
	SkipPaths    []string
	SkipIPs      []string
	WhitelistIPs []string

	// Response settings
	IncludeHeaders bool
	CustomMessage  string

	// Storage
	UseRedis    bool
	RedisClient *redis.Client
	RedisPrefix string

	// Callbacks
	OnLimitExceeded func(c *gin.Context, limit *RateLimit)
	OnReset         func(c *gin.Context, limit *RateLimit)
}

RateLimitConfig configuración del rate limiter

func DefaultRateLimitConfig

func DefaultRateLimitConfig() *RateLimitConfig

DefaultRateLimitConfig retorna configuración por defecto

type RateLimitStrategy added in v1.0.0

type RateLimitStrategy string

RateLimitStrategy define diferentes estrategias de rate limiting

const (
	// StrategyTokenBucket token bucket algorithm
	StrategyTokenBucket RateLimitStrategy = "token_bucket"
	// StrategyFixedWindow fixed window algorithm
	StrategyFixedWindow RateLimitStrategy = "fixed_window"
	// StrategySlidingWindow sliding window algorithm
	StrategySlidingWindow RateLimitStrategy = "sliding_window"
	// StrategyAdaptive adaptive rate limiting based on system load
	StrategyAdaptive RateLimitStrategy = "adaptive"
)

type RateLimiter

type RateLimiter interface {
	Allow(ctx context.Context, key string) (*RateLimit, error)
	Reset(ctx context.Context, key string) error
	GetStats(ctx context.Context, key string) (*RateLimit, error)
}

RateLimiter interfaz para implementaciones de rate limiting

func NewRateLimiter

func NewRateLimiter(config *RateLimitConfig, logger *logrus.Logger) RateLimiter

NewRateLimiter crea un rate limiter basado en la configuración

type RedisRateLimiter

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

RedisRateLimiter implementación con Redis

func NewRedisRateLimiter

func NewRedisRateLimiter(config *RateLimitConfig, logger *logrus.Logger) *RedisRateLimiter

NewRedisRateLimiter crea un rate limiter con Redis

func (*RedisRateLimiter) Allow

func (rrl *RedisRateLimiter) Allow(ctx context.Context, key string) (*RateLimit, error)

Allow verifica si se permite la request usando Redis

func (*RedisRateLimiter) GetStats

func (rrl *RedisRateLimiter) GetStats(ctx context.Context, key string) (*RateLimit, error)

GetStats obtiene estadísticas desde Redis

func (*RedisRateLimiter) Reset

func (rrl *RedisRateLimiter) Reset(ctx context.Context, key string) error

Reset resetea el rate limit en Redis

type SystemMetrics added in v1.0.0

type SystemMetrics struct {
	CPUUsage        float64
	MemoryUsage     float64
	AvgResponseTime time.Duration
	RequestRate     float64
	ErrorRate       float64

	LastUpdated time.Time
	// contains filtered or unexported fields
}

SystemMetrics métricas del sistema para adaptive rate limiting

type TierConfig added in v1.0.0

type TierConfig struct {
	Name           string
	RequestsPerMin int
	BurstSize      int
	WindowSize     time.Duration
}

TierConfig configuración por tier de usuario

Jump to

Keyboard shortcuts

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