honeybadger 5.0.2 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +713 -701
  3. data/LICENSE +19 -19
  4. data/README.md +57 -57
  5. data/TROUBLESHOOTING.md +3 -3
  6. data/bin/honeybadger +5 -5
  7. data/lib/honeybadger/agent.rb +488 -488
  8. data/lib/honeybadger/backend/base.rb +116 -116
  9. data/lib/honeybadger/backend/debug.rb +22 -22
  10. data/lib/honeybadger/backend/null.rb +29 -29
  11. data/lib/honeybadger/backend/server.rb +62 -62
  12. data/lib/honeybadger/backend/test.rb +46 -46
  13. data/lib/honeybadger/backend.rb +27 -27
  14. data/lib/honeybadger/backtrace.rb +181 -181
  15. data/lib/honeybadger/breadcrumbs/active_support.rb +119 -119
  16. data/lib/honeybadger/breadcrumbs/breadcrumb.rb +53 -53
  17. data/lib/honeybadger/breadcrumbs/collector.rb +82 -82
  18. data/lib/honeybadger/breadcrumbs/logging.rb +51 -51
  19. data/lib/honeybadger/breadcrumbs/ring_buffer.rb +44 -44
  20. data/lib/honeybadger/breadcrumbs.rb +8 -8
  21. data/lib/honeybadger/cli/deploy.rb +43 -43
  22. data/lib/honeybadger/cli/exec.rb +143 -143
  23. data/lib/honeybadger/cli/helpers.rb +28 -28
  24. data/lib/honeybadger/cli/heroku.rb +129 -129
  25. data/lib/honeybadger/cli/install.rb +101 -101
  26. data/lib/honeybadger/cli/main.rb +237 -237
  27. data/lib/honeybadger/cli/notify.rb +67 -67
  28. data/lib/honeybadger/cli/test.rb +267 -267
  29. data/lib/honeybadger/cli.rb +14 -14
  30. data/lib/honeybadger/config/defaults.rb +336 -333
  31. data/lib/honeybadger/config/env.rb +42 -42
  32. data/lib/honeybadger/config/ruby.rb +146 -146
  33. data/lib/honeybadger/config/yaml.rb +76 -76
  34. data/lib/honeybadger/config.rb +413 -413
  35. data/lib/honeybadger/const.rb +20 -20
  36. data/lib/honeybadger/context_manager.rb +55 -55
  37. data/lib/honeybadger/conversions.rb +16 -16
  38. data/lib/honeybadger/init/rails.rb +38 -38
  39. data/lib/honeybadger/init/rake.rb +66 -66
  40. data/lib/honeybadger/init/ruby.rb +11 -11
  41. data/lib/honeybadger/init/sinatra.rb +51 -51
  42. data/lib/honeybadger/logging.rb +177 -177
  43. data/lib/honeybadger/notice.rb +579 -568
  44. data/lib/honeybadger/plugin.rb +210 -210
  45. data/lib/honeybadger/plugins/breadcrumbs.rb +111 -111
  46. data/lib/honeybadger/plugins/delayed_job/plugin.rb +56 -56
  47. data/lib/honeybadger/plugins/delayed_job.rb +22 -22
  48. data/lib/honeybadger/plugins/faktory.rb +52 -52
  49. data/lib/honeybadger/plugins/lambda.rb +71 -71
  50. data/lib/honeybadger/plugins/local_variables.rb +44 -44
  51. data/lib/honeybadger/plugins/passenger.rb +23 -23
  52. data/lib/honeybadger/plugins/rails.rb +72 -63
  53. data/lib/honeybadger/plugins/resque.rb +72 -72
  54. data/lib/honeybadger/plugins/shoryuken.rb +52 -52
  55. data/lib/honeybadger/plugins/sidekiq.rb +71 -62
  56. data/lib/honeybadger/plugins/sucker_punch.rb +18 -18
  57. data/lib/honeybadger/plugins/thor.rb +32 -32
  58. data/lib/honeybadger/plugins/warden.rb +19 -19
  59. data/lib/honeybadger/rack/error_notifier.rb +92 -92
  60. data/lib/honeybadger/rack/user_feedback.rb +88 -88
  61. data/lib/honeybadger/rack/user_informer.rb +45 -45
  62. data/lib/honeybadger/ruby.rb +2 -2
  63. data/lib/honeybadger/singleton.rb +103 -103
  64. data/lib/honeybadger/tasks.rb +22 -22
  65. data/lib/honeybadger/templates/feedback_form.erb +84 -84
  66. data/lib/honeybadger/util/http.rb +92 -92
  67. data/lib/honeybadger/util/lambda.rb +32 -32
  68. data/lib/honeybadger/util/request_hash.rb +73 -73
  69. data/lib/honeybadger/util/request_payload.rb +41 -41
  70. data/lib/honeybadger/util/revision.rb +39 -39
  71. data/lib/honeybadger/util/sanitizer.rb +214 -214
  72. data/lib/honeybadger/util/sql.rb +34 -34
  73. data/lib/honeybadger/util/stats.rb +50 -50
  74. data/lib/honeybadger/version.rb +4 -4
  75. data/lib/honeybadger/worker.rb +253 -253
  76. data/lib/honeybadger.rb +11 -11
  77. data/resources/ca-bundle.crt +3376 -3376
  78. data/vendor/capistrano-honeybadger/lib/capistrano/honeybadger.rb +5 -5
  79. data/vendor/capistrano-honeybadger/lib/capistrano/tasks/deploy.cap +89 -89
  80. data/vendor/capistrano-honeybadger/lib/honeybadger/capistrano/legacy.rb +47 -47
  81. data/vendor/capistrano-honeybadger/lib/honeybadger/capistrano.rb +2 -2
  82. data/vendor/cli/inifile.rb +628 -628
  83. data/vendor/cli/thor/actions/create_file.rb +103 -103
  84. data/vendor/cli/thor/actions/create_link.rb +59 -59
  85. data/vendor/cli/thor/actions/directory.rb +118 -118
  86. data/vendor/cli/thor/actions/empty_directory.rb +135 -135
  87. data/vendor/cli/thor/actions/file_manipulation.rb +316 -316
  88. data/vendor/cli/thor/actions/inject_into_file.rb +107 -107
  89. data/vendor/cli/thor/actions.rb +319 -319
  90. data/vendor/cli/thor/base.rb +656 -656
  91. data/vendor/cli/thor/command.rb +133 -133
  92. data/vendor/cli/thor/core_ext/hash_with_indifferent_access.rb +77 -77
  93. data/vendor/cli/thor/core_ext/io_binary_read.rb +10 -10
  94. data/vendor/cli/thor/core_ext/ordered_hash.rb +98 -98
  95. data/vendor/cli/thor/error.rb +32 -32
  96. data/vendor/cli/thor/group.rb +281 -281
  97. data/vendor/cli/thor/invocation.rb +178 -178
  98. data/vendor/cli/thor/line_editor/basic.rb +35 -35
  99. data/vendor/cli/thor/line_editor/readline.rb +88 -88
  100. data/vendor/cli/thor/line_editor.rb +17 -17
  101. data/vendor/cli/thor/parser/argument.rb +73 -73
  102. data/vendor/cli/thor/parser/arguments.rb +175 -175
  103. data/vendor/cli/thor/parser/option.rb +125 -125
  104. data/vendor/cli/thor/parser/options.rb +218 -218
  105. data/vendor/cli/thor/parser.rb +4 -4
  106. data/vendor/cli/thor/rake_compat.rb +71 -71
  107. data/vendor/cli/thor/runner.rb +322 -322
  108. data/vendor/cli/thor/shell/basic.rb +421 -421
  109. data/vendor/cli/thor/shell/color.rb +149 -149
  110. data/vendor/cli/thor/shell/html.rb +126 -126
  111. data/vendor/cli/thor/shell.rb +81 -81
  112. data/vendor/cli/thor/util.rb +267 -267
  113. data/vendor/cli/thor/version.rb +3 -3
  114. data/vendor/cli/thor.rb +484 -484
  115. metadata +10 -5
@@ -1,63 +1,72 @@
1
- require 'honeybadger/plugin'
2
-
3
- module Honeybadger
4
- module Plugins
5
- module Rails
6
- module ExceptionsCatcher
7
- # Adds additional Honeybadger info to Request env when an
8
- # exception is rendered in Rails' middleware.
9
- #
10
- # @param [Hash, ActionDispatch::Request] arg The Rack env +Hash+ in
11
- # Rails 3.0-4.2. After Rails 5 +arg+ is an +ActionDispatch::Request+.
12
- # @param [Exception] exception The error which was rescued.
13
- #
14
- # @return The super value of the middleware's +#render_exception()+
15
- # method.
16
- def render_exception(arg, exception)
17
- if arg.kind_of?(::ActionDispatch::Request)
18
- request = arg
19
- env = request.env
20
- else
21
- request = ::Rack::Request.new(arg)
22
- env = arg
23
- end
24
-
25
- env['honeybadger.exception'] = exception
26
- env['honeybadger.request.url'] = request.url rescue nil
27
-
28
- super(arg, exception)
29
- end
30
- end
31
-
32
- class ErrorSubscriber
33
- def self.report(exception, handled:, severity:, context: {}, source: nil)
34
- return if source && ::Honeybadger.config[:'rails.subscriber_ignore_sources'].any? { |regex| regex.match?(source) }
35
-
36
- tags = ["severity:#{severity}", "handled:#{handled}"]
37
- tags << "source:#{source}" if source
38
- Honeybadger.notify(exception, context: context, tags: tags)
39
- end
40
- end
41
-
42
- Plugin.register :rails_exceptions_catcher do
43
- requirement { defined?(::Rails.application) && ::Rails.application }
44
-
45
- execution do
46
- require 'rack/request'
47
- if defined?(::ActionDispatch::DebugExceptions)
48
- # Rails 3.2.x+
49
- ::ActionDispatch::DebugExceptions.prepend(ExceptionsCatcher)
50
- elsif defined?(::ActionDispatch::ShowExceptions)
51
- # Rails 3.0.x and 3.1.x
52
- ::ActionDispatch::ShowExceptions.prepend(ExceptionsCatcher)
53
- end
54
-
55
- if defined?(::ActiveSupport::ErrorReporter)
56
- # Rails 7
57
- ::Rails.error.subscribe(ErrorSubscriber)
58
- end
59
- end
60
- end
61
- end
62
- end
63
- end
1
+ require 'honeybadger/plugin'
2
+
3
+ module Honeybadger
4
+ module Plugins
5
+ module Rails
6
+ module ExceptionsCatcher
7
+ # Adds additional Honeybadger info to Request env when an
8
+ # exception is rendered in Rails' middleware.
9
+ #
10
+ # @param [Hash, ActionDispatch::Request] arg The Rack env +Hash+ in
11
+ # Rails 3.0-4.2. After Rails 5 +arg+ is an +ActionDispatch::Request+.
12
+ # @param [Exception] exception The error which was rescued.
13
+ #
14
+ # @return The super value of the middleware's +#render_exception()+
15
+ # method.
16
+ def render_exception(arg, exception, *args)
17
+ if arg.kind_of?(::ActionDispatch::Request)
18
+ request = arg
19
+ env = request.env
20
+ else
21
+ request = ::Rack::Request.new(arg)
22
+ env = arg
23
+ end
24
+
25
+ env['honeybadger.exception'] = exception
26
+ env['honeybadger.request.url'] = request.url rescue nil
27
+
28
+ super(arg, exception, *args)
29
+ end
30
+ end
31
+
32
+ class ErrorSubscriber
33
+ def self.report(exception, handled:, severity:, context: {}, source: nil)
34
+ # We only report unhandled errors (`Rails.error.handle`)
35
+ # Unhandled errors will be caught by our integrations (eg middleware), which have richer context
36
+ return unless handled
37
+
38
+ return if source_ignored?(source)
39
+
40
+ tags = ["severity:#{severity}", "handled:#{handled}"]
41
+ tags << "source:#{source}" if source
42
+ Honeybadger.notify(exception, context: context, tags: tags)
43
+ end
44
+
45
+ def self.source_ignored?(source)
46
+ source && ::Honeybadger.config[:'rails.subscriber_ignore_sources'].any? do |ignored_source|
47
+ ignored_source.is_a?(Regexp) ? ignored_source.match?(source) : (ignored_source == source)
48
+ end
49
+ end
50
+ end
51
+
52
+ Plugin.register :rails_exceptions_catcher do
53
+ requirement { defined?(::Rails.application) && ::Rails.application }
54
+
55
+ execution do
56
+ require 'rack/request'
57
+ if defined?(::ActionDispatch::DebugExceptions)
58
+ # Rails 3.2.x+
59
+ ::ActionDispatch::DebugExceptions.prepend(ExceptionsCatcher)
60
+ elsif defined?(::ActionDispatch::ShowExceptions)
61
+ # Rails 3.0.x and 3.1.x
62
+ ::ActionDispatch::ShowExceptions.prepend(ExceptionsCatcher)
63
+ end
64
+
65
+ if defined?(::ActiveSupport::ErrorReporter) # Rails 7
66
+ ::Rails.error.subscribe(ErrorSubscriber)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,72 +1,72 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/ruby'
3
-
4
- module Honeybadger
5
- module Plugins
6
- module Resque
7
- module Extension
8
- # Executed before +on_failure+ hook; the flush is necessary so that
9
- # errors reported within jobs get sent before the worker dies.
10
- def around_perform_with_honeybadger(*args)
11
- Honeybadger.flush { yield }
12
- end
13
-
14
- def after_perform_with_honeybadger(*args)
15
- Honeybadger.clear!
16
- end
17
-
18
- # Error notifications must be synchronous as the +on_failure+ hook is
19
- # executed after +around_perform+.
20
- def on_failure_with_honeybadger(e, *args)
21
- Honeybadger.notify(e, parameters: { job_arguments: args }, sync: true) if send_exception_to_honeybadger?(e, args)
22
- ensure
23
- Honeybadger.clear!
24
- end
25
-
26
- def send_exception_to_honeybadger?(e, args)
27
- return true unless respond_to?(:retry_criteria_valid?)
28
- return true if ::Honeybadger.config[:'resque.resque_retry.send_exceptions_when_retrying']
29
-
30
- !retry_criteria_valid?(e)
31
- rescue => e
32
- Honeybadger.notify(e, parameters: { job_arguments: args }, sync: true)
33
- end
34
- end
35
-
36
- module Installer
37
- def self.included(base)
38
- base.send(:alias_method, :payload_class_without_honeybadger, :payload_class)
39
- base.send(:alias_method, :payload_class, :payload_class_with_honeybadger)
40
- end
41
-
42
- def payload_class_with_honeybadger
43
- payload_class_without_honeybadger.tap do |klass|
44
- unless klass.respond_to?(:around_perform_with_honeybadger)
45
- klass.instance_eval do
46
- extend(::Honeybadger::Plugins::Resque::Extension)
47
- end
48
- end
49
- end
50
- end
51
- end
52
-
53
- Plugin.register do
54
- requirement { defined?(::Resque::Job) }
55
-
56
- requirement do
57
- if resque_honeybadger = defined?(::Resque::Failure::Honeybadger)
58
- logger.warn("Support for Resque has been moved " \
59
- "to the honeybadger gem. Please remove " \
60
- "resque-honeybadger from your " \
61
- "Gemfile.")
62
- end
63
- !resque_honeybadger
64
- end
65
-
66
- execution do
67
- ::Resque::Job.send(:include, Installer)
68
- end
69
- end
70
- end
71
- end
72
- end
1
+ require 'honeybadger/plugin'
2
+ require 'honeybadger/ruby'
3
+
4
+ module Honeybadger
5
+ module Plugins
6
+ module Resque
7
+ module Extension
8
+ # Executed before +on_failure+ hook; the flush is necessary so that
9
+ # errors reported within jobs get sent before the worker dies.
10
+ def around_perform_with_honeybadger(*args)
11
+ Honeybadger.flush { yield }
12
+ end
13
+
14
+ def after_perform_with_honeybadger(*args)
15
+ Honeybadger.clear!
16
+ end
17
+
18
+ # Error notifications must be synchronous as the +on_failure+ hook is
19
+ # executed after +around_perform+.
20
+ def on_failure_with_honeybadger(e, *args)
21
+ Honeybadger.notify(e, parameters: { job_arguments: args }, sync: true) if send_exception_to_honeybadger?(e, args)
22
+ ensure
23
+ Honeybadger.clear!
24
+ end
25
+
26
+ def send_exception_to_honeybadger?(e, args)
27
+ return true unless respond_to?(:retry_criteria_valid?)
28
+ return true if ::Honeybadger.config[:'resque.resque_retry.send_exceptions_when_retrying']
29
+
30
+ !retry_criteria_valid?(e)
31
+ rescue => e
32
+ Honeybadger.notify(e, parameters: { job_arguments: args }, sync: true)
33
+ end
34
+ end
35
+
36
+ module Installer
37
+ def self.included(base)
38
+ base.send(:alias_method, :payload_class_without_honeybadger, :payload_class)
39
+ base.send(:alias_method, :payload_class, :payload_class_with_honeybadger)
40
+ end
41
+
42
+ def payload_class_with_honeybadger
43
+ payload_class_without_honeybadger.tap do |klass|
44
+ unless klass.respond_to?(:around_perform_with_honeybadger)
45
+ klass.instance_eval do
46
+ extend(::Honeybadger::Plugins::Resque::Extension)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ Plugin.register do
54
+ requirement { defined?(::Resque::Job) }
55
+
56
+ requirement do
57
+ if resque_honeybadger = defined?(::Resque::Failure::Honeybadger)
58
+ logger.warn("Support for Resque has been moved " \
59
+ "to the honeybadger gem. Please remove " \
60
+ "resque-honeybadger from your " \
61
+ "Gemfile.")
62
+ end
63
+ !resque_honeybadger
64
+ end
65
+
66
+ execution do
67
+ ::Resque::Job.send(:include, Installer)
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,52 +1,52 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/ruby'
3
-
4
- module Honeybadger
5
- module Plugins
6
- module Shoryuken
7
- class Middleware
8
- def call(_worker, _queue, sqs_msg, body)
9
- begin
10
- yield
11
- rescue => e
12
- if attempt_threshold <= receive_count(sqs_msg)
13
- Honeybadger.notify(e, parameters: notification_params(body))
14
- end
15
-
16
- raise e
17
- end
18
- ensure
19
- Honeybadger.clear!
20
- end
21
-
22
- private
23
-
24
- def attempt_threshold
25
- ::Honeybadger.config[:'shoryuken.attempt_threshold'].to_i
26
- end
27
-
28
- def receive_count(sqs_msg)
29
- return 0 if sqs_msg.is_a?(Array)
30
-
31
- sqs_msg.attributes['ApproximateReceiveCount'.freeze].to_i
32
- end
33
-
34
- def notification_params(body)
35
- body.is_a?(Array) ? { batch: body } : { body: body }
36
- end
37
- end
38
-
39
- Plugin.register do
40
- requirement { defined?(::Shoryuken) }
41
-
42
- execution do
43
- ::Shoryuken.configure_server do |config|
44
- config.server_middleware do |chain|
45
- chain.add Middleware
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
1
+ require 'honeybadger/plugin'
2
+ require 'honeybadger/ruby'
3
+
4
+ module Honeybadger
5
+ module Plugins
6
+ module Shoryuken
7
+ class Middleware
8
+ def call(_worker, _queue, sqs_msg, body)
9
+ begin
10
+ yield
11
+ rescue => e
12
+ if attempt_threshold <= receive_count(sqs_msg)
13
+ Honeybadger.notify(e, parameters: notification_params(body))
14
+ end
15
+
16
+ raise e
17
+ end
18
+ ensure
19
+ Honeybadger.clear!
20
+ end
21
+
22
+ private
23
+
24
+ def attempt_threshold
25
+ ::Honeybadger.config[:'shoryuken.attempt_threshold'].to_i
26
+ end
27
+
28
+ def receive_count(sqs_msg)
29
+ return 0 if sqs_msg.is_a?(Array)
30
+
31
+ sqs_msg.attributes['ApproximateReceiveCount'.freeze].to_i
32
+ end
33
+
34
+ def notification_params(body)
35
+ body.is_a?(Array) ? { batch: body } : { body: body }
36
+ end
37
+ end
38
+
39
+ Plugin.register do
40
+ requirement { defined?(::Shoryuken) }
41
+
42
+ execution do
43
+ ::Shoryuken.configure_server do |config|
44
+ config.server_middleware do |chain|
45
+ chain.add Middleware
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,62 +1,71 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/ruby'
3
-
4
- module Honeybadger
5
- module Plugins
6
- module Sidekiq
7
- class Middleware
8
- def call(_worker, _msg, _queue)
9
- Honeybadger.clear!
10
- yield
11
- end
12
- end
13
-
14
- Plugin.register do
15
- requirement { defined?(::Sidekiq) }
16
-
17
- execution do
18
- ::Sidekiq.configure_server do |sidekiq|
19
- sidekiq.server_middleware do |chain|
20
- chain.prepend Middleware
21
- end
22
- end
23
-
24
- if defined?(::Sidekiq::VERSION) && ::Sidekiq::VERSION > '3'
25
- ::Sidekiq.configure_server do |sidekiq|
26
- sidekiq.error_handlers << lambda { |ex, params|
27
- job = params[:job] || params
28
- job_retry = job['retry'.freeze]
29
-
30
- if (threshold = config[:'sidekiq.attempt_threshold'].to_i) > 0 && job_retry
31
- # We calculate the job attempts to determine the need to
32
- # skip. Sidekiq's first job execution will have nil for the
33
- # 'retry_count' job key. The first retry will have 0 set for
34
- # the 'retry_count' key, incrementing on each execution
35
- # afterwards.
36
- retry_count = job['retry_count'.freeze]
37
- attempt = retry_count ? retry_count + 1 : 0
38
-
39
- # Ensure we account for modified max_retries setting
40
- default_max_retry_attempts = defined?(::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS) ? ::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS : 25
41
- retry_limit = job_retry == true ? (sidekiq.options[:max_retries] || default_max_retry_attempts) : job_retry.to_i
42
-
43
- limit = [retry_limit, threshold].min
44
-
45
- return if attempt < limit
46
- end
47
-
48
- opts = { parameters: params }
49
- if config[:'sidekiq.use_component']
50
- opts[:component] = job['wrapped'.freeze] || job['class'.freeze]
51
- opts[:action] = 'perform' if opts[:component]
52
- end
53
-
54
- Honeybadger.notify(ex, opts)
55
- }
56
- end
57
- end
58
- end
59
- end
60
- end
61
- end
62
- end
1
+ require 'honeybadger/plugin'
2
+ require 'honeybadger/ruby'
3
+
4
+ module Honeybadger
5
+ module Plugins
6
+ module Sidekiq
7
+ class Middleware
8
+ def call(_worker, _msg, _queue)
9
+ Honeybadger.clear!
10
+ yield
11
+ end
12
+ end
13
+
14
+ Plugin.register do
15
+ requirement { defined?(::Sidekiq) }
16
+
17
+ execution do
18
+ ::Sidekiq.configure_server do |sidekiq|
19
+ sidekiq.server_middleware do |chain|
20
+ chain.prepend Middleware
21
+ end
22
+ end
23
+
24
+ if defined?(::Sidekiq::VERSION) && ::Sidekiq::VERSION > '3'
25
+ ::Sidekiq.configure_server do |sidekiq|
26
+
27
+ sidekiq.error_handlers << lambda { |ex, sidekiq_params|
28
+ params = sidekiq_params.dup
29
+ if defined?(::Sidekiq::Config) && params[:_config].is_a?(::Sidekiq::Config)
30
+ params[:_config] = params[:_config].instance_variable_get(:@options)
31
+ end
32
+
33
+ job = params[:job] || params
34
+
35
+ job_retry = job['retry'.freeze]
36
+
37
+ if (threshold = config[:'sidekiq.attempt_threshold'].to_i) > 0 && job_retry
38
+ # We calculate the job attempts to determine the need to
39
+ # skip. Sidekiq's first job execution will have nil for the
40
+ # 'retry_count' job key. The first retry will have 0 set for
41
+ # the 'retry_count' key, incrementing on each execution
42
+ # afterwards.
43
+ retry_count = job['retry_count'.freeze]
44
+ attempt = retry_count ? retry_count + 1 : 0
45
+
46
+ max_retries = (::Sidekiq::VERSION > '7') ?
47
+ ::Sidekiq.default_configuration[:max_retries] : sidekiq.options[:max_retries]
48
+ # Ensure we account for modified max_retries setting
49
+ default_max_retry_attempts = defined?(::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS) ? ::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS : 25
50
+ retry_limit = job_retry == true ? (max_retries || default_max_retry_attempts) : job_retry.to_i
51
+
52
+ limit = [retry_limit, threshold].min
53
+
54
+ return if attempt < limit
55
+ end
56
+
57
+ opts = { parameters: params }
58
+ if config[:'sidekiq.use_component']
59
+ opts[:component] = job['wrapped'.freeze] || job['class'.freeze]
60
+ opts[:action] = 'perform' if opts[:component]
61
+ end
62
+
63
+ Honeybadger.notify(ex, opts)
64
+ }
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -1,18 +1,18 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/ruby'
3
-
4
- module Honeybadger
5
- Plugin.register do
6
- requirement { defined?(::SuckerPunch) }
7
-
8
- execution do
9
- if SuckerPunch.respond_to?(:exception_handler=) # >= v2
10
- SuckerPunch.exception_handler = ->(ex, klass, args) { Honeybadger.notify(ex, { :component => klass, :parameters => args }) }
11
- else
12
- SuckerPunch.exception_handler do |ex, klass, args|
13
- Honeybadger.notify(ex, { :component => klass, :parameters => args })
14
- end
15
- end
16
- end
17
- end
18
- end
1
+ require 'honeybadger/plugin'
2
+ require 'honeybadger/ruby'
3
+
4
+ module Honeybadger
5
+ Plugin.register do
6
+ requirement { defined?(::SuckerPunch) }
7
+
8
+ execution do
9
+ if SuckerPunch.respond_to?(:exception_handler=) # >= v2
10
+ SuckerPunch.exception_handler = ->(ex, klass, args) { Honeybadger.notify(ex, { :component => klass, :parameters => args }) }
11
+ else
12
+ SuckerPunch.exception_handler do |ex, klass, args|
13
+ Honeybadger.notify(ex, { :component => klass, :parameters => args })
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,32 +1,32 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/ruby'
3
-
4
- module Honeybadger
5
- module Plugins
6
- module Thor
7
- def self.included(base)
8
- base.class_eval do
9
- no_commands do
10
- alias_method :invoke_command_without_honeybadger, :invoke_command
11
- alias_method :invoke_command, :invoke_command_with_honeybadger
12
- end
13
- end
14
- end
15
-
16
- def invoke_command_with_honeybadger(*args)
17
- invoke_command_without_honeybadger(*args)
18
- rescue Exception => e
19
- Honeybadger.notify(e)
20
- raise
21
- end
22
- end
23
-
24
- Plugin.register do
25
- requirement { defined?(::Thor.no_commands) }
26
-
27
- execution do
28
- ::Thor.send(:include, Thor)
29
- end
30
- end
31
- end
32
- end
1
+ require 'honeybadger/plugin'
2
+ require 'honeybadger/ruby'
3
+
4
+ module Honeybadger
5
+ module Plugins
6
+ module Thor
7
+ def self.included(base)
8
+ base.class_eval do
9
+ no_commands do
10
+ alias_method :invoke_command_without_honeybadger, :invoke_command
11
+ alias_method :invoke_command, :invoke_command_with_honeybadger
12
+ end
13
+ end
14
+ end
15
+
16
+ def invoke_command_with_honeybadger(*args)
17
+ invoke_command_without_honeybadger(*args)
18
+ rescue Exception => e
19
+ Honeybadger.notify(e)
20
+ raise
21
+ end
22
+ end
23
+
24
+ Plugin.register do
25
+ requirement { defined?(::Thor.no_commands) }
26
+
27
+ execution do
28
+ ::Thor.send(:include, Thor)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,19 +1,19 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/ruby'
3
-
4
- module Honeybadger
5
- Plugin.register do
6
- requirement { defined?(::Warden::Manager.after_set_user) }
7
-
8
- execution do
9
- ::Warden::Manager.after_set_user do |user, auth, opts|
10
- if user.respond_to?(:id)
11
- ::Honeybadger.context({
12
- :user_scope => opts[:scope].to_s,
13
- :user_id => user.id.to_s
14
- })
15
- end
16
- end
17
- end
18
- end
19
- end
1
+ require 'honeybadger/plugin'
2
+ require 'honeybadger/ruby'
3
+
4
+ module Honeybadger
5
+ Plugin.register do
6
+ requirement { defined?(::Warden::Manager.after_set_user) }
7
+
8
+ execution do
9
+ ::Warden::Manager.after_set_user do |user, auth, opts|
10
+ if user.respond_to?(:id)
11
+ ::Honeybadger.context({
12
+ :user_scope => opts[:scope].to_s,
13
+ :user_id => user.id.to_s
14
+ })
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end