Module: NetuitiveRailsAgent::ErrorUtils

Included in:
ErrorTrackerHook, SidekiqTracker::ErrorTracker
Defined in:
lib/netuitive_rails_agent/error_utils.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#interactionObject

Returns the value of attribute interaction.



3
4
5
# File 'lib/netuitive_rails_agent/error_utils.rb', line 3

def interaction
  @interaction
end

Instance Method Details

#handle_error(exception, metrics = [], tags = {}) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/netuitive_rails_agent/error_utils.rb', line 21

def handle_error(exception, metrics = [], tags = {})
  NetuitiveRailsAgent::NetuitiveLogger.log.debug "received error: #{exception}"
  unless ignored_error?(exception)
    NetuitiveRailsAgent::NetuitiveLogger.log.debug "#{exception} wasn't ignored"
    if NetuitiveRailsAgent::ConfigManager.capture_errors
      NetuitiveRailsAgent::NetuitiveLogger.log.debug "sending error: #{exception}"
      @interaction = NetuitiveRailsAgent::ApiInteraction.new unless @interaction
      @interaction.exception_event(exception, exception.class, tags)
      NetuitiveRailsAgent::NetuitiveLogger.log.debug 'sent error'
    end
    NetuitiveRailsAgent::NetuitiveLogger.log.debug 'sending error metrics'
    metrics.each do |metric|
      @interaction.aggregate_metric(metric.to_s, 1)
      NetuitiveRailsAgent::NetuitiveLogger.log.debug "sent error metric with name: #{metric}"
    end
  end
rescue => e
  NetuitiveRailsAgent::NetuitiveLogger.log.error "exception during error tracking: message:#{e.message} backtrace:#{e.backtrace}"
end

#ignored_error?(exception) ⇒ Boolean

Returns:

  • (Boolean)


5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/netuitive_rails_agent/error_utils.rb', line 5

def ignored_error?(exception)
  unless NetuitiveRailsAgent::ConfigManager.ignored_errors.empty?
    NetuitiveRailsAgent::ConfigManager.ignored_errors.each do |name|
      if name.include? '^'
        name.tr!('^', '')
        exception.class.ancestors.each do |ancestor|
          return true if name.casecmp(ancestor.name).zero?
        end
      elsif name.casecmp(exception.class.name).zero?
        return true
      end
    end
  end
  false
end