1
0
Fork 0
musicbrainz/lib/musicbrainz/client_modules/failsafe_proxy.rb

41 lines
908 B
Ruby

# -*- encoding : utf-8 -*-
module MusicBrainz
module ClientModules
module FailsafeProxy
def get_contents(url)
return super unless failsafe?
response = { body: nil, status: 500 }
MusicBrainz.config.tries_limit.times do
wait_util_ready!
response = super
break if response[:status] == 200
end
response
end
def time_passed
Time.now.to_f - @last_query_time ||= 0.0
end
def time_to_wait
MusicBrainz.config.query_interval - time_passed
end
def ready?
time_passed > MusicBrainz.config.query_interval
end
def wait_util_ready!
sleep(time_to_wait) unless ready?
@last_query_time = Time.now.to_f
end
def failsafe?
MusicBrainz.config.tries_limit > 1 && MusicBrainz.config.query_interval.to_f > 0
end
end
end
end