super_exception_notifier 3.0.5 → 3.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION.yml
CHANGED
@@ -12,4 +12,23 @@ module ExceptionNotification
|
|
12
12
|
autoload :DeprecatedMethods, 'exception_notification/deprecated_methods'
|
13
13
|
autoload :HooksNotifier, 'exception_notification/hooks_notifier'
|
14
14
|
autoload :NotifiableHelper, 'exception_notification/notifiable_helper'
|
15
|
+
|
16
|
+
def self.initialize
|
17
|
+
if defined?(ActionController::Base)
|
18
|
+
ActionController::Base.send(:include, ExceptionNotification::ExceptionNotifiable)
|
19
|
+
end
|
20
|
+
|
21
|
+
#TODO: Set this in gobal SEN config as the logger like they do in HoptoadNotifier
|
22
|
+
# rails_logger = if defined?(::Rails.logger)
|
23
|
+
# ::Rails.logger
|
24
|
+
# elsif defined?(RAILS_DEFAULT_LOGGER)
|
25
|
+
# RAILS_DEFAULT_LOGGER
|
26
|
+
# end
|
27
|
+
# HoptoadNotifier.configure(true) do |config|
|
28
|
+
# config.logger = rails_logger
|
29
|
+
# config.environment_name = RAILS_ENV if defined?(RAILS_ENV)
|
30
|
+
# config.project_root = RAILS_ROOT if defined?(RAILS_ROOT)
|
31
|
+
# config.framework = "Rails: #{::Rails::VERSION::STRING}" if defined?(::Rails::VERSION)
|
32
|
+
# end
|
33
|
+
end
|
15
34
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# This module needs to be included in ApplicationController in order to work.
|
2
|
+
|
1
3
|
require 'ipaddr'
|
2
4
|
|
3
5
|
module ExceptionNotification::ExceptionNotifiable
|
@@ -6,6 +8,17 @@ module ExceptionNotification::ExceptionNotifiable
|
|
6
8
|
def self.included(base)
|
7
9
|
base.extend ClassMethods
|
8
10
|
|
11
|
+
# Sets up an alias chain to catch exceptions when Rails does
|
12
|
+
#This is what makes it all work with Hoptoad or other exception catchers.
|
13
|
+
# base.send(:alias_method, :rescue_action_locally_without_sen_handler, :rescue_action_locally)
|
14
|
+
# base.send(:alias_method, :rescue_action_locally, :rescue_action_locally_with_sen_handler)
|
15
|
+
|
16
|
+
#Alias method chaining doesn't work here because it would trigger a double render error.
|
17
|
+
# Sets up an alias chain to catch exceptions when Rails does
|
18
|
+
#This is what makes it all work with Hoptoad or other exception catchers.
|
19
|
+
# base.send(:alias_method, :rescue_action_in_public_without_exception_notifiable, :rescue_action_in_public)
|
20
|
+
# base.send(:alias_method, :rescue_action_in_public, :rescue_action_in_public_with_exception_notifiable)
|
21
|
+
|
9
22
|
# Adds the following class attributes to the classes that include ExceptionNotifiable
|
10
23
|
# HTTP status codes and what their 'English' status message is
|
11
24
|
base.cattr_accessor :http_status_codes
|
@@ -72,7 +85,6 @@ module ExceptionNotification::ExceptionNotifiable
|
|
72
85
|
self.class.be_silent_for_exception?(exception)
|
73
86
|
end
|
74
87
|
|
75
|
-
|
76
88
|
private
|
77
89
|
|
78
90
|
def environment_is_noisy?
|
@@ -98,32 +110,36 @@ module ExceptionNotification::ExceptionNotifiable
|
|
98
110
|
!self.class.local_addresses.detect { |addr| addr.include?(remote) }.nil?
|
99
111
|
end
|
100
112
|
|
113
|
+
#No Request present
|
101
114
|
# When the action being executed has its own local error handling (rescue)
|
102
115
|
# Or when the error accurs somewhere without a subsequent render (eg. method calls in console)
|
103
|
-
def
|
104
|
-
to_return = super
|
105
|
-
if to_return
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
end
|
116
|
+
def rescue_action_locally_with_sen_handler(exception)
|
117
|
+
#to_return = super
|
118
|
+
#if to_return
|
119
|
+
verbose = self.class.exception_notifiable_verbose
|
120
|
+
puts "[RESCUE STYLE] rescue_with_handler" if verbose
|
121
|
+
data = get_exception_data
|
122
|
+
status_code = status_code_for_exception(exception)
|
123
|
+
#We only send email if it has been configured in environment
|
124
|
+
send_email = should_email_on_exception?(exception, status_code, verbose)
|
125
|
+
#We only send web hooks if they've been configured in environment
|
126
|
+
send_web_hooks = should_web_hook_on_exception?(exception, status_code, verbose)
|
127
|
+
the_blamed = ExceptionNotification::Notifier.config[:git_repo_path].nil? ? nil : lay_blame(exception)
|
128
|
+
rejected_sections = %w(request session)
|
129
|
+
# Debugging output
|
130
|
+
verbose_output(exception, status_code, "rescued by handler", send_email, send_web_hooks, nil, the_blamed, rejected_sections) if verbose
|
131
|
+
# Send the exception notification email
|
132
|
+
perform_exception_notify_mailing(exception, data, nil, the_blamed, verbose, rejected_sections) if send_email
|
133
|
+
# Send Web Hook requests
|
134
|
+
ExceptionNotification::HooksNotifier.deliver_exception_to_web_hooks(ExceptionNotification::Notifier.config, exception, self, request, data, the_blamed) if send_web_hooks
|
135
|
+
#end
|
123
136
|
pass_it_on(exception)
|
124
|
-
|
137
|
+
#rescue_action_locally_without_sen_handler(exception)
|
138
|
+
#to_return
|
125
139
|
end
|
126
140
|
|
141
|
+
# Overrides the rescue_action method in ActionController::Base, but does not inhibit
|
142
|
+
# any custom processing that is defined with Rails 2's exception helpers.
|
127
143
|
# When the action being executed is letting SEN handle the exception completely
|
128
144
|
def rescue_action_in_public(exception)
|
129
145
|
# If the error class is NOT listed in the rails_errror_class hash then we get a generic 500 error:
|
@@ -137,6 +153,7 @@ module ExceptionNotification::ExceptionNotifiable
|
|
137
153
|
else
|
138
154
|
notify_and_render_error_template(status_code, request, exception, ExceptionNotification::Notifier.get_view_path_for_status_code(status_code, verbose), verbose)
|
139
155
|
end
|
156
|
+
pass_it_on(exception, request)
|
140
157
|
end
|
141
158
|
|
142
159
|
def notify_and_render_error_template(status_cd, request, exception, file_path, verbose = false)
|
@@ -161,15 +178,17 @@ module ExceptionNotification::ExceptionNotifiable
|
|
161
178
|
# deliver raises an exception, we don't call render twice.
|
162
179
|
# Render the error page to the end user
|
163
180
|
render_error_template(file_path, status)
|
164
|
-
pass_it_on(exception, request)
|
165
181
|
end
|
166
182
|
|
183
|
+
# some integration with hoptoad or other exception handler
|
184
|
+
# is done by tha alias method chain on:
|
185
|
+
# rescue_action_locally
|
167
186
|
def pass_it_on(exception, request = nil)
|
168
187
|
begin
|
169
188
|
request ||= {:params => {}}
|
170
189
|
case self.class.exception_notifiable_pass_through
|
171
190
|
when :hoptoad then
|
172
|
-
HoptoadNotifier.
|
191
|
+
HoptoadNotifier.notify(exception, {:request => request})
|
173
192
|
puts "[PASS-IT-ON] HOPTOAD NOTIFIED" if verbose
|
174
193
|
else
|
175
194
|
puts "[PASS-IT-ON] NO" if verbose
|
@@ -97,7 +97,7 @@ module ExceptionNotification::Notifiable
|
|
97
97
|
request ||= {:params => {}}
|
98
98
|
case self.class.notifiable_pass_through
|
99
99
|
when :hoptoad then
|
100
|
-
HoptoadNotifier.
|
100
|
+
HoptoadNotifier.notify(exception, {:request => request})
|
101
101
|
puts "[PASS-IT-ON] HOPTOAD NOTIFIED" if verbose
|
102
102
|
else
|
103
103
|
puts "[PASS-IT-ON] NO" if verbose
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{super_exception_notifier}
|
8
|
-
s.version = "3.0.
|
8
|
+
s.version = "3.0.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Peter Boling", "Scott Windsor", "Ismael Celis", "Jacques Crocker", "Jamis Buck"]
|
12
|
-
s.date = %q{2010-05-
|
12
|
+
s.date = %q{2010-05-14}
|
13
13
|
s.description = %q{Allows customization of:
|
14
14
|
* Specify which level of notification you would like with an array of optional styles of notification (email, webhooks)
|
15
15
|
* the sender address of the email
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 3
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 3.0.
|
8
|
+
- 6
|
9
|
+
version: 3.0.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Peter Boling
|
@@ -18,7 +18,7 @@ autorequire:
|
|
18
18
|
bindir: bin
|
19
19
|
cert_chain: []
|
20
20
|
|
21
|
-
date: 2010-05-
|
21
|
+
date: 2010-05-14 00:00:00 -04:00
|
22
22
|
default_executable:
|
23
23
|
dependencies:
|
24
24
|
- !ruby/object:Gem::Dependency
|