Module: Labkit::RateLimit

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

Overview

RateLimit provides a simple rules-based rate limiting API backed by Redis counters.

Defined Under Namespace

Classes: Evaluator, Identifier, Rule

Constant Summary collapse

KNOWN_CHARACTERISTICS =

Defined independently to avoid forcing eager load of Evaluator at module load time. Must stay in sync with Evaluator::KNOWN_CHARACTERISTICS.

[:user, :ip, :namespace, :plan, :endpoint].freeze

Class Method Summary collapse

Class Method Details

.check(call_site:, identifier:, rules:, redis:, logger: nil) ⇒ :allow, :block

Check whether the given call_site + identifier combination is within the configured rules.

Parameters:

  • call_site (String)

    machine-readable name of the call site

  • identifier (Identifier, Hash)

    caller attributes

  • rules (Array<Rule>)

    ordered list of rate limit rules

  • redis (Object)

    Redis client (must respond to #incr and #expire)

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

    optional logger override

Returns:

  • (:allow, :block)


23
24
25
26
27
28
29
30
31
32
# File 'lib/labkit/rate_limit.rb', line 23

def self.check(call_site:, identifier:, rules:, redis:, logger: nil)
  id = identifier.is_a?(Identifier) ? identifier : Identifier.new(identifier)
  Evaluator.new(
    call_site: call_site,
    identifier: id,
    rules: rules,
    redis: redis,
    logger: logger
  ).evaluate
end