Module: Errorkit
- Defined in:
- lib/errorkit.rb,
lib/errorkit/config.rb,
lib/errorkit/engine.rb,
lib/errorkit/sidekiq.rb,
lib/errorkit/version.rb,
lib/errorkit/errors_mailer.rb,
lib/errorkit/ignorable_error.rb,
lib/errorkit/errors_controller.rb,
lib/generators/errorkit/install_generator.rb
Defined Under Namespace
Classes: Config, Engine, ErrorsController, ErrorsMailer, IgnorableError, InstallGenerator, Sidekiq
Constant Summary
collapse
- VERSION =
"0.0.3"
Class Method Summary
collapse
Class Method Details
.application_version ⇒ Object
82
83
84
|
# File 'lib/errorkit.rb', line 82
def self.application_version
@version ||= `cd #{Rails.root.to_s} && git rev-parse HEAD`.chomp rescue nil
end
|
.background_error(worker, payload, queue, exception) ⇒ Object
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/errorkit.rb', line 52
def self.background_error(worker, payload, queue, exception)
unless config.errors_class.nil? || config.ignore_exception?(exception)
begin
error = config.errors_class.create(
server: server,
environment: environment,
version: application_version,
exception: exception.class.to_s,
message: exception.message,
backtrace: clean_backtrace(exception),
worker: worker.class.to_s,
queue: queue.to_s,
payload: payload.to_json
)
send_notification(error)
error
rescue Errorkit::IgnorableError
end
end
end
|
.clean_backtrace(exception) ⇒ Object
96
97
98
99
100
101
|
# File 'lib/errorkit.rb', line 96
def self.clean_backtrace(exception)
backtrace = Rails.backtrace_cleaner.send(:filter, exception.backtrace) if defined?(Rails) && Rails.respond_to?(:backtrace_cleaner)
backtrace ||= exception.backtrace
backtrace ||= []
backtrace.join("\n")
end
|
.config ⇒ Object
21
22
23
|
# File 'lib/errorkit.rb', line 21
def self.config
@config ||= Errorkit::Config.new
end
|
11
12
13
14
15
16
17
18
19
|
# File 'lib/errorkit.rb', line 11
def self.configure(&block)
config.instance_eval(&block)
if defined?(Rails)
Rails.application.config.exceptions_app = lambda do |env|
Errorkit.server_error(env)
end
end
end
|
.environment ⇒ Object
74
75
76
|
# File 'lib/errorkit.rb', line 74
def self.environment
Rails.env.to_s if defined?(Rails)
end
|
.filtered_parameters(request) ⇒ Object
86
87
88
|
# File 'lib/errorkit.rb', line 86
def self.filtered_parameters(request)
request.filtered_parameters
end
|
.filtered_session(request) ⇒ Object
90
91
92
93
94
|
# File 'lib/errorkit.rb', line 90
def self.filtered_session(request)
session = request.session.dup
session.delete(:session_id)
session
end
|
.send_notification(error) ⇒ Object
103
104
105
106
107
108
|
# File 'lib/errorkit.rb', line 103
def self.send_notification(error)
return if config.mailer_recipients.blank? || config.mailer_sender.blank?
config.errors_mailer.error_notification(error.id).deliver
end
|
.server ⇒ Object
78
79
80
|
# File 'lib/errorkit.rb', line 78
def self.server
@server ||= `hostname`.chomp rescue nil
end
|
.server_error(env) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/errorkit.rb', line 25
def self.server_error(env)
exception = env['action_dispatch.exception']
unless config.errors_class.nil? || config.ignore_exception?(exception) || config.ignore_agent?(env['HTTP_USER_AGENT'])
begin
request = ActionDispatch::Request.new(env)
error = config.errors_class.create(
server: server,
environment: environment,
version: application_version,
exception: exception.class.to_s,
message: exception.message,
backtrace: clean_backtrace(exception),
params: filtered_parameters(request).to_json,
session: filtered_session(request).to_json,
remote_ip: request.remote_ip.to_s,
controller: (env['action_controller.instance'].controller_name rescue nil),
action: (env['action_controller.instance'].action_name rescue nil))
env['errorkit.notified'] = send_notification(error)
env['errorkit.error'] = error
rescue Errorkit::IgnorableError
end
end
config.errors_controller.action(:show).call(env)
end
|