41 lines
908 B
Ruby
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
|