class ActiveTracker::Plugin::Exception

Public Class Methods

exception_capture(class_name, message, backtrace) click to toggle source
# File lib/active_tracker/plugin/exception.rb, line 56
def self.exception_capture(class_name, message, backtrace)
  return if filter_exception?(class_name)

  tags = {
    class_name: class_name,
    backtrace_hash: Digest::SHA2.hexdigest(backtrace.first.to_s),
  }

  ActiveTracker::Model.find_or_create("Exception", tags:tags, data_type: "full") do |obj|
    if obj.persisted
      ActiveTracker::Model.delete(obj.key)
    end
    obj.data ||= {}
    obj.data["count"] = (obj.data["count"] || 0) + 1
    # Enough for most git commits to be referenced
    # so should be fine for exception hashes within an application
    obj.id = "E" + Digest::SHA2.hexdigest(tags.inspect)[0,8]
    obj.expiry = 7.days
    obj.log_at = Time.now

    obj.data["backtrace"] = backtrace
    obj.data["message"] = message

    obj.data["at_requests"] ||= []
    if ActiveTracker::Plugin::Request.registered?
      id = ActiveTracker::Plugin::Request.current_tags[:id] rescue nil
      obj.data["at_requests"].prepend(id) if id.present?
      obj.data["at_requests"] = obj.data["at_requests"][0,20]
      ActiveTracker::Plugin::Request.current_tags[:at_exceptions] ||= []
      ActiveTracker::Plugin::Request.current_tags[:at_exceptions] << obj.id
    end
  end
end
filter_exception?(class_name) click to toggle source
# File lib/active_tracker/plugin/exception.rb, line 90
def self.filter_exception?(class_name)
  ActiveTracker::Plugin::Exception.filters.each do |filter|
    if filter.is_a?(Regexp)
      if filter.match(class_name)
        return true
      end
    elsif filter.is_a?(String)
      if class_name == filter
        return true
      end
    elsif filter.is_a?(Exception)
      if class_name == filter.class.name
        return true
      end
    end
  end

  false
end
filters() click to toggle source
# File lib/active_tracker/plugin/exception.rb, line 52
def self.filters
  @filters ||= []
end
filters=(value) click to toggle source
# File lib/active_tracker/plugin/exception.rb, line 48
def self.filters=(value)
  @filters = value
end
nav_svg() click to toggle source
nav_title() click to toggle source
register() click to toggle source
# File lib/active_tracker/plugin/exception.rb, line 4
def self.register
  Rails.application.middleware.insert_after ActionDispatch::ShowExceptions, ActiveTracker::ExceptionCapturer

  @@registered = true
end
registered?() click to toggle source
# File lib/active_tracker/plugin/exception.rb, line 10
def self.registered?
  @@registered rescue false
end
resources_name() click to toggle source
# File lib/active_tracker/plugin/exception.rb, line 14
def self.resources_name
  :exceptions
end
statistics() click to toggle source
# File lib/active_tracker/plugin/exception.rb, line 18
def self.statistics
  ret = []
  @exceptions = ActiveTracker::Model.all("Exception")
  num_exceptions = @exceptions.count
  exceptions_last_day = @exceptions.select {|e| e.log_at >= 1.day.ago}.count
  exceptions_last_30_minutes = @exceptions.select {|e| e.log_at >= 30.minutes.ago}.count

  ret << {plugin: self, label: "Last 24 hours", value: exceptions_last_day}
  if exceptions_last_30_minutes == 0
    ret << {plugin: self, label: "Last 30 min", value: exceptions_last_30_minutes}
  else
    ret << {plugin: self, label: "Last 30 min", value: exceptions_last_30_minutes, error: true}
  end

  ret
end