Class: RateLimitedJira::Client::RedisBased

Inherits:
RateLimitedJira::Client show all
Defined in:
lib/rate_limited_jira/client/redis_based.rb

Constant Summary collapse

RATE_LIMITER_KEY =
"rate_limited_jira_api_requests"

Constants inherited from RateLimitedJira::Client

NO_RATE_INTERVAL_IN_SECONDS, NO_RATE_LIMIT_PER_INTERVAL

Instance Attribute Summary

Attributes inherited from RateLimitedJira::Client

#rate_interval_in_seconds, #rate_limit_per_interval

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from RateLimitedJira::Client

build, #initialize, #original_request, #request

Constructor Details

This class inherits a constructor from RateLimitedJira::Client

Class Method Details

.rate_limiter(rate_limiter_key, rate_interval) ⇒ Object



27
28
29
# File 'lib/rate_limited_jira/client/redis_based.rb', line 27

def self.rate_limiter(rate_limiter_key, rate_interval)
  @rate_limiter ||= Ratelimit.new(rate_limiter_key, bucket_interval: rate_interval)
end

Instance Method Details

#rate_limit(&block) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
# File 'lib/rate_limited_jira/client/redis_based.rb', line 11

def rate_limit(&block)
  rate_limiter.exec_within_threshold(RATE_LIMITER_KEY,
                                     interval: rate_interval_in_seconds,
                                     threshold: rate_limit_per_interval) do
    response = block.call

    rate_limiter.add(RATE_LIMITER_KEY)

    response
  end
end

#rate_limiterObject



23
24
25
# File 'lib/rate_limited_jira/client/redis_based.rb', line 23

def rate_limiter
  self.class.rate_limiter(RATE_LIMITER_KEY, rate_interval_in_seconds)
end