honeybadger 5.29.1 → 6.0.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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/lib/honeybadger/agent.rb +36 -35
  4. data/lib/honeybadger/backend/base.rb +11 -11
  5. data/lib/honeybadger/backend/debug.rb +4 -4
  6. data/lib/honeybadger/backend/null.rb +2 -2
  7. data/lib/honeybadger/backend/server.rb +11 -11
  8. data/lib/honeybadger/backend/test.rb +2 -2
  9. data/lib/honeybadger/backend.rb +6 -6
  10. data/lib/honeybadger/backtrace.rb +27 -22
  11. data/lib/honeybadger/breadcrumbs/active_support.rb +9 -9
  12. data/lib/honeybadger/breadcrumbs/breadcrumb.rb +1 -2
  13. data/lib/honeybadger/breadcrumbs/collector.rb +4 -4
  14. data/lib/honeybadger/breadcrumbs/logging.rb +11 -14
  15. data/lib/honeybadger/breadcrumbs.rb +3 -3
  16. data/lib/honeybadger/cli/deploy.rb +7 -7
  17. data/lib/honeybadger/cli/exec.rb +41 -41
  18. data/lib/honeybadger/cli/helpers.rb +18 -18
  19. data/lib/honeybadger/cli/heroku.rb +36 -36
  20. data/lib/honeybadger/cli/install.rb +44 -44
  21. data/lib/honeybadger/cli/main.rb +107 -107
  22. data/lib/honeybadger/cli/notify.rb +13 -13
  23. data/lib/honeybadger/cli/test.rb +109 -94
  24. data/lib/honeybadger/cli.rb +3 -3
  25. data/lib/honeybadger/config/defaults.rb +218 -218
  26. data/lib/honeybadger/config/env.rb +5 -5
  27. data/lib/honeybadger/config/ruby.rb +19 -19
  28. data/lib/honeybadger/config/yaml.rb +12 -12
  29. data/lib/honeybadger/config.rb +76 -78
  30. data/lib/honeybadger/const.rb +4 -4
  31. data/lib/honeybadger/context_manager.rb +1 -2
  32. data/lib/honeybadger/conversions.rb +9 -6
  33. data/lib/honeybadger/counter.rb +4 -4
  34. data/lib/honeybadger/event.rb +3 -3
  35. data/lib/honeybadger/events_worker.rb +33 -33
  36. data/lib/honeybadger/gauge.rb +2 -2
  37. data/lib/honeybadger/histogram.rb +4 -4
  38. data/lib/honeybadger/init/hanami.rb +5 -5
  39. data/lib/honeybadger/init/rails.rb +14 -14
  40. data/lib/honeybadger/init/rake.rb +19 -21
  41. data/lib/honeybadger/init/ruby.rb +4 -4
  42. data/lib/honeybadger/init/sinatra.rb +11 -12
  43. data/lib/honeybadger/instrumentation.rb +26 -31
  44. data/lib/honeybadger/instrumentation_helper.rb +11 -12
  45. data/lib/honeybadger/karafka.rb +55 -56
  46. data/lib/honeybadger/logging.rb +22 -21
  47. data/lib/honeybadger/metric.rb +2 -2
  48. data/lib/honeybadger/metrics_worker.rb +12 -10
  49. data/lib/honeybadger/notice.rb +55 -58
  50. data/lib/honeybadger/notification_subscriber.rb +14 -14
  51. data/lib/honeybadger/plugin.rb +16 -18
  52. data/lib/honeybadger/plugins/active_job.rb +11 -9
  53. data/lib/honeybadger/plugins/autotuner.rb +5 -5
  54. data/lib/honeybadger/plugins/breadcrumbs.rb +7 -7
  55. data/lib/honeybadger/plugins/delayed_job/plugin.rb +36 -37
  56. data/lib/honeybadger/plugins/delayed_job.rb +4 -4
  57. data/lib/honeybadger/plugins/faktory.rb +9 -9
  58. data/lib/honeybadger/plugins/karafka.rb +3 -3
  59. data/lib/honeybadger/plugins/lambda.rb +9 -11
  60. data/lib/honeybadger/plugins/local_variables.rb +4 -4
  61. data/lib/honeybadger/plugins/net_http.rb +10 -10
  62. data/lib/honeybadger/plugins/passenger.rb +4 -4
  63. data/lib/honeybadger/plugins/rails.rb +13 -9
  64. data/lib/honeybadger/plugins/resque.rb +7 -7
  65. data/lib/honeybadger/plugins/shoryuken.rb +6 -6
  66. data/lib/honeybadger/plugins/sidekiq.rb +61 -57
  67. data/lib/honeybadger/plugins/solid_queue.rb +3 -3
  68. data/lib/honeybadger/plugins/sucker_punch.rb +5 -5
  69. data/lib/honeybadger/plugins/system.rb +3 -3
  70. data/lib/honeybadger/plugins/thor.rb +5 -5
  71. data/lib/honeybadger/plugins/warden.rb +4 -4
  72. data/lib/honeybadger/rack/error_notifier.rb +14 -14
  73. data/lib/honeybadger/rack/user_feedback.rb +11 -12
  74. data/lib/honeybadger/rack/user_informer.rb +6 -6
  75. data/lib/honeybadger/registry.rb +2 -2
  76. data/lib/honeybadger/registry_execution.rb +1 -1
  77. data/lib/honeybadger/ruby.rb +2 -2
  78. data/lib/honeybadger/singleton.rb +49 -48
  79. data/lib/honeybadger/tasks.rb +3 -3
  80. data/lib/honeybadger/timer.rb +1 -1
  81. data/lib/honeybadger/util/http.rb +27 -27
  82. data/lib/honeybadger/util/request_hash.rb +11 -11
  83. data/lib/honeybadger/util/request_payload.rb +2 -2
  84. data/lib/honeybadger/util/revision.rb +14 -6
  85. data/lib/honeybadger/util/sanitizer.rb +22 -22
  86. data/lib/honeybadger/util/stats.rb +6 -3
  87. data/lib/honeybadger/version.rb +1 -1
  88. data/lib/honeybadger/worker.rb +31 -29
  89. data/lib/honeybadger.rb +5 -5
  90. data/lib/puma/plugin/honeybadger.rb +12 -8
  91. metadata +3 -3
@@ -1,5 +1,5 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/ruby'
1
+ require "honeybadger/plugin"
2
+ require "honeybadger/ruby"
3
3
 
4
4
  module Honeybadger
5
5
  module Plugins
@@ -15,7 +15,7 @@ module Honeybadger
15
15
  requirement { defined?(::Faktory) }
16
16
 
17
17
  execution do
18
- return unless Honeybadger.config[:'exceptions.enabled']
18
+ return unless Honeybadger.config[:"exceptions.enabled"]
19
19
  ::Faktory.configure_worker do |faktory|
20
20
  faktory.worker_middleware do |chain|
21
21
  chain.prepend Middleware
@@ -26,21 +26,21 @@ module Honeybadger
26
26
  faktory.error_handlers << lambda do |ex, params|
27
27
  opts = {parameters: params}
28
28
 
29
- if job = params[:job]
30
- if (threshold = config[:'faktory.attempt_threshold'].to_i) > 0
29
+ if (job = params[:job])
30
+ if (threshold = config[:"faktory.attempt_threshold"].to_i) > 0
31
31
  # If job.failure is nil, it is the first attempt. The first
32
32
  # retry has a job.failure.retry_count of 0, which would be
33
33
  # the second attempt in our case.
34
- retry_count = job.dig('failure', 'retry_count')
34
+ retry_count = job.dig("failure", "retry_count")
35
35
  attempt = retry_count ? retry_count + 1 : 0
36
36
 
37
- limit = [job['retry'].to_i, threshold].min
37
+ limit = [job["retry"].to_i, threshold].min
38
38
 
39
39
  return if attempt < limit
40
40
  end
41
41
 
42
- opts[:component] = job['jobtype']
43
- opts[:action] = 'perform'
42
+ opts[:component] = job["jobtype"]
43
+ opts[:action] = "perform"
44
44
  end
45
45
 
46
46
  Honeybadger.notify(ex, opts)
@@ -1,4 +1,4 @@
1
- require 'honeybadger/plugin'
1
+ require "honeybadger/plugin"
2
2
 
3
3
  module Honeybadger
4
4
  module Plugins
@@ -6,9 +6,9 @@ module Honeybadger
6
6
  requirement { defined?(::Karafka) && ::Karafka.respond_to?(:monitor) }
7
7
 
8
8
  execution do
9
- require 'honeybadger/karafka'
9
+ require "honeybadger/karafka"
10
10
 
11
- if Honeybadger.config[:'exceptions.enabled']
11
+ if Honeybadger.config[:"exceptions.enabled"]
12
12
  errors_listener = ::Honeybadger::Karafka::ErrorsListener.new
13
13
  ::Karafka.monitor.subscribe(errors_listener)
14
14
  ::Karafka.producer.monitor.subscribe(errors_listener) if ::Karafka.respond_to?(:producer)
@@ -1,5 +1,5 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/util/lambda'
1
+ require "honeybadger/plugin"
2
+ require "honeybadger/util/lambda"
3
3
 
4
4
  module Honeybadger
5
5
  module Plugins
@@ -26,19 +26,17 @@ module Honeybadger
26
26
  mod = Module.new do
27
27
  handler_names.each do |handler|
28
28
  define_method(handler) do |event:, context:|
29
- begin
30
- Honeybadger.context(aws_request_id: context.aws_request_id) if context.respond_to?(:aws_request_id)
29
+ Honeybadger.context(aws_request_id: context.aws_request_id) if context.respond_to?(:aws_request_id)
31
30
 
32
- super(event: event, context: context)
33
- rescue => e
34
- Honeybadger.notify(e)
35
- raise
36
- end
31
+ super(event: event, context: context)
32
+ rescue => e
33
+ Honeybadger.notify(e)
34
+ raise
37
35
  end
38
36
  end
39
37
  end
40
38
 
41
- self.singleton_class.prepend(mod)
39
+ singleton_class.prepend(mod)
42
40
  Kernel.singleton_class.prepend(mod) if self == TOPLEVEL_BINDING.eval("self")
43
41
  end
44
42
  end
@@ -49,7 +47,7 @@ module Honeybadger
49
47
 
50
48
  execution do
51
49
  config[:sync] = true
52
- config[:'exceptions.notify_at_exit'] = false
50
+ config[:"exceptions.notify_at_exit"] = false
53
51
 
54
52
  main = TOPLEVEL_BINDING.eval("self")
55
53
  main.extend(LambdaExtension)
@@ -1,5 +1,5 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/backtrace'
1
+ require "honeybadger/plugin"
2
+ require "honeybadger/backtrace"
3
3
 
4
4
  module Honeybadger
5
5
  module Plugins
@@ -24,10 +24,10 @@ module Honeybadger
24
24
  end
25
25
 
26
26
  Plugin.register do
27
- requirement { config[:'exceptions.local_variables'] }
27
+ requirement { config[:"exceptions.local_variables"] }
28
28
  requirement { defined?(::BindingOfCaller) }
29
29
  requirement do
30
- if res = defined?(::BetterErrors)
30
+ if (res = defined?(::BetterErrors))
31
31
  logger.warn("The local variables feature is incompatible with the " \
32
32
  "better_errors gem; to remove this warning, set " \
33
33
  "exceptions.local_variables to false for environments " \
@@ -1,7 +1,7 @@
1
- require 'net/http'
2
- require 'honeybadger/plugin'
3
- require 'honeybadger/instrumentation'
4
- require 'resolv'
1
+ require "net/http"
2
+ require "honeybadger/plugin"
3
+ require "honeybadger/instrumentation"
4
+ require "resolv"
5
5
 
6
6
  module Honeybadger
7
7
  module Plugins
@@ -25,31 +25,31 @@ module Honeybadger
25
25
  }.merge(parsed_uri_data(request_data))
26
26
 
27
27
  if @@hb_config.load_plugin_insights_events?(:net_http)
28
- Honeybadger.event('request.net_http', context)
28
+ Honeybadger.event("request.net_http", context)
29
29
  end
30
30
 
31
31
  if @@hb_config.load_plugin_insights_metrics?(:net_http)
32
32
  context.delete(:url)
33
- Honeybadger.gauge('duration.request', context.merge(metric_source: 'net_http'))
33
+ Honeybadger.gauge("duration.request", context.merge(metric_source: "net_http"))
34
34
  end
35
35
  end[1] # return the response data only
36
36
  end
37
37
 
38
38
  def hb?
39
- address.to_s[/#{@@hb_config[:'connection.host'].to_s}/]
39
+ address.to_s[/#{@@hb_config[:"connection.host"]}/]
40
40
  end
41
41
 
42
42
  def parsed_uri_data(request_data)
43
43
  uri = request_data.uri || build_uri(request_data)
44
44
  {}.tap do |uri_data|
45
45
  uri_data[:host] = uri.host
46
- uri_data[:url] = uri.to_s if @@hb_config[:'net_http.insights.full_url']
46
+ uri_data[:url] = uri.to_s if @@hb_config[:"net_http.insights.full_url"]
47
47
  end
48
48
  end
49
49
 
50
50
  def build_uri(request_data)
51
- hostname = (address[/#{Resolv::IPv6::Regex}/]) ? "[#{address}]" : address
52
- URI.parse("#{use_ssl? ? 'https' : 'http'}://#{hostname}#{request_data.path}")
51
+ hostname = address[/#{Resolv::IPv6::Regex}/o] ? "[#{address}]" : address
52
+ URI.parse("#{use_ssl? ? "https" : "http"}://#{hostname}#{request_data.path}")
53
53
  end
54
54
 
55
55
  Plugin.register :net_http do
@@ -1,5 +1,5 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/agent'
1
+ require "honeybadger/plugin"
2
+ require "honeybadger/agent"
3
3
 
4
4
  module Honeybadger
5
5
  module Plugins
@@ -9,11 +9,11 @@ module Honeybadger
9
9
 
10
10
  execution do
11
11
  ::PhusionPassenger.on_event(:starting_worker_process) do |forked|
12
- logger.debug('Starting passenger worker process')
12
+ logger.debug("Starting passenger worker process")
13
13
  end
14
14
 
15
15
  ::PhusionPassenger.on_event(:stopping_worker_process) do
16
- logger.debug('Stopping passenger worker process')
16
+ logger.debug("Stopping passenger worker process")
17
17
  Honeybadger.stop
18
18
  end
19
19
  end
@@ -1,5 +1,5 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/notification_subscriber'
1
+ require "honeybadger/plugin"
2
+ require "honeybadger/notification_subscriber"
3
3
 
4
4
  module Honeybadger
5
5
  module Plugins
@@ -15,7 +15,7 @@ module Honeybadger
15
15
  # @return The super value of the middleware's +#render_exception()+
16
16
  # method.
17
17
  def render_exception(arg, exception, *args)
18
- if arg.kind_of?(::ActionDispatch::Request)
18
+ if arg.is_a?(::ActionDispatch::Request)
19
19
  request = arg
20
20
  env = request.env
21
21
  else
@@ -23,10 +23,14 @@ module Honeybadger
23
23
  env = arg
24
24
  end
25
25
 
26
- env['honeybadger.exception'] = exception
27
- env['honeybadger.request.url'] = request.url rescue nil
26
+ env["honeybadger.exception"] = exception
27
+ env["honeybadger.request.url"] = begin
28
+ request.url
29
+ rescue
30
+ nil
31
+ end
28
32
 
29
- super(arg, exception, *args)
33
+ super
30
34
  end
31
35
  end
32
36
 
@@ -45,7 +49,7 @@ module Honeybadger
45
49
  end
46
50
 
47
51
  def self.source_ignored?(source)
48
- source && ::Honeybadger.config[:'rails.subscriber_ignore_sources'].any? do |ignored_source|
52
+ source && ::Honeybadger.config[:"rails.subscriber_ignore_sources"].any? do |ignored_source|
49
53
  ignored_source.is_a?(Regexp) ? ignored_source.match?(source) : (ignored_source == source)
50
54
  end
51
55
  end
@@ -55,7 +59,7 @@ module Honeybadger
55
59
  requirement { defined?(::Rails.application) && ::Rails.application }
56
60
 
57
61
  execution do
58
- require 'rack/request'
62
+ require "rack/request"
59
63
  if defined?(::ActionDispatch::DebugExceptions)
60
64
  # Rails 3.2.x+
61
65
  ::ActionDispatch::DebugExceptions.prepend(ExceptionsCatcher)
@@ -64,7 +68,7 @@ module Honeybadger
64
68
  ::ActionDispatch::ShowExceptions.prepend(ExceptionsCatcher)
65
69
  end
66
70
 
67
- if Honeybadger.config[:'exceptions.enabled'] && defined?(::ActiveSupport::ErrorReporter) # Rails 7
71
+ if Honeybadger.config[:"exceptions.enabled"] && defined?(::ActiveSupport::ErrorReporter) # Rails 7
68
72
  if defined?(::ActiveSupport::ExecutionContext)
69
73
  ::ActiveSupport::ExecutionContext.after_change do
70
74
  Honeybadger.context(::ActiveSupport::ExecutionContext.to_h)
@@ -1,5 +1,5 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/ruby'
1
+ require "honeybadger/plugin"
2
+ require "honeybadger/ruby"
3
3
 
4
4
  module Honeybadger
5
5
  module Plugins
@@ -18,18 +18,18 @@ module Honeybadger
18
18
  # Error notifications must be synchronous as the +on_failure+ hook is
19
19
  # executed after +around_perform+.
20
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)
21
+ Honeybadger.notify(e, parameters: {job_arguments: args}, sync: true) if send_exception_to_honeybadger?(e, args)
22
22
  ensure
23
23
  Honeybadger.clear!
24
24
  end
25
25
 
26
26
  def send_exception_to_honeybadger?(e, args)
27
27
  return true unless respond_to?(:retry_criteria_valid?)
28
- return true if ::Honeybadger.config[:'resque.resque_retry.send_exceptions_when_retrying']
28
+ return true if ::Honeybadger.config[:"resque.resque_retry.send_exceptions_when_retrying"]
29
29
 
30
30
  !retry_criteria_valid?(e)
31
31
  rescue => e
32
- Honeybadger.notify(e, parameters: { job_arguments: args }, sync: true)
32
+ Honeybadger.notify(e, parameters: {job_arguments: args}, sync: true)
33
33
  end
34
34
  end
35
35
 
@@ -54,7 +54,7 @@ module Honeybadger
54
54
  requirement { defined?(::Resque::Job) }
55
55
 
56
56
  requirement do
57
- if resque_honeybadger = defined?(::Resque::Failure::Honeybadger)
57
+ if (resque_honeybadger = defined?(::Resque::Failure::Honeybadger))
58
58
  logger.warn("Support for Resque has been moved " \
59
59
  "to the honeybadger gem. Please remove " \
60
60
  "resque-honeybadger from your " \
@@ -64,7 +64,7 @@ module Honeybadger
64
64
  end
65
65
 
66
66
  execution do
67
- return unless Honeybadger.config[:'exceptions.enabled']
67
+ return unless Honeybadger.config[:"exceptions.enabled"]
68
68
  ::Resque::Job.send(:include, Installer)
69
69
  end
70
70
  end
@@ -1,5 +1,5 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/ruby'
1
+ require "honeybadger/plugin"
2
+ require "honeybadger/ruby"
3
3
 
4
4
  module Honeybadger
5
5
  module Plugins
@@ -22,17 +22,17 @@ module Honeybadger
22
22
  private
23
23
 
24
24
  def attempt_threshold
25
- ::Honeybadger.config[:'shoryuken.attempt_threshold'].to_i
25
+ ::Honeybadger.config[:"shoryuken.attempt_threshold"].to_i
26
26
  end
27
27
 
28
28
  def receive_count(sqs_msg)
29
29
  return 0 if sqs_msg.is_a?(Array)
30
30
 
31
- sqs_msg.attributes['ApproximateReceiveCount'.freeze].to_i
31
+ sqs_msg.attributes["ApproximateReceiveCount".freeze].to_i
32
32
  end
33
33
 
34
34
  def notification_params(body)
35
- body.is_a?(Array) ? { batch: body } : { body: body }
35
+ body.is_a?(Array) ? {batch: body} : {body: body}
36
36
  end
37
37
  end
38
38
 
@@ -40,7 +40,7 @@ module Honeybadger
40
40
  requirement { defined?(::Shoryuken) }
41
41
 
42
42
  execution do
43
- return unless Honeybadger.config[:'exceptions.enabled']
43
+ return unless Honeybadger.config[:"exceptions.enabled"]
44
44
  ::Shoryuken.configure_server do |config|
45
45
  config.server_middleware do |chain|
46
46
  chain.add Middleware
@@ -1,6 +1,6 @@
1
- require 'honeybadger/instrumentation_helper'
2
- require 'honeybadger/plugin'
3
- require 'honeybadger/ruby'
1
+ require "honeybadger/instrumentation_helper"
2
+ require "honeybadger/plugin"
3
+ require "honeybadger/ruby"
4
4
 
5
5
  module Honeybadger
6
6
  module Plugins
@@ -16,14 +16,14 @@ module Honeybadger
16
16
  include Honeybadger::InstrumentationHelper
17
17
 
18
18
  def call(worker, msg, queue, &block)
19
- if msg["wrapped"]
20
- context = {
19
+ context = if msg["wrapped"]
20
+ {
21
21
  jid: msg["jid"],
22
22
  worker: msg["wrapped"],
23
23
  queue: queue
24
24
  }
25
25
  else
26
- context = {
26
+ {
27
27
  jid: msg["jid"],
28
28
  worker: msg["class"],
29
29
  queue: queue
@@ -32,19 +32,20 @@ module Honeybadger
32
32
 
33
33
  begin
34
34
  duration = Honeybadger.instrumentation.monotonic_timer { block.call }[0]
35
- status = 'success'
36
- rescue Exception => e
37
- status = 'failure'
35
+ status = "success"
36
+ rescue
37
+ status = "failure"
38
38
  raise
39
39
  ensure
40
- context.merge!(duration: duration, status: status)
40
+ context[:duration] = duration
41
+ context[:status] = status
41
42
  if Honeybadger.config.load_plugin_insights_events?(:sidekiq)
42
- Honeybadger.event('perform.sidekiq', context)
43
+ Honeybadger.event("perform.sidekiq", context)
43
44
  end
44
45
 
45
46
  if Honeybadger.config.load_plugin_insights_metrics?(:sidekiq)
46
- metric_source 'sidekiq'
47
- gauge 'perform', context.slice(:worker, :queue, :duration)
47
+ metric_source "sidekiq"
48
+ gauge "perform", context.slice(:worker, :queue, :duration)
48
49
  end
49
50
  end
50
51
  end
@@ -60,7 +61,7 @@ module Honeybadger
60
61
  }
61
62
 
62
63
  if Honeybadger.config.load_plugin_insights_events?(:sidekiq)
63
- Honeybadger.event('enqueue.sidekiq', context)
64
+ Honeybadger.event("enqueue.sidekiq", context)
64
65
  end
65
66
 
66
67
  yield
@@ -73,57 +74,56 @@ module Honeybadger
73
74
  requirement { defined?(::Sidekiq) }
74
75
 
75
76
  execution do
76
- if Honeybadger.config[:'exceptions.enabled']
77
+ if Honeybadger.config[:"exceptions.enabled"]
77
78
  ::Sidekiq.configure_server do |sidekiq|
78
79
  sidekiq.server_middleware do |chain|
79
80
  chain.prepend Middleware
80
81
  end
81
82
  end
82
83
 
83
- if defined?(::Sidekiq::VERSION) && ::Sidekiq::VERSION > '3'
84
+ if defined?(::Sidekiq::VERSION) && ::Sidekiq::VERSION > "3"
84
85
  ::Sidekiq.configure_server do |sidekiq|
85
-
86
- sidekiq_default_configuration = (::Sidekiq::VERSION > '7') ?
86
+ sidekiq_default_configuration = (::Sidekiq::VERSION > "7") ?
87
87
  ::Sidekiq.default_configuration : Class.new
88
88
 
89
89
  sidekiq.error_handlers << lambda { |ex, sidekiq_params, sidekiq_config = sidekiq_default_configuration|
90
90
  params = sidekiq_params.dup
91
91
  if defined?(::Sidekiq::Config)
92
- if params[:_config].is_a?(::Sidekiq::Config) # Sidekiq > 6 and < 7.1.5
93
- params[:_config] = params[:_config].instance_variable_get(:@options)
92
+ params[:_config] = if params[:_config].is_a?(::Sidekiq::Config) # Sidekiq > 6 and < 7.1.5
93
+ params[:_config].instance_variable_get(:@options)
94
94
  else # Sidekiq >= 7.1.5
95
- params[:_config] = sidekiq_config.instance_variable_get(:@options)
95
+ sidekiq_config.instance_variable_get(:@options)
96
96
  end
97
97
  end
98
98
 
99
99
  job = params[:job] || params
100
100
 
101
- job_retry = job['retry'.freeze]
101
+ job_retry = job["retry".freeze]
102
102
 
103
- if (threshold = config[:'sidekiq.attempt_threshold'].to_i) > 0 && job_retry
103
+ if (threshold = config[:"sidekiq.attempt_threshold"].to_i) > 0 && job_retry
104
104
  # We calculate the job attempts to determine the need to
105
105
  # skip. Sidekiq's first job execution will have nil for the
106
106
  # 'retry_count' job key. The first retry will have 0 set for
107
107
  # the 'retry_count' key, incrementing on each execution
108
108
  # afterwards.
109
- retry_count = job['retry_count'.freeze]
109
+ retry_count = job["retry_count".freeze]
110
110
  attempt = retry_count ? retry_count + 1 : 0
111
111
 
112
- max_retries = (::Sidekiq::VERSION > '7') ?
112
+ max_retries = (::Sidekiq::VERSION > "7") ?
113
113
  ::Sidekiq.default_configuration[:max_retries] : sidekiq.options[:max_retries]
114
114
  # Ensure we account for modified max_retries setting
115
115
  default_max_retry_attempts = defined?(::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS) ? ::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS : 25
116
- retry_limit = job_retry == true ? (max_retries || default_max_retry_attempts) : job_retry.to_i
116
+ retry_limit = (job_retry == true) ? (max_retries || default_max_retry_attempts) : job_retry.to_i
117
117
 
118
118
  limit = [retry_limit, threshold].min
119
119
 
120
120
  return if attempt < limit
121
121
  end
122
122
 
123
- opts = { parameters: params }
124
- if config[:'sidekiq.use_component']
125
- opts[:component] = job['wrapped'.freeze] || job['class'.freeze]
126
- opts[:action] = 'perform' if opts[:component]
123
+ opts = {parameters: params}
124
+ if config[:"sidekiq.use_component"]
125
+ opts[:component] = job["wrapped".freeze] || job["class".freeze]
126
+ opts[:action] = "perform" if opts[:component]
127
127
  end
128
128
 
129
129
  Honeybadger.notify(ex, opts)
@@ -133,38 +133,42 @@ module Honeybadger
133
133
  end
134
134
 
135
135
  if config.load_plugin_insights?(:sidekiq)
136
- require "sidekiq"
137
- require "sidekiq/api"
136
+ begin
137
+ require "sidekiq"
138
+ require "sidekiq/api"
138
139
 
139
- if Gem::Version.new(::Sidekiq::VERSION) >= Gem::Version.new('6.5')
140
- require "sidekiq/component"
140
+ if Gem::Version.new(::Sidekiq::VERSION) >= Gem::Version.new("6.5")
141
+ require "sidekiq/component"
141
142
 
142
- class SidekiqClusterCollectionChecker
143
- include ::Sidekiq::Component
144
- def initialize(config)
145
- @config = config
146
- end
143
+ class SidekiqClusterCollectionChecker
144
+ include ::Sidekiq::Component
145
+ def initialize(config)
146
+ @config = config
147
+ end
147
148
 
148
- def collect?
149
- return true unless defined?(::Sidekiq::Enterprise)
150
- leader?
149
+ def collect?
150
+ return true unless defined?(::Sidekiq::Enterprise)
151
+ leader?
152
+ end
151
153
  end
152
154
  end
153
- end
154
155
 
155
- ::Sidekiq.configure_server do |config|
156
- config.server_middleware { |chain| chain.add(ServerMiddlewareInstrumentation) }
157
- config.client_middleware { |chain| chain.add(ClientMiddlewareInstrumentation) }
156
+ ::Sidekiq.configure_server do |config|
157
+ config.server_middleware { |chain| chain.add(ServerMiddlewareInstrumentation) }
158
+ config.client_middleware { |chain| chain.add(ClientMiddlewareInstrumentation) }
158
159
 
159
- if defined?(SidekiqClusterCollectionChecker)
160
- config.on(:startup) do
161
- leader_checker = SidekiqClusterCollectionChecker.new(config)
160
+ if defined?(SidekiqClusterCollectionChecker)
161
+ config.on(:startup) do
162
+ leader_checker = SidekiqClusterCollectionChecker.new(config)
163
+ end
162
164
  end
163
165
  end
164
- end
165
166
 
166
- ::Sidekiq.configure_client do |config|
167
- config.client_middleware { |chain| chain.add(ClientMiddlewareInstrumentation) }
167
+ ::Sidekiq.configure_client do |config|
168
+ config.client_middleware { |chain| chain.add(ClientMiddlewareInstrumentation) }
169
+ end
170
+ rescue LoadError
171
+ # Sidekiq is not loaded, so we don't need to do anything
168
172
  end
169
173
  end
170
174
  end
@@ -212,13 +216,13 @@ module Honeybadger
212
216
  stats = collect_sidekiq_stats.call
213
217
 
214
218
  if Honeybadger.config.load_plugin_insights_events?(:sidekiq)
215
- Honeybadger.event('stats.sidekiq', stats.except('stats').merge(stats['stats']))
219
+ Honeybadger.event("stats.sidekiq", stats.except("stats").merge(stats["stats"]))
216
220
  end
217
221
 
218
222
  if Honeybadger.config.load_plugin_insights_metrics?(:sidekiq)
219
- metric_source 'sidekiq'
223
+ metric_source "sidekiq"
220
224
 
221
- stats['stats'].each do |name, value|
225
+ stats["stats"].each do |name, value|
222
226
  gauge name, value: value
223
227
  end
224
228
 
@@ -228,8 +232,8 @@ module Honeybadger
228
232
  end
229
233
  end
230
234
 
231
- gauge 'capacity', value: stats[:capacity] if stats[:capacity]
232
- gauge 'utilization', value: stats[:utilization] if stats[:utilization]
235
+ gauge "capacity", value: stats[:capacity] if stats[:capacity]
236
+ gauge "utilization", value: stats[:utilization] if stats[:utilization]
233
237
  end
234
238
  end
235
239
  end
@@ -20,7 +20,7 @@ module Honeybadger
20
20
  data[:queues] = {}
21
21
 
22
22
  ::SolidQueue::Queue.all.each do |queue|
23
- data[:queues][queue.name] = { depth: queue.size }
23
+ data[:queues][queue.name] = {depth: queue.size}
24
24
  end
25
25
 
26
26
  data
@@ -31,11 +31,11 @@ module Honeybadger
31
31
  stats = collect_solid_queue_stats.call
32
32
 
33
33
  if Honeybadger.config.load_plugin_insights_events?(:solid_queue)
34
- Honeybadger.event('stats.solid_queue', stats.except(:stats).merge(stats[:stats]))
34
+ Honeybadger.event("stats.solid_queue", stats.except(:stats).merge(stats[:stats]))
35
35
  end
36
36
 
37
37
  if Honeybadger.config.load_plugin_insights_metrics?(:solid_queue)
38
- metric_source 'solid_queue'
38
+ metric_source "solid_queue"
39
39
  stats[:stats].each do |stat_name, value|
40
40
  gauge stat_name, value: value
41
41
  end
@@ -1,17 +1,17 @@
1
- require 'honeybadger/plugin'
2
- require 'honeybadger/ruby'
1
+ require "honeybadger/plugin"
2
+ require "honeybadger/ruby"
3
3
 
4
4
  module Honeybadger
5
5
  Plugin.register do
6
6
  requirement { defined?(::SuckerPunch) }
7
7
 
8
8
  execution do
9
- return unless Honeybadger.config[:'exceptions.enabled']
9
+ return unless Honeybadger.config[:"exceptions.enabled"]
10
10
  if SuckerPunch.respond_to?(:exception_handler=) # >= v2
11
- SuckerPunch.exception_handler = ->(ex, klass, args) { Honeybadger.notify(ex, { :component => klass, :parameters => args }) }
11
+ SuckerPunch.exception_handler = ->(ex, klass, args) { Honeybadger.notify(ex, {component: klass, parameters: args}) }
12
12
  else
13
13
  SuckerPunch.exception_handler do |ex, klass, args|
14
- Honeybadger.notify(ex, { :component => klass, :parameters => args })
14
+ Honeybadger.notify(ex, {component: klass, parameters: args})
15
15
  end
16
16
  end
17
17
  end
@@ -1,5 +1,5 @@
1
- require 'honeybadger/util/stats'
2
- require 'honeybadger/plugin'
1
+ require "honeybadger/util/stats"
2
+ require "honeybadger/plugin"
3
3
 
4
4
  module Honeybadger
5
5
  module Plugins
@@ -8,7 +8,7 @@ module Honeybadger
8
8
  requirement { Util::Stats::HAS_MEM || Util::Stats::HAS_LOAD }
9
9
 
10
10
  collect do
11
- Honeybadger.event('report.system', Util::Stats.all)
11
+ Honeybadger.event("report.system", Util::Stats.all)
12
12
  end
13
13
  end
14
14
  end