class Throttle::RedisScript

Constants

SCRIPT
SCRIPT_SHA1

Public Class Methods

key(key, type) click to toggle source
# File lib/throttle/redis_script.rb, line 8
def self.key(key, type)
  "#{@key}:#{type}"
end
new(redis, key, default_bucket_size) click to toggle source
# File lib/throttle/redis_script.rb, line 12
def initialize(redis, key, default_bucket_size)
  @redis = redis
  @key   = key
  @default_bucket_size = default_bucket_size
end

Public Instance Methods

acquire() click to toggle source
# File lib/throttle/redis_script.rb, line 18
def acquire
  begin
    keys = [key(:size), key(:time), key(:count), key(:duration)]
    go, count, time = @redis.evalsha(SCRIPT_SHA1, keys, [Time.now.utc.to_i])
    [go == 1, count, time]
  rescue Redis::CommandError => e
    raise unless e.message =~ /NOSCRIPT/

    @redis.send("script", "load", SCRIPT)
    acquire
  end
end
set_bucket_size!(val = nil) click to toggle source
# File lib/throttle/redis_script.rb, line 36
def set_bucket_size!(val = nil)
  @redis.set(key(:size), val || @default_bucket_size)
end
status() click to toggle source
# File lib/throttle/redis_script.rb, line 31
def status
  time, count, size = @redis.mget(key(:time), key(:count), key(:size))
  [Time.at(time.to_i), count.to_i, size.to_i]
end

Private Instance Methods

key(k) click to toggle source
# File lib/throttle/redis_script.rb, line 41
def key(k)
  self.class.key(@key, k)
end