class Nadir::Notification
Public Class Methods
new(exception, params = {})
click to toggle source
# File lib/nadir/notification.rb, line 5 def initialize(exception, params = {}) @exception = exception @params = params end
Public Instance Methods
to_params()
click to toggle source
# File lib/nadir/notification.rb, line 10 def to_params { class: @exception.class.name, message: @exception.message, location: location, backtrace: backtrace.join("\n"), environment: Nadir.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), user: @params.dig(:request, :user), job: @params.dig(:job), revision: revision } end
Private Instance Methods
backtrace()
click to toggle source
# File lib/nadir/notification.rb, line 36 def backtrace @_backtrace ||= begin cleaner = ActiveSupport::BacktraceCleaner.new cleaner.remove_filters! gem_paths.each { |gem_path| cleaner.add_filter { |line| line.sub(gem_path, '[GEM_ROOT]') } } cleaner.add_filter { |line| ruby_path ? line.sub(ruby_path, '[RUBY_ROOT]') : line } cleaner.add_filter { |line| line.sub(Nadir.config.root.to_s, '') } cleaner.add_filter { |line| line.start_with?('/') ? line.sub('/', '') : line } cleaner.add_filter { |line| line.start_with?('.') ? line.sub('.', '') : line } cleaner.clean(@exception.backtrace) end end
fingerprint()
click to toggle source
# File lib/nadir/notification.rb, line 51 def fingerprint first_backtrace_line = backtrace.find { |trace| trace !~ /pry|irb/ } checksum = [first_backtrace_line, @exception.class].join('|') Digest::SHA1.hexdigest checksum end
from_env()
click to toggle source
# File lib/nadir/notification.rb, line 88 def from_env ENV['COMMIT_HASH'] end
from_git()
click to toggle source
# File lib/nadir/notification.rb, line 74 def from_git revision, _stderr, status = Open3.capture3('git rev-parse HEAD') status.success? ? revision.strip : nil end
from_revision_file()
click to toggle source
# File lib/nadir/notification.rb, line 80 def from_revision_file revision_file = Nadir.config.root.join('REVISION') if File.exist? revision_file File.read(revision_file)&.strip end end
gem_paths()
click to toggle source
# File lib/nadir/notification.rb, line 58 def gem_paths @gem_paths ||= Gem.path | [Gem.default_dir] end
location()
click to toggle source
# File lib/nadir/notification.rb, line 32 def location @params[:location] || $PROGRAM_NAME end
revision()
click to toggle source
# File lib/nadir/notification.rb, line 68 def revision from_git || from_revision_file || from_env end
ruby_path()
click to toggle source
# File lib/nadir/notification.rb, line 62 def ruby_path ruby_path, _stderr, _status = Open3.capture3('which ruby') ENV['RUBY_ROOT'] || ruby_path.strip.presence end