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:
parent
5f4cf06ee5
commit
9583f090a8
2 changed files with 28 additions and 12 deletions
|
@ -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
|
||||
|
|
26
lib/sidekiq/retry_delay.rb
Normal file
26
lib/sidekiq/retry_delay.rb
Normal 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
|
Loading…
Add table
Reference in a new issue