Class: NewRelic::NoticedError

Inherits:
Object
  • Object
show all
Extended by:
CollectionHelper
Includes:
Coerce
Defined in:
lib/new_relic/noticed_error.rb

Overview

This class encapsulates an error that was noticed by New Relic in a managed app.

Constant Summary collapse

STRIPPED_EXCEPTION_REPLACEMENT_MESSAGE =
"Message removed by New Relic 'strip_exception_messages' setting"

Constants included from CollectionHelper

CollectionHelper::DEFAULT_ARRAY_TRUNCATION_SIZE, CollectionHelper::DEFAULT_TRUNCATION_SIZE

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from CollectionHelper

normalize_params, strip_nr_from_backtrace

Methods included from Coerce

#float, #int, #log_failure, #string

Constructor Details

#initialize(path, data, exception, timestamp = Time.now) ⇒ NoticedError

Returns a new instance of NoticedError.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/new_relic/noticed_error.rb', line 15

def initialize(path, data, exception, timestamp = Time.now)
  @exception_id = exception.object_id
  @path = path
  @params = NewRelic::NoticedError.normalize_params(data)

  @exception_class_name = exception.is_a?(Exception) ? exception.class.name : 'Error'
  @exception_class_constant = exception.class

  if exception.respond_to?('original_exception')
    @message = exception.original_exception.message.to_s
  else
    @message = (exception || '<no message>').to_s
  end

  unless @message.is_a?(String)
    # In pre-1.9.3, Exception.new({}).to_s.class != String
    # That is, Exception#to_s may not return a String instance if one wasn't
    # passed in upon creation of the Exception. So, try to generate a useful
    # String representation of the exception message, falling back to failsafe
    @message = String(@message.inspect) rescue '<unknown message type>'
  end

  # clamp long messages to 4k so that we don't send a lot of
  # overhead across the wire
  @message = @message[0..4095] if @message.length > 4096

  # replace error message if enabled
  if NewRelic::Agent.config[:'strip_exception_messages.enabled'] && !whitelisted?
    @message = STRIPPED_EXCEPTION_REPLACEMENT_MESSAGE
  end

  @timestamp = timestamp
end

Instance Attribute Details

#exception_class_constantObject

Returns the value of attribute exception_class_constant.



10
11
12
# File 'lib/new_relic/noticed_error.rb', line 10

def exception_class_constant
  @exception_class_constant
end

#exception_class_nameObject

Returns the value of attribute exception_class_name.



10
11
12
# File 'lib/new_relic/noticed_error.rb', line 10

def exception_class_name
  @exception_class_name
end

#exception_idObject (readonly)

Returns the value of attribute exception_id.



11
12
13
# File 'lib/new_relic/noticed_error.rb', line 11

def exception_id
  @exception_id
end

#messageObject

Returns the value of attribute message.



10
11
12
# File 'lib/new_relic/noticed_error.rb', line 10

def message
  @message
end

#paramsObject

Returns the value of attribute params.



10
11
12
# File 'lib/new_relic/noticed_error.rb', line 10

def params
  @params
end

#pathObject

Returns the value of attribute path.



10
11
12
# File 'lib/new_relic/noticed_error.rb', line 10

def path
  @path
end

#timestampObject

Returns the value of attribute timestamp.



10
11
12
# File 'lib/new_relic/noticed_error.rb', line 10

def timestamp
  @timestamp
end

Instance Method Details

#==(other) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/new_relic/noticed_error.rb', line 62

def ==(other)
  if other.respond_to?(:exception_id)
    exception_id == other.exception_id
  else
    false
  end
end

#exception_classObject

Deprecated.


52
53
54
# File 'lib/new_relic/noticed_error.rb', line 52

def exception_class
  exception_class_name
end

#to_collector_array(encoder = nil) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/new_relic/noticed_error.rb', line 72

def to_collector_array(encoder=nil)
  [ NewRelic::Helper.time_to_millis(timestamp),
    string(path),
    string(message),
    string(exception_class_name),
    params ]
end

#whitelisted?Boolean

Returns:

  • (Boolean)


56
57
58
59
60
# File 'lib/new_relic/noticed_error.rb', line 56

def whitelisted?
  NewRelic::Agent.config.stripped_exceptions_whitelist.find do |klass|
    exception_class_constant <= klass
  end
end