class GdsApi::JsonClient
def do_request(method, url, params = nil, additional_headers = {})
def do_request(method, url, params = nil, additional_headers = {}) loggable = { request_uri: url, start_time: Time.now.to_f } start_logging = loggable.merge(action: "start") logger.debug start_logging.to_json method_params = { method: method, url: url, } method_params[:payload] = params method_params = with_timeout(method_params) method_params = with_headers(method_params, self.class.default_request_headers, additional_headers) method_params = with_auth_options(method_params) if URI.parse(url).is_a? URI::HTTPS method_params = with_ssl_options(method_params) end ::RestClient::Request.execute(method_params) rescue Errno::ECONNREFUSED => e logger.error loggable.merge(status: "refused", error_message: e.message, error_class: e.class.name, end_time: Time.now.to_f).to_json raise GdsApi::EndpointNotFound, "Could not connect to #{url}" rescue RestClient::Exceptions::Timeout => e logger.error loggable.merge(status: "timeout", error_message: e.message, error_class: e.class.name, end_time: Time.now.to_f).to_json raise GdsApi::TimedOutException, e.message rescue URI::InvalidURIError => e logger.error loggable.merge(status: "invalid_uri", error_message: e.message, error_class: e.class.name, end_time: Time.now.to_f).to_json raise GdsApi::InvalidUrl, e.message rescue RestClient::Exception => e # Log the error here, since we have access to loggable, but raise the # exception up to the calling method to deal with loggable.merge!(status: e.http_code, end_time: Time.now.to_f, body: e.http_body) logger.warn loggable.to_json raise rescue Errno::ECONNRESET => e logger.error loggable.merge(status: "connection_reset", error_message: e.message, error_class: e.class.name, end_time: Time.now.to_f).to_json raise GdsApi::TimedOutException, e.message rescue SocketError => e logger.error loggable.merge(status: "socket_error", error_message: e.message, error_class: e.class.name, end_time: Time.now.to_f).to_json raise GdsApi::SocketErrorException, e.message end