Class: Labkit::RateLimit::Evaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/labkit/rate_limit/evaluator.rb

Overview

Evaluator contains the core rule-matching + Redis counter logic.

Constant Summary collapse

KNOWN_CHARACTERISTICS =
[:user, :ip, :namespace, :plan, :endpoint].freeze
KNOWN_ACTIONS =
[:block, :log].freeze
REDIS_KEY_PREFIX =
"labkit:rl"
CHAR_VALUE_MAX_LENGTH =
200
UNKNOWN_SENTINEL =
"unknown_characteristic"
CALL_SITE_PATTERN =
/\A[a-z0-9_]+\z/

Instance Method Summary collapse

Constructor Details

#initialize(call_site:, identifier:, rules:, redis:, logger: nil) ⇒ Evaluator

Returns a new instance of Evaluator.



17
18
19
20
21
22
23
# File 'lib/labkit/rate_limit/evaluator.rb', line 17

def initialize(call_site:, identifier:, rules:, redis:, logger: nil)
  @call_site = call_site
  @identifier = identifier
  @rules = rules
  @redis = redis
  @logger = logger || build_default_logger
end

Instance Method Details

#evaluateObject



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/labkit/rate_limit/evaluator.rb', line 25

def evaluate
  validate_call_site!
  evaluate_rules
rescue ArgumentError
  raise
rescue StandardError => e
  # Intentionally broad: fail-open applies to any unexpected error (network,
  # timeout, OOM, etc.), not only Redis protocol errors.
  log_evaluate_error(e)
  :allow
end