class RavenProcessors::Fingerprint

Builds fingerprint based on exception class & the line of exception

Public Instance Methods

process(data) click to toggle source
# File lib/raven_processors/fingerprint.rb, line 8
def process(data)
  fingerprint = data[:fingerprint] || data['fingerprint']
  exception = (data.dig('exception', 'values') || data.dig(:exception, :values))&.first

  return data if fingerprint || exception.nil? || exception.empty?

  data.merge(fingerprint: build_fingerprint(exception))
end

Private Instance Methods

build_fingerprint(exception) click to toggle source
# File lib/raven_processors/fingerprint.rb, line 19
def build_fingerprint(exception)
  [
    exception.fetch(:type),
    frame_to_line(exception.dig(:stacktrace, :frames)&.last)
  ].compact
end
frame_to_line(frame) click to toggle source
# File lib/raven_processors/fingerprint.rb, line 26
def frame_to_line(frame)
  return if frame.nil? || frame.empty?

  parts = [frame[:abs_path]]
  parts << ":#{frame[:lineno]}" unless frame[:lineno].nil? && frame[:lineno].empty?
  parts << ":in `#{frame[:function]}'" unless frame[:function].nil? && frame[:function].empty?
  parts.join
end