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/scheduled'
|
||||||
|
require 'sidekiq/retry_delay'
|
||||||
|
|
||||||
module Sidekiq
|
module Sidekiq
|
||||||
module Middleware
|
module Middleware
|
||||||
|
@ -111,18 +112,7 @@ module Sidekiq
|
||||||
|
|
||||||
# delayed_job uses the same basic formula
|
# delayed_job uses the same basic formula
|
||||||
def seconds_to_delay(worker, count)
|
def seconds_to_delay(worker, count)
|
||||||
default_retry_in = (count ** 4) + 15 + (rand(30)*(count+1))
|
RetryDelay.new(count, worker.sidekiq_retry_with, logger).seconds_to_delay
|
||||||
|
|
||||||
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
|
|
||||||
end
|
end
|
||||||
end
|
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
Add a link
Reference in a new issue