Total Complexity | 5 |
Total Lines | 26 |
Duplicated Lines | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
1 | require "faraday/middleware" |
||
35 | class RetryUtil |
||
36 | DEFAULT_ERROR_CODES = [429, 503].freeze |
||
37 | DEFAULT_RETRY_AFTER = 10 |
||
38 | |||
39 | attr_accessor :error_codes |
||
40 | attr_accessor :retry_after |
||
41 | |||
42 | def initialize(opts = {}) |
||
43 | @error_codes = opts[:error_codes] || DEFAULT_ERROR_CODES |
||
44 | @retry_after = opts[:retry_after] || DEFAULT_RETRY_AFTER |
||
45 | @logger = opts[:logger] |
||
46 | end |
||
47 | |||
48 | def retry_status(status, this_retry_after = nil) |
||
49 | return false unless @error_codes.include? status |
||
50 | seconds_left = (this_retry_after || @retry_after).to_i |
||
51 | @logger.warn "You have been rate limited. Retrying in #{seconds_left} seconds..." if @logger |
||
52 | seconds_left.times do |i| |
||
53 | sleep 1 |
||
54 | time_left = seconds_left - i |
||
55 | @logger.warn "#{time_left}..." if time_left > 0 && time_left % 5 == 0 && @logger |
||
56 | end |
||
57 | @logger.warn 'Retrying...' if @logger |
||
58 | true |
||
59 | end |
||
60 | end |
||
61 | end |
||
63 |