module Airbrake::Response
def self.parse(response, logger)
-
(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