class Erorr::Notification

Public Class Methods

new(exception, params = {}) click to toggle source
# File lib/erorr/notification.rb, line 3
def initialize(exception, params = {})
  @exception = exception
  @params = params
end

Public Instance Methods

to_params() click to toggle source
# File lib/erorr/notification.rb, line 8
def to_params
  {
    class: @exception.class.name,
    message: @exception.message,
    location: location,
    backtrace: backtrace.join("\n"),
    environment: Erorr.config.env,
    timestamp: Time.current,
    fingerprint: fingerprint,
    host: Socket.gethostname,
    pid: Process.pid,
    request_params: @params.dig(:request, :params),
    request_remote_ip: @params.dig(:request, :remote_ip),
    request_headers: @params.dig(:request, :headers),
  }
end

Private Instance Methods

backtrace() click to toggle source
# File lib/erorr/notification.rb, line 31
def backtrace
  @_backtrace ||=
    begin
      cleaner = ActiveSupport::BacktraceCleaner.new
      gem_paths.each { |gem_path| cleaner.add_filter { |line| line.sub(gem_path, '') } }
      cleaner.add_filter { |line| line.sub(Erorr.config.root.to_s, '') }
      cleaner.add_filter { |line| line.sub('/', '') }

      cleaner.clean(@exception.backtrace)
    end
end
fingerprint() click to toggle source
# File lib/erorr/notification.rb, line 43
def fingerprint
  first_backtrace_line = backtrace.find { |trace| trace !~ /pry|irb/ }
  checksum = [first_backtrace_line, @exception.class].join('|')

  Digest::SHA1.hexdigest checksum
end
gem_paths() click to toggle source
# File lib/erorr/notification.rb, line 50
def gem_paths
  @gem_paths ||= Gem.path | [Gem.default_dir]
end
location() click to toggle source
# File lib/erorr/notification.rb, line 27
def location
  @params[:location] || $PROGRAM_NAME
end