class Envoi::IngestService::Client
Attributes
headers[RW]
http[RW]
log_pretty_print_body[RW]
log_request_body[RW]
log_response_body[RW]
logger[RW]
request[RW]
response[RW]
uri[RW]
Public Class Methods
new(args = {})
click to toggle source
# File lib/envoi/ingest_service/client.rb, line 14 def initialize(args = {}) initialize_logger(args) url = args[:url] app_name = args[:app_name] url = "#{url}?appname=#{app_name}" @default_source_bucket_name = args[:s3_source_bucket_name] || args[:source_bucket_name] @default_target_bucket_name = args[:s3_target_bucket_name] || args[:target_bucket_name] @default_allow_reimport = args.fetch(:allow_reimport, false) @uri = URI.parse(url) @headers = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' } @http = Net::HTTP.new(uri.host, uri.port) @http.use_ssl = true @default_app_name = args[:app_name] @log_pretty_print_body = true @log_request_body = true @log_response_body = true @parse_response = true end
Public Instance Methods
format_body_for_log_output(obj)
click to toggle source
Formats a HTTPRequest or HTTPResponse body for log output. @param [HTTPRequest|HTTPResponse] obj @return [String]
# File lib/envoi/ingest_service/client.rb, line 68 def format_body_for_log_output(obj) if obj.content_type == 'application/json' if @log_pretty_print_body _body = obj.body output = JSON.pretty_generate(JSON.parse(_body)) rescue _body return output else return obj.body end elsif obj.content_type == 'application/xml' return obj.body else return obj.body.inspect end end
initialize_logger(args = { })
click to toggle source
# File lib/envoi/ingest_service/client.rb, line 41 def initialize_logger(args = { }) @logger = args[:logger] || Logger.new(STDOUT) end
job_create(path, source_bucket_name = @default_source_bucket_name, target_bucket_name = @default_target_bucket_name, options = { })
click to toggle source
# File lib/envoi/ingest_service/client.rb, line 45 def job_create(path, source_bucket_name = @default_source_bucket_name, target_bucket_name = @default_target_bucket_name, options = { }) allow_reimport = options.fetch(:allow_reimport, @default_allow_reimport) args_out = { path: path, sourceBucket: source_bucket_name, targetBucket: target_bucket_name } args_out[:allowReimport] = allow_reimport unless allow_reimport.nil? request = Net::HTTP::Post.new(uri.request_uri, headers) request.body = JSON.generate(args_out) send_request(request) response.code == '200' end
job_create_old(path)
click to toggle source
# File lib/envoi/ingest_service/client.rb, line 57 def job_create_old(path) args_out = [ path ] request = Net::HTTP::Post.new(uri.request_uri, headers) request.body = JSON.generate(args_out) send_request(request) response.code == '200' end
response_parsed()
click to toggle source
# File lib/envoi/ingest_service/client.rb, line 84 def response_parsed @response_parsed ||= begin response_body = response.respond_to?(:body) ? response.body : '' logger.debug { "Parsing Response." } case response.content_type when 'application/json' response_body.empty? ? response_body : JSON.parse(response_body) # rescue response else response_body end end end
send_request(request)
click to toggle source
@param [HTTPRequest] request
# File lib/envoi/ingest_service/client.rb, line 100 def send_request(request) @response_parsed = nil @request = request logger.debug { %(REQUEST: #{request.method} http#{http.use_ssl? ? 's' : ''}://#{http.address}:#{http.port}#{request.path} HEADERS: #{request.to_hash.inspect} #{log_request_body and request.request_body_permitted? ? "\n-- BODY BEGIN --\n#{format_body_for_log_output(request)}\n-- BODY END --" : ''}) } max_retries = 3 retries = 0 loop do should_retry = false @request_time_start = Time.now @response = http.request(request) @request_time_end = Time.now logger.debug { %(RESPONSE: #{response.inspect} HEADERS: #{response.to_hash.inspect} #{log_response_body and response.respond_to?(:body) ? "\n-- BODY BEGIN --\n#{format_body_for_log_output(response)}\n-- BODY END--" : ''}\nTook: #{@request_time_end - @request_time_start} seconds) } #logger.debug { "Parse Response? #{@parse_response}" } if retries < max_retries && ['504'].include?(@response.code) retries += 1 should_retry = true end break unless should_retry end @parse_response ? response_parsed : response.body end