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