Module: Labkit::RateLimit

Defined in:
lib/labkit/rate_limit.rb,
lib/labkit/rate_limit/rule.rb,
lib/labkit/rate_limit/result.rb,
lib/labkit/rate_limit/limiter.rb,
lib/labkit/rate_limit/evaluator.rb,
lib/labkit/rate_limit/identifier.rb,
lib/labkit/rate_limit/configuration.rb

Overview

RateLimit provides a rules-based rate limiting API backed by Redis counters. Primary usage: instantiate a Limiter once per call site and reuse it.

Examples:

Configuration (e.g. in a Rails initializer)

Labkit::RateLimit.configure do |c|
  c.redis  = Redis.current
  c.logger = Labkit::Logging::JsonLogger.new($stdout)
end

Per-call-site setup

RACK_LIMITER = Labkit::RateLimit::Limiter.new(
  name: "rack_request",
  rules: [...]
)
result = RACK_LIMITER.check(identifier)

Defined Under Namespace

Classes: Configuration, Evaluator, Identifier, Limiter, Result, Rule

Class Method Summary collapse

Class Method Details

.check(name:, identifier:, rules:, redis: nil, logger: nil) ⇒ Result

Convenience wrapper - creates a throw-away Limiter. Prefer Limiter for call sites that can cache the object.

Parameters:

  • name (String)

    call site name

  • identifier (Identifier, Hash)

    caller attributes

  • rules (Array<Rule>)

    ordered list of rules (first match wins)

  • redis (Object, nil) (defaults to: nil)

    Redis client; falls back to config.redis

  • logger (Logger, nil) (defaults to: nil)

    logger; falls back to config.logger

Returns:



45
46
47
# File 'lib/labkit/rate_limit.rb', line 45

def check(name:, identifier:, rules:, redis: nil, logger: nil)
  Limiter.new(name: name, rules: rules, redis: redis, logger: logger).check(identifier)
end

.configObject



32
33
34
# File 'lib/labkit/rate_limit.rb', line 32

def config
  @config ||= Configuration.new
end

.configure {|config| ... } ⇒ Object

Yields:



28
29
30
# File 'lib/labkit/rate_limit.rb', line 28

def configure
  yield config
end