class GoogleDrive::ClientLoginFetcher
Public Instance Methods
http_call(http, method, uri, data, extra_header, auth)
click to toggle source
# File lib/mobilize-base/extensions/google_drive/client_login_fetcher.rb, line 41 def http_call(http, method, uri, data, extra_header, auth) http.read_timeout = 600 http.start() do path = uri.path + (uri.query ? "?#{uri.query}" : "") header = auth_header(auth).merge(extra_header) if method == :delete || method == :get http.__send__(method, path, header) else http.__send__(method, path, data, header) end end end
request_raw(method, url, data, extra_header, auth)
click to toggle source
# File lib/mobilize-base/extensions/google_drive/client_login_fetcher.rb, line 3 def request_raw(method, url, data, extra_header, auth) clf = self #this is patched to handle server errors due to http chaos uri = URI.parse(url) response = nil attempts = 0 sleep_time = nil #try 5 times to make the call while (response.nil? or response.code.starts_with?("5")) and attempts < Mobilize::Gdrive.max_api_retries #instantiate http object, set params http = @proxy.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE #set 600 to allow for large downloads http.read_timeout = 600 response = begin puts "#{Time.now.utc} Gdrive API #{method.to_s}: #{uri.to_s} #{extra_header.to_s}" clf.http_call(http, method, uri, data, extra_header, auth) rescue #timeouts etc. nil end if response.nil? or response.code.starts_with?("4") attempts +=1 elsif if response.code.starts_with?("5") #wait 10 seconds times number of attempts squared in case of error sleep_time = 10 * (attempts*attempts) attempts += 1 puts "Sleeping for #{sleep_time.to_s} due to #{response.body}" sleep sleep_time end end end raise "No response after 20 attempts" if response.nil? raise response.body if response.code.ie{|rcode| rcode.starts_with?("4") or rcode.starts_with?("5")} return response end