1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Refactor into a class

This commit is contained in:
Justin Mazzi 2013-06-25 13:56:37 -04:00
parent 5f4cf06ee5
commit 9583f090a8
2 changed files with 28 additions and 12 deletions

View file

@ -1,4 +1,5 @@
require 'sidekiq/scheduled'
require 'sidekiq/retry_delay'
module Sidekiq
module Middleware
@ -111,18 +112,7 @@ module Sidekiq
# delayed_job uses the same basic formula
def seconds_to_delay(worker, count)
default_retry_in = (count ** 4) + 15 + (rand(30)*(count+1))
if worker.sidekiq_retry_with?
begin
worker.sidekiq_retry_with.call(count)
rescue Exception => e
logger.error { "Failure scheduling retry using the defined `sidekiq_retry_in`, falling back to the default! #{e.message}"}
default_retry_in
end
else
default_retry_in
end
RetryDelay.new(count, worker.sidekiq_retry_with, logger).seconds_to_delay
end
end
end

View file

@ -0,0 +1,26 @@
module Sidekiq
class RetryDelay
attr_reader :delay_with, :count, :logger
def initialize(count, delay_with, logger)
@count = count
@delay_with = delay_with
@logger = logger
end
def seconds_to_delay
user_defined_delay || default_delay
end
private
def default_delay
(count ** 4) + 15 + (rand(30)*(count+1))
end
def user_defined_delay
delay_with.call(count) if delay_with.respond_to?(:call)
rescue Exception => e
logger.error { "Failure scheduling retry using the defined `sidekiq_retry_in`, falling back to the default! #{e.message}"}
end
end
end