exception_notification 4.3.0 → 4.4.0
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.
- checksums.yaml +4 -4
- data/Appraisals +2 -2
- data/CHANGELOG.rdoc +14 -0
- data/CONTRIBUTING.md +18 -0
- data/Gemfile +1 -1
- data/README.md +64 -935
- data/Rakefile +2 -2
- data/docs/notifiers/campfire.md +50 -0
- data/docs/notifiers/custom.md +42 -0
- data/docs/notifiers/datadog.md +51 -0
- data/docs/notifiers/email.md +195 -0
- data/docs/notifiers/google_chat.md +31 -0
- data/docs/notifiers/hipchat.md +66 -0
- data/docs/notifiers/irc.md +97 -0
- data/docs/notifiers/mattermost.md +115 -0
- data/docs/notifiers/slack.md +161 -0
- data/docs/notifiers/sns.md +37 -0
- data/docs/notifiers/teams.md +54 -0
- data/docs/notifiers/webhook.md +60 -0
- data/examples/sample_app.rb +54 -0
- data/examples/sinatra/Gemfile +6 -6
- data/examples/sinatra/config.ru +1 -1
- data/examples/sinatra/sinatra_app.rb +14 -10
- data/exception_notification.gemspec +27 -22
- data/gemfiles/rails4_0.gemfile +3 -3
- data/gemfiles/rails4_1.gemfile +3 -3
- data/gemfiles/rails4_2.gemfile +3 -3
- data/gemfiles/rails5_0.gemfile +3 -3
- data/gemfiles/rails5_1.gemfile +3 -3
- data/gemfiles/rails5_2.gemfile +7 -0
- data/gemfiles/rails6_0.gemfile +7 -0
- data/lib/exception_notification.rb +1 -0
- data/lib/exception_notification/rack.rb +8 -21
- data/lib/exception_notification/resque.rb +8 -10
- data/lib/exception_notification/sidekiq.rb +8 -12
- data/lib/exception_notification/version.rb +3 -0
- data/lib/exception_notifier.rb +20 -3
- data/lib/exception_notifier/base_notifier.rb +2 -3
- data/lib/exception_notifier/campfire_notifier.rb +12 -13
- data/lib/exception_notifier/datadog_notifier.rb +153 -0
- data/lib/exception_notifier/email_notifier.rb +64 -87
- data/lib/exception_notifier/google_chat_notifier.rb +25 -119
- data/lib/exception_notifier/hipchat_notifier.rb +11 -12
- data/lib/exception_notifier/irc_notifier.rb +32 -30
- data/lib/exception_notifier/mattermost_notifier.rb +47 -140
- data/lib/exception_notifier/modules/backtrace_cleaner.rb +0 -2
- data/lib/exception_notifier/modules/error_grouping.rb +5 -5
- data/lib/exception_notifier/modules/formatter.rb +118 -0
- data/lib/exception_notifier/notifier.rb +5 -6
- data/lib/exception_notifier/slack_notifier.rb +63 -40
- data/lib/exception_notifier/sns_notifier.rb +17 -11
- data/lib/exception_notifier/teams_notifier.rb +58 -44
- data/lib/exception_notifier/views/exception_notifier/_backtrace.html.erb +1 -1
- data/lib/exception_notifier/views/exception_notifier/_environment.text.erb +1 -1
- data/lib/exception_notifier/views/exception_notifier/_request.text.erb +1 -1
- data/lib/exception_notifier/views/exception_notifier/exception_notification.html.erb +2 -2
- data/lib/exception_notifier/views/exception_notifier/exception_notification.text.erb +2 -2
- data/lib/exception_notifier/webhook_notifier.rb +14 -11
- data/lib/generators/exception_notification/install_generator.rb +5 -5
- data/lib/generators/exception_notification/templates/{exception_notification.rb → exception_notification.rb.erb} +13 -11
- data/test/exception_notification/rack_test.rb +27 -11
- data/test/exception_notification/resque_test.rb +52 -0
- data/test/exception_notifier/campfire_notifier_test.rb +42 -42
- data/test/exception_notifier/datadog_notifier_test.rb +151 -0
- data/test/exception_notifier/email_notifier_test.rb +269 -153
- data/test/exception_notifier/google_chat_notifier_test.rb +154 -101
- data/test/exception_notifier/hipchat_notifier_test.rb +78 -81
- data/test/exception_notifier/irc_notifier_test.rb +34 -34
- data/test/exception_notifier/mattermost_notifier_test.rb +164 -67
- data/test/exception_notifier/modules/error_grouping_test.rb +39 -40
- data/test/exception_notifier/modules/formatter_test.rb +150 -0
- data/test/exception_notifier/sidekiq_test.rb +6 -6
- data/test/exception_notifier/slack_notifier_test.rb +61 -60
- data/test/exception_notifier/sns_notifier_test.rb +27 -32
- data/test/exception_notifier/teams_notifier_test.rb +23 -26
- data/test/exception_notifier/webhook_notifier_test.rb +48 -46
- data/test/exception_notifier_test.rb +41 -38
- data/test/{dummy/app → support}/views/exception_notifier/_new_bkg_section.html.erb +0 -0
- data/test/{dummy/app → support}/views/exception_notifier/_new_bkg_section.text.erb +0 -0
- data/test/{dummy/app → support}/views/exception_notifier/_new_section.html.erb +0 -0
- data/test/{dummy/app → support}/views/exception_notifier/_new_section.text.erb +0 -0
- data/test/test_helper.rb +11 -14
- metadata +136 -166
- data/test/dummy/.gitignore +0 -4
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/controllers/application_controller.rb +0 -3
- data/test/dummy/app/controllers/posts_controller.rb +0 -30
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/helpers/posts_helper.rb +0 -2
- data/test/dummy/app/models/post.rb +0 -2
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/app/views/posts/_form.html.erb +0 -0
- data/test/dummy/app/views/posts/new.html.erb +0 -0
- data/test/dummy/app/views/posts/show.html.erb +0 -0
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -42
- data/test/dummy/config/boot.rb +0 -6
- data/test/dummy/config/database.yml +0 -22
- data/test/dummy/config/environment.rb +0 -17
- data/test/dummy/config/environments/development.rb +0 -25
- data/test/dummy/config/environments/production.rb +0 -50
- data/test/dummy/config/environments/test.rb +0 -35
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/inflections.rb +0 -10
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -8
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/locales/en.yml +0 -5
- data/test/dummy/config/routes.rb +0 -3
- data/test/dummy/db/migrate/20110729022608_create_posts.rb +0 -15
- data/test/dummy/db/schema.rb +0 -24
- data/test/dummy/db/seeds.rb +0 -7
- data/test/dummy/lib/tasks/.gitkeep +0 -0
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -26
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/public/images/rails.png +0 -0
- data/test/dummy/public/index.html +0 -239
- data/test/dummy/public/javascripts/application.js +0 -2
- data/test/dummy/public/javascripts/controls.js +0 -965
- data/test/dummy/public/javascripts/dragdrop.js +0 -974
- data/test/dummy/public/javascripts/effects.js +0 -1123
- data/test/dummy/public/javascripts/prototype.js +0 -6001
- data/test/dummy/public/javascripts/rails.js +0 -191
- data/test/dummy/public/robots.txt +0 -5
- data/test/dummy/public/stylesheets/.gitkeep +0 -0
- data/test/dummy/public/stylesheets/scaffold.css +0 -56
- data/test/dummy/script/rails +0 -6
- data/test/dummy/test/functional/posts_controller_test.rb +0 -237
- data/test/dummy/test/test_helper.rb +0 -7
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
### WebHook notifier
|
|
2
|
+
|
|
3
|
+
This notifier ships notifications over the HTTP protocol.
|
|
4
|
+
|
|
5
|
+
#### Usage
|
|
6
|
+
|
|
7
|
+
Just add the [HTTParty](https://github.com/jnunemaker/httparty) gem to your `Gemfile`:
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
gem 'httparty'
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
To configure it, you need to set the `url` option, like this:
|
|
14
|
+
|
|
15
|
+
```ruby
|
|
16
|
+
Rails.application.config.middleware.use ExceptionNotification::Rack,
|
|
17
|
+
email: {
|
|
18
|
+
email_prefix: '[PREFIX] ',
|
|
19
|
+
sender_address: %{"notifier" <notifier@example.com>},
|
|
20
|
+
exception_recipients: %w{exceptions@example.com}
|
|
21
|
+
},
|
|
22
|
+
webhook: {
|
|
23
|
+
url: 'http://domain.com:5555/hubot/path'
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
By default, the WebhookNotifier will call the URLs using the POST method. But, you can change this using the `http_method` option.
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
Rails.application.config.middleware.use ExceptionNotification::Rack,
|
|
31
|
+
email: {
|
|
32
|
+
email_prefix: '[PREFIX] ',
|
|
33
|
+
sender_address: %{"notifier" <notifier@example.com>},
|
|
34
|
+
exception_recipients: %w{exceptions@example.com}
|
|
35
|
+
},
|
|
36
|
+
webhook: {
|
|
37
|
+
url: 'http://domain.com:5555/hubot/path',
|
|
38
|
+
http_method: :get
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Besides the `url` and `http_method` options, all the other options are passed directly to HTTParty. Thus, if the HTTP server requires authentication, you can include the following options:
|
|
43
|
+
|
|
44
|
+
```ruby
|
|
45
|
+
Rails.application.config.middleware.use ExceptionNotification::Rack,
|
|
46
|
+
email: {
|
|
47
|
+
email_prefix: '[PREFIX] ',
|
|
48
|
+
sender_address: %{"notifier" <notifier@example.com>},
|
|
49
|
+
exception_recipients: %w{exceptions@example.com}
|
|
50
|
+
},
|
|
51
|
+
webhook: {
|
|
52
|
+
url: 'http://domain.com:5555/hubot/path',
|
|
53
|
+
basic_auth: {
|
|
54
|
+
username: 'alice',
|
|
55
|
+
password: 'password'
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
For more HTTParty options, check out the [documentation](https://github.com/jnunemaker/httparty).
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# -------------------------------------------
|
|
2
|
+
# To run the application: ruby examples/sample_app.rb
|
|
3
|
+
# -------------------------------------------
|
|
4
|
+
|
|
5
|
+
require 'bundler/inline'
|
|
6
|
+
|
|
7
|
+
gemfile do
|
|
8
|
+
source 'https://rubygems.org'
|
|
9
|
+
|
|
10
|
+
gem 'rails', '5.0.0'
|
|
11
|
+
gem 'exception_notification', '4.3.0'
|
|
12
|
+
gem 'httparty', '0.15.7'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class SampleApp < Rails::Application
|
|
16
|
+
config.middleware.use ExceptionNotification::Rack,
|
|
17
|
+
webhook: {
|
|
18
|
+
url: 'http://example.com'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
config.secret_key_base = 'my secret key base'
|
|
22
|
+
|
|
23
|
+
Rails.logger = Logger.new($stdout)
|
|
24
|
+
|
|
25
|
+
routes.draw do
|
|
26
|
+
get '/', to: 'exceptions#index'
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
require 'action_controller/railtie'
|
|
31
|
+
|
|
32
|
+
class ExceptionsController < ActionController::Base
|
|
33
|
+
def index
|
|
34
|
+
raise 'Sample exception raised, you should receive a notification!'
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
require 'minitest/autorun'
|
|
39
|
+
|
|
40
|
+
class Test < Minitest::Test
|
|
41
|
+
include Rack::Test::Methods
|
|
42
|
+
|
|
43
|
+
def test_raise_exception
|
|
44
|
+
get '/'
|
|
45
|
+
|
|
46
|
+
assert last_response.server_error?
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def app
|
|
52
|
+
Rails.application
|
|
53
|
+
end
|
|
54
|
+
end
|
data/examples/sinatra/Gemfile
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
source
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
|
-
gem
|
|
3
|
+
gem 'exception_notification', path: '../../'
|
|
4
4
|
|
|
5
|
-
gem
|
|
6
|
-
gem
|
|
7
|
-
gem
|
|
8
|
-
gem
|
|
5
|
+
gem 'foreman'
|
|
6
|
+
gem 'mailcatcher'
|
|
7
|
+
gem 'sinatra', '~> 1.3.5'
|
|
8
|
+
gem 'thin', '~> 1.5.1'
|
data/examples/sinatra/config.ru
CHANGED
|
@@ -5,27 +5,31 @@ require 'exception_notification'
|
|
|
5
5
|
|
|
6
6
|
class SinatraApp < Sinatra::Base
|
|
7
7
|
use Rack::Config do |env|
|
|
8
|
-
env[
|
|
8
|
+
env['action_dispatch.parameter_filter'] = [:password] # This is highly recommended. It will prevent the ExceptionNotification email from including your users' passwords
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
use ExceptionNotification::Rack,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
email: {
|
|
13
|
+
email_prefix: '[Example] ',
|
|
14
|
+
sender_address: %("notifier" <notifier@example.com>),
|
|
15
|
+
exception_recipients: %w[exceptions@example.com],
|
|
16
|
+
smtp_settings: {
|
|
17
|
+
address: 'localhost',
|
|
18
|
+
port: 1025
|
|
19
|
+
}
|
|
20
|
+
}
|
|
18
21
|
|
|
19
22
|
get '/' do
|
|
20
23
|
raise StandardError, "ERROR: #{params[:error]}" unless params[:error].blank?
|
|
24
|
+
|
|
21
25
|
'Everything is fine! Now, lets break things clicking <a href="/?error=ops"> here </a>. Dont forget to see the emails at <a href="http://localhost:1080">mailcatcher</a> !'
|
|
22
26
|
end
|
|
23
27
|
|
|
24
28
|
get '/background_notification' do
|
|
25
29
|
begin
|
|
26
|
-
1/0
|
|
27
|
-
rescue
|
|
28
|
-
ExceptionNotifier.notify_exception(e, :
|
|
30
|
+
1 / 0
|
|
31
|
+
rescue StandardError => e
|
|
32
|
+
ExceptionNotifier.notify_exception(e, data: { msg: 'Cannot divide by zero!' })
|
|
29
33
|
end
|
|
30
34
|
'Check email at <a href="http://localhost:1080">mailcatcher</a>.'
|
|
31
35
|
end
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
require File.expand_path('../lib/exception_notification/version', __FILE__)
|
|
2
|
+
|
|
1
3
|
Gem::Specification.new do |s|
|
|
2
4
|
s.name = 'exception_notification'
|
|
3
|
-
s.version =
|
|
4
|
-
s.authors = [
|
|
5
|
-
s.date =
|
|
6
|
-
s.summary =
|
|
7
|
-
s.homepage =
|
|
8
|
-
s.email =
|
|
9
|
-
s.license =
|
|
5
|
+
s.version = ExceptionNotification::VERSION
|
|
6
|
+
s.authors = ['Jamis Buck', 'Josh Peek']
|
|
7
|
+
s.date = '2019-08-16'
|
|
8
|
+
s.summary = 'Exception notification for Rails apps'
|
|
9
|
+
s.homepage = 'https://smartinez87.github.io/exception_notification/'
|
|
10
|
+
s.email = 'smartinez87@gmail.com'
|
|
11
|
+
s.license = 'MIT'
|
|
10
12
|
|
|
11
13
|
s.required_ruby_version = '>= 2.0'
|
|
12
14
|
s.required_rubygems_version = '>= 1.8.11'
|
|
@@ -16,21 +18,24 @@ Gem::Specification.new do |s|
|
|
|
16
18
|
s.test_files = `git ls-files -- test`.split("\n")
|
|
17
19
|
s.require_path = 'lib'
|
|
18
20
|
|
|
19
|
-
s.add_dependency(
|
|
20
|
-
s.add_dependency(
|
|
21
|
+
s.add_dependency('actionmailer', '>= 4.0', '< 7')
|
|
22
|
+
s.add_dependency('activesupport', '>= 4.0', '< 7')
|
|
21
23
|
|
|
22
|
-
s.add_development_dependency
|
|
23
|
-
s.add_development_dependency
|
|
24
|
+
s.add_development_dependency 'appraisal', '~> 2.2.0'
|
|
25
|
+
s.add_development_dependency 'aws-sdk-sns', '~> 1'
|
|
26
|
+
s.add_development_dependency 'carrier-pigeon', '>= 0.7.0'
|
|
27
|
+
s.add_development_dependency 'coveralls', '~> 0.8.2'
|
|
28
|
+
s.add_development_dependency 'dogapi', '>= 1.23.0'
|
|
29
|
+
s.add_development_dependency 'hipchat', '>= 1.0.0'
|
|
30
|
+
s.add_development_dependency 'httparty', '~> 0.10.2'
|
|
31
|
+
s.add_development_dependency 'mock_redis', '~> 0.18.0'
|
|
32
|
+
s.add_development_dependency 'mocha', '>= 0.13.0'
|
|
33
|
+
s.add_development_dependency 'rails', '>= 4.0', '< 7'
|
|
34
|
+
s.add_development_dependency 'resque', '~> 1.8.0'
|
|
35
|
+
s.add_development_dependency 'rubocop', '0.50.0'
|
|
24
36
|
# Sidekiq 3.2.2 does not support Ruby 1.9.
|
|
25
|
-
s.add_development_dependency
|
|
26
|
-
s.add_development_dependency
|
|
27
|
-
s.add_development_dependency
|
|
28
|
-
s.add_development_dependency
|
|
29
|
-
s.add_development_dependency "sqlite3", ">= 1.3.4"
|
|
30
|
-
s.add_development_dependency "coveralls", "~> 0.8.2"
|
|
31
|
-
s.add_development_dependency "appraisal", "~> 2.0.0"
|
|
32
|
-
s.add_development_dependency "hipchat", ">= 1.0.0"
|
|
33
|
-
s.add_development_dependency "carrier-pigeon", ">= 0.7.0"
|
|
34
|
-
s.add_development_dependency "slack-notifier", ">= 1.0.0"
|
|
35
|
-
s.add_development_dependency "aws-sdk-sns", "~> 1"
|
|
37
|
+
s.add_development_dependency 'sidekiq', '~> 3.0.0', '< 3.2.2'
|
|
38
|
+
s.add_development_dependency 'slack-notifier', '>= 1.0.0'
|
|
39
|
+
s.add_development_dependency 'timecop', '~>0.9.0'
|
|
40
|
+
s.add_development_dependency 'tinder', '~> 1.8'
|
|
36
41
|
end
|
data/gemfiles/rails4_0.gemfile
CHANGED
data/gemfiles/rails4_1.gemfile
CHANGED
data/gemfiles/rails4_2.gemfile
CHANGED
data/gemfiles/rails5_0.gemfile
CHANGED
data/gemfiles/rails5_1.gemfile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module ExceptionNotification
|
|
2
2
|
class Rack
|
|
3
|
-
class CascadePassException <
|
|
3
|
+
class CascadePassException < RuntimeError; end
|
|
4
4
|
|
|
5
5
|
def initialize(app, options = {})
|
|
6
6
|
@app = app
|
|
@@ -12,7 +12,7 @@ module ExceptionNotification
|
|
|
12
12
|
|
|
13
13
|
if options.key?(:error_grouping_cache)
|
|
14
14
|
ExceptionNotifier.error_grouping_cache = options.delete(:error_grouping_cache)
|
|
15
|
-
elsif defined?(Rails)
|
|
15
|
+
elsif defined?(Rails) && Rails.respond_to?(:cache)
|
|
16
16
|
ExceptionNotifier.error_grouping_cache = Rails.cache
|
|
17
17
|
end
|
|
18
18
|
|
|
@@ -23,12 +23,7 @@ module ExceptionNotification
|
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
if options.key?(:ignore_crawlers)
|
|
27
|
-
ignore_crawlers = options.delete(:ignore_crawlers)
|
|
28
|
-
ExceptionNotifier.ignore_if do |exception, opts|
|
|
29
|
-
opts.key?(:env) && from_crawler(opts[:env], ignore_crawlers)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
26
|
+
ExceptionNotifier.ignore_crawlers(options.delete(:ignore_crawlers)) if options.key?(:ignore_crawlers)
|
|
32
27
|
|
|
33
28
|
@ignore_cascade_pass = options.delete(:ignore_cascade_pass) { true }
|
|
34
29
|
|
|
@@ -38,31 +33,23 @@ module ExceptionNotification
|
|
|
38
33
|
end
|
|
39
34
|
|
|
40
35
|
def call(env)
|
|
41
|
-
_, headers,
|
|
36
|
+
_, headers, = response = @app.call(env)
|
|
42
37
|
|
|
43
38
|
if !@ignore_cascade_pass && headers['X-Cascade'] == 'pass'
|
|
44
|
-
msg = "This exception means that the preceding Rack middleware set the 'X-Cascade' header to 'pass' -- in "
|
|
45
|
-
|
|
39
|
+
msg = "This exception means that the preceding Rack middleware set the 'X-Cascade' header to 'pass' -- in " \
|
|
40
|
+
'Rails, this often means that the route was not found (404 error).'
|
|
46
41
|
raise CascadePassException, msg
|
|
47
42
|
end
|
|
48
43
|
|
|
49
44
|
response
|
|
50
45
|
rescue Exception => exception
|
|
51
|
-
if ExceptionNotifier.notify_exception(exception, :
|
|
46
|
+
if ExceptionNotifier.notify_exception(exception, env: env)
|
|
52
47
|
env['exception_notifier.delivered'] = true
|
|
53
48
|
end
|
|
54
49
|
|
|
55
50
|
raise exception unless exception.is_a?(CascadePassException)
|
|
56
|
-
response
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
private
|
|
60
51
|
|
|
61
|
-
|
|
62
|
-
agent = env['HTTP_USER_AGENT']
|
|
63
|
-
Array(ignored_crawlers).any? do |crawler|
|
|
64
|
-
agent =~ Regexp.new(crawler)
|
|
65
|
-
end
|
|
52
|
+
response
|
|
66
53
|
end
|
|
67
54
|
end
|
|
68
55
|
end
|
|
@@ -2,23 +2,21 @@ require 'resque/failure/base'
|
|
|
2
2
|
|
|
3
3
|
module ExceptionNotification
|
|
4
4
|
class Resque < Resque::Failure::Base
|
|
5
|
-
|
|
6
5
|
def self.count
|
|
7
|
-
Stat[:failed]
|
|
6
|
+
::Resque::Stat[:failed]
|
|
8
7
|
end
|
|
9
8
|
|
|
10
9
|
def save
|
|
11
10
|
data = {
|
|
12
|
-
:
|
|
13
|
-
:
|
|
14
|
-
:
|
|
15
|
-
:
|
|
16
|
-
:
|
|
17
|
-
:
|
|
11
|
+
error_class: exception.class.name,
|
|
12
|
+
error_message: exception.message,
|
|
13
|
+
failed_at: Time.now.to_s,
|
|
14
|
+
payload: payload,
|
|
15
|
+
queue: queue,
|
|
16
|
+
worker: worker.to_s
|
|
18
17
|
}
|
|
19
18
|
|
|
20
|
-
ExceptionNotifier.notify_exception(exception, :
|
|
19
|
+
ExceptionNotifier.notify_exception(exception, data: { resque: data })
|
|
21
20
|
end
|
|
22
|
-
|
|
23
21
|
end
|
|
24
22
|
end
|
|
@@ -3,16 +3,12 @@ require 'sidekiq'
|
|
|
3
3
|
# Note: this class is only needed for Sidekiq version < 3.
|
|
4
4
|
module ExceptionNotification
|
|
5
5
|
class Sidekiq
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
ExceptionNotifier.notify_exception(exception, :data => { :sidekiq => msg })
|
|
12
|
-
raise exception
|
|
13
|
-
end
|
|
6
|
+
def call(_worker, msg, _queue)
|
|
7
|
+
yield
|
|
8
|
+
rescue Exception => exception
|
|
9
|
+
ExceptionNotifier.notify_exception(exception, data: { sidekiq: msg })
|
|
10
|
+
raise exception
|
|
14
11
|
end
|
|
15
|
-
|
|
16
12
|
end
|
|
17
13
|
end
|
|
18
14
|
|
|
@@ -24,8 +20,8 @@ if ::Sidekiq::VERSION < '3'
|
|
|
24
20
|
end
|
|
25
21
|
else
|
|
26
22
|
::Sidekiq.configure_server do |config|
|
|
27
|
-
config.error_handlers <<
|
|
28
|
-
ExceptionNotifier.notify_exception(ex, :
|
|
29
|
-
|
|
23
|
+
config.error_handlers << proc do |ex, context|
|
|
24
|
+
ExceptionNotifier.notify_exception(ex, data: { sidekiq: context })
|
|
25
|
+
end
|
|
30
26
|
end
|
|
31
27
|
end
|