Class: Faultline::LoggedException

Inherits:
ApplicationRecord show all
Defined in:
app/models/faultline/logged_exception.rb

Constant Summary collapse

HOSTNAME =
Socket.gethostname

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.class_namesObject



80
81
82
# File 'app/models/faultline/logged_exception.rb', line 80

def self.class_names
  select("DISTINCT exception_class").order(:exception_class).collect(&:exception_class)
end

.controller_actionsObject



84
85
86
# File 'app/models/faultline/logged_exception.rb', line 84

def self.controller_actions
  select("DISTINCT controller_name, action_name").order(:controller_name, :action_name).collect(&:controller_action)
end

.create_from_exception(controller, exception, data) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/models/faultline/logged_exception.rb', line 19

def create_from_exception(controller, exception, data)
  message = exception.message.to_s
  message += "\n* Extra Data\n\n#{data}" unless data.blank?
  create!(
    exception_class: exception.class.name,
    controller_name: controller.controller_path,
    action_name: controller.action_name,
    message: message,
    backtrace: exception.backtrace,
    request: controller.request,
    user_info: controller.respond_to?(:current_user, true) ? controller.current_user : nil,
    remote_ip: controller.request.remote_ip
  )
end

.host_nameObject



34
35
36
# File 'app/models/faultline/logged_exception.rb', line 34

def host_name
  HOSTNAME
end

.ransackable_associations(auth_object = nil) ⇒ Object



14
15
16
# File 'app/models/faultline/logged_exception.rb', line 14

def self.ransackable_associations(auth_object = nil)
  []
end

.ransackable_attributes(auth_object = nil) ⇒ Object



8
9
10
11
12
# File 'app/models/faultline/logged_exception.rb', line 8

def self.ransackable_attributes(auth_object = nil)
  %w[action_name backtrace controller_name created_at environment
     exception_class id message remote_ip request
     updated_at user_agent user_info]
end

Instance Method Details

#backtrace=(trace) ⇒ Object



51
52
53
54
# File 'app/models/faultline/logged_exception.rb', line 51

def backtrace=(trace)
  trace = sanitize_backtrace(trace) unless trace.is_a?(String)
  write_attribute :backtrace, trace
end

#controller_actionObject



76
77
78
# File 'app/models/faultline/logged_exception.rb', line 76

def controller_action
  @controller_action ||= "#{controller_name.camelcase}/#{action_name}"
end

#nameObject



47
48
49
# File 'app/models/faultline/logged_exception.rb', line 47

def name
  "#{self.exception_class} in #{self.controller_action}"
end

#request=(request) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/models/faultline/logged_exception.rb', line 56

def request=(request)
  if request.is_a?(String)
    write_attribute :request, request
  else
    max = request.env.keys.max { |a, b| a.length <=> b.length }
    env = request.env.keys.sort.inject [] do |memo, key|
      memo << "* %-*s: %s" % [max.length, key, request.env[key].to_s.strip]
    end
    write_attribute(:environment, (env << "* Process: #{$$}" << "* Server : #{self.class.host_name}").join("\n"))

    method_str = request.get? ? "" : " #{request.method.to_s.upcase}"
    write_attribute(:request, [
      "* URL:#{method_str} #{request.protocol}#{request.env["HTTP_HOST"]}#{request.fullpath}",
      "* Format: #{request.format.to_s}",
      "* Parameters: #{request.parameters.inspect}",
      "* Rails Root: #{rails_root}"
    ].join("\n"))
  end
end