module Airbrake::Response

def self.parse(response, logger)

Returns:
  • (Hash{String=>String}) - parsed response

Parameters:
  • logger (Logger) --
  • response (Net::HTTPResponse) --
def self.parse(response, logger)
  code = response.code.to_i
  body = response.body
  begin
    case code
    when 201
      parsed_body = JSON.parse(body)
      logger.debug("#{LOG_LABEL} #{parsed_body}")
      parsed_body
    when 400, 401, 403, 420
      parsed_body = JSON.parse(body)
      logger.error("#{LOG_LABEL} #{parsed_body['message']}")
      parsed_body
    when TOO_MANY_REQUESTS
      parsed_body = JSON.parse(body)
      msg = "#{LOG_LABEL} #{parsed_body['message']}"
      logger.error(msg)
      { 'error' => msg, 'rate_limit_reset' => rate_limit_reset(response) }
    else
      body_msg = truncated_body(body)
      logger.error("#{LOG_LABEL} unexpected code (#{code}). Body: #{body_msg}")
      { 'error' => body_msg }
    end
  rescue StandardError => ex
    body_msg = truncated_body(body)
    logger.error("#{LOG_LABEL} error while parsing body (#{ex}). Body: #{body_msg}")
    { 'error' => ex.inspect }
  end
end

def self.rate_limit_reset(response)

def self.rate_limit_reset(response)
  Time.now + response['X-RateLimit-Delay'].to_i
end

def self.truncated_body(body)

def self.truncated_body(body)
  if body.nil?
    '[EMPTY_BODY]'.freeze
  elsif body.length > TRUNCATE_LIMIT
    body[0..TRUNCATE_LIMIT] << '...'
  else
    body
  end
end