module StartHer::RetryPolicies
Public Instance Methods
exponential_backoff(opts = {}, *exception_classes) { || ... }
click to toggle source
rubocop:disable Metrics/AbcSize,Metrics/MethodLength
# File lib/start_her/retry_policies.rb, line 4 def exponential_backoff(opts = {}, *exception_classes) options = { elapsed_time_secs: 600, multiplier: 2 } options.merge!(opts) time = 0.2 started_at = Time.now.utc begin yield rescue *exception_classes => ex raise ex if (Time.now.utc - started_at) >= options[:elapsed_time_secs] sleep(time) time *= options[:multiplier] if (Time.now.utc - started_at) + time >= options[:elapsed_time_secs] time = options[:elapsed_time_secs] - (Time.now.utc - started_at) end retry end end