class Airbrake::Notice

@since v1.0.0
Airbrake or ignored completely.
Represents a chunk of information that is meant to be either sent to

def [](key)

Raises:
  • (Airbrake::Error) - if the notice is ignored

Returns:
  • (Object) -
def [](key)
  raise_if_ignored
  @payload[key]
end

def []=(key, value)

Raises:
  • (Airbrake::Error) - if the root value is not a Hash
  • (Airbrake::Error) - if the +key+ is not recognized
  • (Airbrake::Error) - if the notice is ignored

Returns:
  • (void) -
def []=(key, value)
  raise_if_ignored
  unless WRITABLE_KEYS.include?(key)
    raise Airbrake::Error,
          ":#{key} is not recognized among #{WRITABLE_KEYS}"
  end
  unless value.respond_to?(:to_hash)
    raise Airbrake::Error, "Got #{value.class} value, wanted a Hash"
  end
  @payload[key] = value.to_hash
end

def context(exception)

def context(exception)
  {
    version: @config.app_version,
    versions: @config.versions,
    # We ensure that root_directory is always a String, so it can always be
    # converted to JSON in a predictable manner (when it's a Pathname and in
    # Rails environment, it converts to unexpected JSON).
    rootDirectory: @config.root_directory.to_s,
    environment: @config.environment,
    # Make sure we always send hostname.
    hostname: HOSTNAME,
    severity: DEFAULT_SEVERITY,
    error_message: @truncator.truncate(exception.message),
  }.merge(CONTEXT).delete_if { |_key, val| val.nil? || val.empty? }
end

def initialize(exception, params = {})

Other tags:
    Api: - private
def initialize(exception, params = {})
  @config = Airbrake::Config.instance
  @truncator = Airbrake::Truncator.new(PAYLOAD_MAX_SIZE)
  @payload = {
    errors: NestedException.new(exception).as_json,
    context: context(exception),
    environment: {
      program_name: $PROGRAM_NAME,
    },
    session: {},
    params: params,
  }
  stash[:exception] = exception
end

def to_json(*_args)

Other tags:
    Api: - private

Returns:
  • (Hash{String=>String}, nil) -
def to_json(*_args)
  loop do
    begin
      json = @payload.to_json
    rescue *JSON_EXCEPTIONS => ex
      logger.debug("#{LOG_LABEL} `notice.to_json` failed: #{ex.class}: #{ex}")
    else
      return json if json && json.bytesize <= MAX_NOTICE_SIZE
    end
    break if truncate == 0
  end
end

def truncate

def truncate
  TRUNCATABLE_KEYS.each do |key|
    @payload[key] = @truncator.truncate(@payload[key])
  end
  new_max_size = @truncator.reduce_max_size
  if new_max_size == 0
    logger.error(
      "#{LOG_LABEL} truncation failed. File an issue at " \
      "https://github.com/airbrake/airbrake-ruby " \
      "and attach the following payload: #{@payload}",
    )
  end
  new_max_size
end