Skip to content

Commit

Permalink
Adds requests/second rate limiter
Browse files Browse the repository at this point in the history
  • Loading branch information
holoiii committed Jan 16, 2015
1 parent 39a960e commit 45f4675
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions lib/rack/throttle/second.rb
@@ -0,0 +1,42 @@
module Rack; module Throttle
##
# This rate limiter strategy throttles the application by defining a
# maximum number of allowed HTTP requests per second (by default, 1
# request per second.
#
# Note that this strategy doesn't use a sliding time window, but rather
# tracks requests per distinct second. This means that the throttling
# counter is reset every second.
#
# @example Allowing up to 1 request/second
# use Rack::Throttle::Second
#
# @example Allowing up to 100 requests per second
# use Rack::Throttle::Second, :max => 100
#
class Second < TimeWindow
##
# @param [#call] app
# @param [Hash{Symbol => Object}] options
# @option options [Integer] :max (1)
def initialize(app, options = {})
super
end

##
def max_per_second
@max_per_hour ||= options[:max_per_second] || options[:max] || 1
end

alias_method :max_per_window, :max_per_second

protected

##
# @param [Rack::Request] request
# @return [String]
def cache_key(request)
[super, Time.now.strftime('%Y-%m-%dT%H:%S')].join(':')
end
end
end; end

0 comments on commit 45f4675

Please sign in to comment.