class HttpLogger

def perform(http, request, request_body)

def perform(http, request, request_body)
  start_time = Time.now
  tags = {}
  response = yield
rescue => ex
  tags = tags.merge({error_type: ex.class})
  raise
ensure
  values = {response_time: ((Time.now - start_time)*1000).round(2)}
  if require_logging?(http, request)
    tags = tags.merge({endpoint: http.address, method: request.method})
    log_request_url(http, request, start_time)
    log_request_body(request)
    log_request_headers(request)
    if defined?(response) && response
      tags = tags.merge({status: response.code.to_i}) 
      log_response_code(response)
      log_response_headers(response)
      log_response_body(response.body)
    end
    ZuoraConnect::AppInstance.write_to_telegraf(direction: :outbound, tags: tags, values: values)
  end
end