exception_notification 4.3.0 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +2 -2
  3. data/CHANGELOG.rdoc +14 -0
  4. data/CONTRIBUTING.md +18 -0
  5. data/Gemfile +1 -1
  6. data/README.md +64 -935
  7. data/Rakefile +2 -2
  8. data/docs/notifiers/campfire.md +50 -0
  9. data/docs/notifiers/custom.md +42 -0
  10. data/docs/notifiers/datadog.md +51 -0
  11. data/docs/notifiers/email.md +195 -0
  12. data/docs/notifiers/google_chat.md +31 -0
  13. data/docs/notifiers/hipchat.md +66 -0
  14. data/docs/notifiers/irc.md +97 -0
  15. data/docs/notifiers/mattermost.md +115 -0
  16. data/docs/notifiers/slack.md +161 -0
  17. data/docs/notifiers/sns.md +37 -0
  18. data/docs/notifiers/teams.md +54 -0
  19. data/docs/notifiers/webhook.md +60 -0
  20. data/examples/sample_app.rb +54 -0
  21. data/examples/sinatra/Gemfile +6 -6
  22. data/examples/sinatra/config.ru +1 -1
  23. data/examples/sinatra/sinatra_app.rb +14 -10
  24. data/exception_notification.gemspec +27 -22
  25. data/gemfiles/rails4_0.gemfile +3 -3
  26. data/gemfiles/rails4_1.gemfile +3 -3
  27. data/gemfiles/rails4_2.gemfile +3 -3
  28. data/gemfiles/rails5_0.gemfile +3 -3
  29. data/gemfiles/rails5_1.gemfile +3 -3
  30. data/gemfiles/rails5_2.gemfile +7 -0
  31. data/gemfiles/rails6_0.gemfile +7 -0
  32. data/lib/exception_notification.rb +1 -0
  33. data/lib/exception_notification/rack.rb +8 -21
  34. data/lib/exception_notification/resque.rb +8 -10
  35. data/lib/exception_notification/sidekiq.rb +8 -12
  36. data/lib/exception_notification/version.rb +3 -0
  37. data/lib/exception_notifier.rb +20 -3
  38. data/lib/exception_notifier/base_notifier.rb +2 -3
  39. data/lib/exception_notifier/campfire_notifier.rb +12 -13
  40. data/lib/exception_notifier/datadog_notifier.rb +153 -0
  41. data/lib/exception_notifier/email_notifier.rb +64 -87
  42. data/lib/exception_notifier/google_chat_notifier.rb +25 -119
  43. data/lib/exception_notifier/hipchat_notifier.rb +11 -12
  44. data/lib/exception_notifier/irc_notifier.rb +32 -30
  45. data/lib/exception_notifier/mattermost_notifier.rb +47 -140
  46. data/lib/exception_notifier/modules/backtrace_cleaner.rb +0 -2
  47. data/lib/exception_notifier/modules/error_grouping.rb +5 -5
  48. data/lib/exception_notifier/modules/formatter.rb +118 -0
  49. data/lib/exception_notifier/notifier.rb +5 -6
  50. data/lib/exception_notifier/slack_notifier.rb +63 -40
  51. data/lib/exception_notifier/sns_notifier.rb +17 -11
  52. data/lib/exception_notifier/teams_notifier.rb +58 -44
  53. data/lib/exception_notifier/views/exception_notifier/_backtrace.html.erb +1 -1
  54. data/lib/exception_notifier/views/exception_notifier/_environment.text.erb +1 -1
  55. data/lib/exception_notifier/views/exception_notifier/_request.text.erb +1 -1
  56. data/lib/exception_notifier/views/exception_notifier/exception_notification.html.erb +2 -2
  57. data/lib/exception_notifier/views/exception_notifier/exception_notification.text.erb +2 -2
  58. data/lib/exception_notifier/webhook_notifier.rb +14 -11
  59. data/lib/generators/exception_notification/install_generator.rb +5 -5
  60. data/lib/generators/exception_notification/templates/{exception_notification.rb → exception_notification.rb.erb} +13 -11
  61. data/test/exception_notification/rack_test.rb +27 -11
  62. data/test/exception_notification/resque_test.rb +52 -0
  63. data/test/exception_notifier/campfire_notifier_test.rb +42 -42
  64. data/test/exception_notifier/datadog_notifier_test.rb +151 -0
  65. data/test/exception_notifier/email_notifier_test.rb +269 -153
  66. data/test/exception_notifier/google_chat_notifier_test.rb +154 -101
  67. data/test/exception_notifier/hipchat_notifier_test.rb +78 -81
  68. data/test/exception_notifier/irc_notifier_test.rb +34 -34
  69. data/test/exception_notifier/mattermost_notifier_test.rb +164 -67
  70. data/test/exception_notifier/modules/error_grouping_test.rb +39 -40
  71. data/test/exception_notifier/modules/formatter_test.rb +150 -0
  72. data/test/exception_notifier/sidekiq_test.rb +6 -6
  73. data/test/exception_notifier/slack_notifier_test.rb +61 -60
  74. data/test/exception_notifier/sns_notifier_test.rb +27 -32
  75. data/test/exception_notifier/teams_notifier_test.rb +23 -26
  76. data/test/exception_notifier/webhook_notifier_test.rb +48 -46
  77. data/test/exception_notifier_test.rb +41 -38
  78. data/test/{dummy/app → support}/views/exception_notifier/_new_bkg_section.html.erb +0 -0
  79. data/test/{dummy/app → support}/views/exception_notifier/_new_bkg_section.text.erb +0 -0
  80. data/test/{dummy/app → support}/views/exception_notifier/_new_section.html.erb +0 -0
  81. data/test/{dummy/app → support}/views/exception_notifier/_new_section.text.erb +0 -0
  82. data/test/test_helper.rb +11 -14
  83. metadata +136 -166
  84. data/test/dummy/.gitignore +0 -4
  85. data/test/dummy/Rakefile +0 -7
  86. data/test/dummy/app/controllers/application_controller.rb +0 -3
  87. data/test/dummy/app/controllers/posts_controller.rb +0 -30
  88. data/test/dummy/app/helpers/application_helper.rb +0 -2
  89. data/test/dummy/app/helpers/posts_helper.rb +0 -2
  90. data/test/dummy/app/models/post.rb +0 -2
  91. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  92. data/test/dummy/app/views/posts/_form.html.erb +0 -0
  93. data/test/dummy/app/views/posts/new.html.erb +0 -0
  94. data/test/dummy/app/views/posts/show.html.erb +0 -0
  95. data/test/dummy/config.ru +0 -4
  96. data/test/dummy/config/application.rb +0 -42
  97. data/test/dummy/config/boot.rb +0 -6
  98. data/test/dummy/config/database.yml +0 -22
  99. data/test/dummy/config/environment.rb +0 -17
  100. data/test/dummy/config/environments/development.rb +0 -25
  101. data/test/dummy/config/environments/production.rb +0 -50
  102. data/test/dummy/config/environments/test.rb +0 -35
  103. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  104. data/test/dummy/config/initializers/inflections.rb +0 -10
  105. data/test/dummy/config/initializers/mime_types.rb +0 -5
  106. data/test/dummy/config/initializers/secret_token.rb +0 -8
  107. data/test/dummy/config/initializers/session_store.rb +0 -8
  108. data/test/dummy/config/locales/en.yml +0 -5
  109. data/test/dummy/config/routes.rb +0 -3
  110. data/test/dummy/db/migrate/20110729022608_create_posts.rb +0 -15
  111. data/test/dummy/db/schema.rb +0 -24
  112. data/test/dummy/db/seeds.rb +0 -7
  113. data/test/dummy/lib/tasks/.gitkeep +0 -0
  114. data/test/dummy/public/404.html +0 -26
  115. data/test/dummy/public/422.html +0 -26
  116. data/test/dummy/public/500.html +0 -26
  117. data/test/dummy/public/favicon.ico +0 -0
  118. data/test/dummy/public/images/rails.png +0 -0
  119. data/test/dummy/public/index.html +0 -239
  120. data/test/dummy/public/javascripts/application.js +0 -2
  121. data/test/dummy/public/javascripts/controls.js +0 -965
  122. data/test/dummy/public/javascripts/dragdrop.js +0 -974
  123. data/test/dummy/public/javascripts/effects.js +0 -1123
  124. data/test/dummy/public/javascripts/prototype.js +0 -6001
  125. data/test/dummy/public/javascripts/rails.js +0 -191
  126. data/test/dummy/public/robots.txt +0 -5
  127. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  128. data/test/dummy/public/stylesheets/scaffold.css +0 -56
  129. data/test/dummy/script/rails +0 -6
  130. data/test/dummy/test/functional/posts_controller_test.rb +0 -237
  131. 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
@@ -1,8 +1,8 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- gem "exception_notification", path: "../../"
3
+ gem 'exception_notification', path: '../../'
4
4
 
5
- gem "thin", "~> 1.5.1"
6
- gem "sinatra", "~> 1.3.5"
7
- gem "foreman"
8
- gem "mailcatcher"
5
+ gem 'foreman'
6
+ gem 'mailcatcher'
7
+ gem 'sinatra', '~> 1.3.5'
8
+ gem 'thin', '~> 1.5.1'
@@ -1,3 +1,3 @@
1
- require ::File.expand_path('../sinatra_app', __FILE__)
1
+ require ::File.expand_path('../sinatra_app', __FILE__)
2
2
 
3
3
  run SinatraApp
@@ -5,27 +5,31 @@ require 'exception_notification'
5
5
 
6
6
  class SinatraApp < Sinatra::Base
7
7
  use Rack::Config do |env|
8
- env["action_dispatch.parameter_filter"] = [:password] # This is highly recommended. It will prevent the ExceptionNotification email from including your users' passwords
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
- :email => {
13
- :email_prefix => "[Example] ",
14
- :sender_address => %{"notifier" <notifier@example.com>},
15
- :exception_recipients => %w{exceptions@example.com},
16
- :smtp_settings => { :address => "localhost", :port => 1025 }
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 Exception => e
28
- ExceptionNotifier.notify_exception(e, :data => {:msg => "Cannot divide by zero!"})
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.3.0'
4
- s.authors = ["Jamis Buck", "Josh Peek"]
5
- s.date = %q{2018-11-22}
6
- s.summary = "Exception notification for Rails apps"
7
- s.homepage = "https://smartinez87.github.io/exception_notification/"
8
- s.email = "smartinez87@gmail.com"
9
- s.license = "MIT"
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("actionmailer", ">= 4.0", "< 6")
20
- s.add_dependency("activesupport", ">= 4.0", "< 6")
21
+ s.add_dependency('actionmailer', '>= 4.0', '< 7')
22
+ s.add_dependency('activesupport', '>= 4.0', '< 7')
21
23
 
22
- s.add_development_dependency "rails", ">= 4.0", "< 6"
23
- s.add_development_dependency "resque", "~> 1.2.0"
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 "sidekiq", "~> 3.0.0", "< 3.2.2"
26
- s.add_development_dependency "tinder", "~> 1.8"
27
- s.add_development_dependency "httparty", "~> 0.10.2"
28
- s.add_development_dependency "mocha", ">= 0.13.0"
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
@@ -1,7 +1,7 @@
1
1
  # This file was generated by Appraisal
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
- gem "rails", "~> 4.0.5"
5
+ gem 'rails', '~> 4.0.5'
6
6
 
7
- gemspec :path => "../"
7
+ gemspec path: '../'
@@ -1,7 +1,7 @@
1
1
  # This file was generated by Appraisal
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
- gem "rails", "~> 4.1.1"
5
+ gem 'rails', '~> 4.1.1'
6
6
 
7
- gemspec :path => "../"
7
+ gemspec path: '../'
@@ -1,7 +1,7 @@
1
1
  # This file was generated by Appraisal
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
- gem "rails", "~> 4.2.0"
5
+ gem 'rails', '~> 4.2.0'
6
6
 
7
- gemspec :path => "../"
7
+ gemspec path: '../'
@@ -1,7 +1,7 @@
1
1
  # This file was generated by Appraisal
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
- gem "rails", "~> 5.0.0"
5
+ gem 'rails', '~> 5.0.0'
6
6
 
7
- gemspec :path => "../"
7
+ gemspec path: '../'
@@ -1,7 +1,7 @@
1
1
  # This file was generated by Appraisal
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
- gem "rails", "~> 5.1.0"
5
+ gem 'rails', '~> 5.1.0'
6
6
 
7
- gemspec :path => "../"
7
+ gemspec path: '../'
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'rails', '~> 5.2.0'
6
+
7
+ gemspec path: '../'
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 6.0.0"
6
+
7
+ gemspec path: "../"
@@ -1,5 +1,6 @@
1
1
  require 'exception_notifier'
2
2
  require 'exception_notification/rack'
3
+ require 'exception_notification/version'
3
4
 
4
5
  module ExceptionNotification
5
6
  # Alternative way to setup ExceptionNotification.
@@ -1,6 +1,6 @@
1
1
  module ExceptionNotification
2
2
  class Rack
3
- class CascadePassException < Exception; end
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, _ = response = @app.call(env)
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
- "Rails, this often means that the route was not found (404 error)."
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, :env => env)
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
- def from_crawler(env, ignored_crawlers)
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
- :failed_at => Time.now.to_s,
13
- :queue => queue,
14
- :worker => worker.to_s,
15
- :payload => payload,
16
- :error_class => exception.class.name,
17
- :error_message => exception.message
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, :data => { :resque => data })
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
- def call(worker, msg, queue)
8
- begin
9
- yield
10
- rescue Exception => exception
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 << Proc.new { |ex, context|
28
- ExceptionNotifier.notify_exception(ex, :data => { :sidekiq => context })
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