14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/sidekiq-rate-limiter/fetch.rb', line 14
def limit(work)
message = JSON.parse(work.message) rescue {}
args = message['args']
klass = message['class']
rate = Rate.new(message)
return work unless !!(klass && rate.valid?)
limit = rate.limit
interval = rate.interval
name = rate.name
options = {
:limit => (limit.respond_to?(:call) ? limit.call(*args) : limit).to_i,
:interval => (interval.respond_to?(:call) ? interval.call(*args) : interval).to_f,
:name => (name.respond_to?(:call) ? name.call(*args) : name).to_s,
}
Sidekiq.redis do |conn|
lim = Limit.new(conn, options)
if lim.exceeded?(klass)
conn.lpush("queue:#{work.queue_name}", work.message)
nil
else
lim.add(klass)
work
end
end
end
|