honeybadger 5.29.1 → 6.0.1

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 +29 -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 +10 -10
  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 +62 -58
  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 +2 -2
@@ -1,6 +1,6 @@
1
- require 'forwardable'
1
+ require "forwardable"
2
2
 
3
- require 'honeybadger/util/sanitizer'
3
+ require "honeybadger/util/sanitizer"
4
4
 
5
5
  module Honeybadger
6
6
  class Event
@@ -18,7 +18,7 @@ module Honeybadger
18
18
  def_delegators :payload, :dig, :[], :[]=, :delete
19
19
 
20
20
  # @api private
21
- def initialize(event_type_or_payload, payload={})
21
+ def initialize(event_type_or_payload, payload = {})
22
22
  if event_type_or_payload.is_a?(String)
23
23
  @event_type = event_type_or_payload
24
24
  @payload = payload
@@ -1,7 +1,7 @@
1
- require 'forwardable'
2
- require 'net/http'
1
+ require "forwardable"
2
+ require "net/http"
3
3
 
4
- require 'honeybadger/logging'
4
+ require "honeybadger/logging"
5
5
 
6
6
  module Honeybadger
7
7
  # A concurrent queue to notify the backend.
@@ -58,7 +58,7 @@ module Honeybadger
58
58
  end
59
59
 
60
60
  def shutdown(force = false)
61
- d { 'shutting down events worker' }
61
+ d { "shutting down events worker" }
62
62
 
63
63
  mutex.synchronize do
64
64
  @shutdown = true
@@ -68,11 +68,11 @@ module Honeybadger
68
68
  return true unless thread&.alive?
69
69
 
70
70
  if throttled?
71
- warn { sprintf('Unable to send %s event(s) to Honeybadger (currently throttled)', queue.size) } unless queue.empty?
71
+ warn { sprintf("Unable to send %s event(s) to Honeybadger (currently throttled)", queue.size) } unless queue.empty?
72
72
  return true
73
73
  end
74
74
 
75
- info { sprintf('Waiting to send %s events(s) to Honeybadger', queue.size) } unless queue.empty?
75
+ info { sprintf("Waiting to send %s events(s) to Honeybadger", queue.size) } unless queue.empty?
76
76
  queue.push(FLUSH)
77
77
  queue.push(SHUTDOWN)
78
78
  !!thread.join
@@ -84,7 +84,7 @@ module Honeybadger
84
84
  # Blocks until queue is processed up to this point in time.
85
85
  def flush
86
86
  mutex.synchronize do
87
- if thread && thread.alive?
87
+ if thread&.alive?
88
88
  queue.push(FLUSH)
89
89
  queue.push(marker)
90
90
  marker.wait(mutex)
@@ -135,7 +135,7 @@ module Honeybadger
135
135
  end
136
136
 
137
137
  def kill!
138
- d { 'killing worker thread' }
138
+ d { "killing worker thread" }
139
139
 
140
140
  if thread
141
141
  Thread.kill(thread)
@@ -165,7 +165,7 @@ module Honeybadger
165
165
 
166
166
  def run
167
167
  begin
168
- d { 'worker started' }
168
+ d { "worker started" }
169
169
  mutex.synchronize do
170
170
  @last_sent = Time.now
171
171
  end
@@ -179,9 +179,9 @@ module Honeybadger
179
179
  end
180
180
  end
181
181
  ensure
182
- d { 'stopping worker' }
182
+ d { "stopping worker" }
183
183
  end
184
- rescue Exception => e
184
+ rescue => e
185
185
  error {
186
186
  msg = "Error in worker thread (shutting down) class=%s message=%s\n\t%s"
187
187
  sprintf(msg, e.class, e.message.dump, Array(e.backtrace).join("\n\t"))
@@ -208,10 +208,10 @@ module Honeybadger
208
208
  send_now(mutex.synchronize { send_queue })
209
209
  mutex.synchronize do
210
210
  @last_sent = Time.now
211
- debug { sprintf('Sending %s events', send_queue.length) }
211
+ debug { sprintf("Sending %s events", send_queue.length) }
212
212
  send_queue.clear
213
213
  if @dropped_events > 0
214
- warn { sprintf('Dropped %s messages due to exceeding max queue size of %s', @dropped_events, config.events_max_queue_size) }
214
+ warn { sprintf("Dropped %s messages due to exceeding max queue size of %s", @dropped_events, config.events_max_queue_size) }
215
215
  end
216
216
  @dropped_events = 0
217
217
  end
@@ -227,7 +227,7 @@ module Honeybadger
227
227
  def flush_send_queue
228
228
  return if mutex.synchronize { send_queue.empty? }
229
229
  send_batch
230
- rescue StandardError => e
230
+ rescue => e
231
231
  error {
232
232
  msg = "Error in worker thread class=%s message=%s\n\t%s"
233
233
  sprintf(msg, e.class, e.message.dump, Array(e.backtrace).join("\n\t"))
@@ -239,28 +239,26 @@ module Honeybadger
239
239
  check_and_send
240
240
 
241
241
  if shutdown? && throttled?
242
- warn { sprintf('Unable to send %s events(s) to Honeybadger (currently throttled)', queue.size) } if queue.size > 1
242
+ warn { sprintf("Unable to send %s events(s) to Honeybadger (currently throttled)", queue.size) } if queue.size > 1
243
243
  kill!
244
244
  return
245
245
  end
246
246
 
247
247
  sleep(throttle_interval)
248
- rescue StandardError => e
248
+ rescue => e
249
249
  error {
250
250
  msg = "Error in worker thread class=%s message=%s\n\t%s"
251
251
  sprintf(msg, e.class, e.message.dump, Array(e.backtrace).join("\n\t"))
252
252
  }
253
253
  end
254
254
 
255
-
256
255
  def send_to_backend(msg)
257
- d { 'events_worker sending to backend' }
258
- response = backend.event(msg)
259
- response
256
+ d { "events_worker sending to backend" }
257
+ backend.event(msg)
260
258
  end
261
259
 
262
260
  def calc_throttle_interval
263
- ((BASE_THROTTLE ** throttle) - 1).round(3)
261
+ ((BASE_THROTTLE**throttle) - 1).round(3)
264
262
  end
265
263
 
266
264
  def inc_throttle
@@ -281,32 +279,32 @@ module Honeybadger
281
279
  end
282
280
 
283
281
  def handle_response(response)
284
- d { sprintf('events_worker response code=%s message=%s', response.code, response.message.to_s.dump) }
282
+ d { sprintf("events_worker response code=%s message=%s", response.code, response.message.to_s.dump) }
285
283
 
286
284
  case response.code
287
285
  when 429, 503
288
286
  throttle = inc_throttle
289
- warn { sprintf('Event send failed: project is sending too many events. code=%s throttle=%s interval=%s', response.code, throttle, throttle_interval) }
287
+ warn { sprintf("Event send failed: project is sending too many events. code=%s throttle=%s interval=%s", response.code, throttle, throttle_interval) }
290
288
  when 402
291
- warn { sprintf('Event send failed: payment is required. code=%s', response.code) }
289
+ warn { sprintf("Event send failed: payment is required. code=%s", response.code) }
292
290
  suspend(3600)
293
291
  when 403
294
- warn { sprintf('Event send failed: API key is invalid. code=%s', response.code) }
292
+ warn { sprintf("Event send failed: API key is invalid. code=%s", response.code) }
295
293
  suspend(3600)
296
294
  when 413
297
- warn { sprintf('Event send failed: Payload is too large. code=%s', response.code) }
295
+ warn { sprintf("Event send failed: Payload is too large. code=%s", response.code) }
298
296
  when 201
299
- if throttle = dec_throttle
300
- debug { sprintf('Success ⚡ Event sent code=%s throttle=%s interval=%s', response.code, throttle, throttle_interval) }
297
+ if (throttle = dec_throttle)
298
+ debug { sprintf("Success ⚡ Event sent code=%s throttle=%s interval=%s", response.code, throttle, throttle_interval) }
301
299
  else
302
- debug { sprintf('Success ⚡ Event sent code=%s', response.code) }
300
+ debug { sprintf("Success ⚡ Event sent code=%s", response.code) }
303
301
  end
304
302
  when :stubbed
305
- info { sprintf('Success ⚡ Development mode is enabled; This event will be sent after app is deployed.') }
303
+ info { "Success ⚡ Development mode is enabled; This event will be sent after app is deployed." }
306
304
  when :error
307
- warn { sprintf('Event send failed: an unknown error occurred. code=%s error=%s', response.code, response.message.to_s.dump) }
305
+ warn { sprintf("Event send failed: an unknown error occurred. code=%s error=%s", response.code, response.message.to_s.dump) }
308
306
  else
309
- warn { sprintf('Event send failed: unknown response from server. code=%s', response.code) }
307
+ warn { sprintf("Event send failed: unknown response from server. code=%s", response.code) }
310
308
  end
311
309
  end
312
310
 
@@ -317,8 +315,10 @@ module Honeybadger
317
315
  end
318
316
 
319
317
  def signal_marker(marker)
320
- mutex.synchronize do
318
+ if mutex.owned?
321
319
  marker.signal
320
+ else
321
+ mutex.synchronize { marker.signal }
322
322
  end
323
323
  end
324
324
  end
@@ -1,4 +1,4 @@
1
- require 'honeybadger/metric'
1
+ require "honeybadger/metric"
2
2
 
3
3
  module Honeybadger
4
4
  class Gauge < Metric
@@ -8,7 +8,7 @@ module Honeybadger
8
8
  @samples += 1
9
9
 
10
10
  @total ||= 0
11
- @total = @total + value
11
+ @total += value
12
12
 
13
13
  @min = value if @min.nil? || @min > value
14
14
  @max = value if @max.nil? || @max < value
@@ -1,9 +1,9 @@
1
- require 'honeybadger/metric'
1
+ require "honeybadger/metric"
2
2
 
3
3
  module Honeybadger
4
4
  class Histogram < Metric
5
5
  DEFAULT_BINS = [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0]
6
- INFINITY = 1e20.to_f # not quite, but pretty much
6
+ INFINITY = 1e20 # not quite, but pretty much
7
7
 
8
8
  def record(value)
9
9
  return unless value
@@ -11,7 +11,7 @@ module Honeybadger
11
11
  @samples += 1
12
12
 
13
13
  @total ||= 0
14
- @total = @total + value
14
+ @total += value
15
15
 
16
16
  @min = value if @min.nil? || @min > value
17
17
  @max = value if @max.nil? || @max < value
@@ -23,7 +23,7 @@ module Honeybadger
23
23
  end
24
24
 
25
25
  def find_bin(value)
26
- bin = bins.find {|b| b >= value }
26
+ bin = bins.find { |b| b >= value }
27
27
  bin = INFINITY if bin.nil?
28
28
  bin
29
29
  end
@@ -1,14 +1,14 @@
1
- require 'honeybadger/ruby'
1
+ require "honeybadger/ruby"
2
2
 
3
3
  Honeybadger.init!({
4
- :framework => :hanami,
5
- :env => ENV['HANAMI_ENV'] || ENV['RACK_ENV'],
6
- :'logging.path' => 'STDOUT'
4
+ framework: :hanami,
5
+ env: ENV["HANAMI_ENV"] || ENV["RACK_ENV"],
6
+ "logging.path": "STDOUT"
7
7
  })
8
8
 
9
9
  Honeybadger.load_plugins!
10
10
 
11
- if Hanami::VERSION >= '2.0' && Honeybadger.config[:'exceptions.enabled']
11
+ if Hanami::VERSION >= "2.0" && Honeybadger.config[:"exceptions.enabled"]
12
12
  Hanami.app.instance_eval do
13
13
  config.middleware.use Honeybadger::Rack::UserFeedback
14
14
  config.middleware.use Honeybadger::Rack::UserInformer
@@ -1,33 +1,33 @@
1
- require 'rails'
2
- require 'yaml'
1
+ require "rails"
2
+ require "yaml"
3
3
 
4
- require 'honeybadger/ruby'
4
+ require "honeybadger/ruby"
5
5
 
6
6
  module Honeybadger
7
7
  module Init
8
8
  module Rails
9
9
  class Railtie < ::Rails::Railtie
10
10
  rake_tasks do
11
- load 'honeybadger/tasks.rb'
11
+ load "honeybadger/tasks.rb"
12
12
  end
13
13
 
14
- initializer 'honeybadger.install_middleware' do |app|
14
+ initializer "honeybadger.install_middleware" do |app|
15
15
  honeybadger_config = Honeybadger::Agent.instance.config
16
16
 
17
- if honeybadger_config[:'exceptions.enabled']
17
+ if honeybadger_config[:"exceptions.enabled"]
18
18
  app.config.middleware.insert(0, Honeybadger::Rack::ErrorNotifier)
19
- app.config.middleware.insert_before(Honeybadger::Rack::ErrorNotifier, Honeybadger::Rack::UserInformer) if honeybadger_config[:'user_informer.enabled']
20
- app.config.middleware.insert_before(Honeybadger::Rack::ErrorNotifier, Honeybadger::Rack::UserFeedback) if honeybadger_config[:'feedback.enabled']
19
+ app.config.middleware.insert_before(Honeybadger::Rack::ErrorNotifier, Honeybadger::Rack::UserInformer) if honeybadger_config[:"user_informer.enabled"]
20
+ app.config.middleware.insert_before(Honeybadger::Rack::ErrorNotifier, Honeybadger::Rack::UserFeedback) if honeybadger_config[:"feedback.enabled"]
21
21
  end
22
22
  end
23
23
 
24
24
  config.before_initialize do
25
25
  Honeybadger.init!({
26
- :root => ::Rails.root.to_s,
27
- :env => ::Rails.env,
28
- :'config.path' => ::Rails.root.join('config', 'honeybadger.yml'),
29
- :logger => Logging::FormattedLogger.new(::Rails.logger),
30
- :framework => :rails
26
+ root: ::Rails.root.to_s,
27
+ env: ::Rails.env,
28
+ "config.path": ::Rails.root.join("config", "honeybadger.yml"),
29
+ logger: Logging::FormattedLogger.new(::Rails.logger),
30
+ framework: :rails
31
31
  })
32
32
  end
33
33
 
@@ -36,7 +36,7 @@ module Honeybadger
36
36
  end
37
37
 
38
38
  console do
39
- unless Honeybadger::Agent.instance.config[:'insights.enabled'] = Honeybadger::Agent.instance.config[:'insights.console.enabled']
39
+ unless (Honeybadger::Agent.instance.config[:"insights.enabled"] = Honeybadger::Agent.instance.config[:"insights.console.enabled"])
40
40
  Honeybadger::Agent.instance.config.logger.debug("Rails console detected, shutting down Honeybadger Insights workers.")
41
41
  Honeybadger::Agent.instance.stop_insights
42
42
  end
@@ -1,4 +1,4 @@
1
- require 'honeybadger/ruby'
1
+ require "honeybadger/ruby"
2
2
 
3
3
  module Honeybadger
4
4
  # @api private
@@ -6,7 +6,7 @@ module Honeybadger
6
6
  module RakeHandler
7
7
  def self.included(klass)
8
8
  klass.class_eval do
9
- include Rake087Methods unless defined?(Rake::VERSION) && Rake::VERSION >= '0.9.0'
9
+ include Rake087Methods unless defined?(Rake::VERSION) && Rake::VERSION >= "0.9.0"
10
10
  alias_method :display_error_message_without_honeybadger, :display_error_message
11
11
  alias_method :display_error_message, :display_error_message_with_honeybadger
12
12
  end
@@ -20,7 +20,7 @@ module Honeybadger
20
20
  end
21
21
 
22
22
  def reconstruct_command_line
23
- "rake #{ARGV.join( ' ' )}"
23
+ "rake #{ARGV.join(" ")}"
24
24
  end
25
25
 
26
26
  # This module brings Rake 0.8.7 error handling to 0.9.0 standards
@@ -29,30 +29,28 @@ module Honeybadger
29
29
  #
30
30
  # Provide standard exception handling for the given block.
31
31
  def standard_exception_handling
32
- begin
33
- yield
34
- rescue SystemExit => ex
35
- # Exit silently with current status
36
- raise
37
- rescue OptionParser::InvalidOption => ex
38
- $stderr.puts ex.message
39
- exit(false)
40
- rescue Exception => ex
41
- # Exit with error message
42
- display_error_message(ex)
43
- exit(false)
44
- end
32
+ yield
33
+ rescue SystemExit
34
+ # Exit silently with current status
35
+ raise
36
+ rescue OptionParser::InvalidOption => ex
37
+ warn ex.message
38
+ exit(false)
39
+ rescue => ex
40
+ # Exit with error message
41
+ display_error_message(ex)
42
+ exit(false)
45
43
  end
46
44
 
47
45
  # Method extracted from Rake 0.8.7 source
48
46
  def display_error_message(ex)
49
- $stderr.puts "#{name} aborted!"
50
- $stderr.puts ex.message
47
+ warn "#{name} aborted!"
48
+ warn ex.message
51
49
  if options.trace
52
- $stderr.puts ex.backtrace.join("\n")
50
+ warn ex.backtrace.join("\n")
53
51
  else
54
- $stderr.puts ex.backtrace.find {|str| str =~ /#{@rakefile}/ } || ""
55
- $stderr.puts "(See full trace by running task with --trace)"
52
+ warn ex.backtrace.find { |str| str =~ /#{@rakefile}/ } || ""
53
+ warn "(See full trace by running task with --trace)"
56
54
  end
57
55
  end
58
56
  end
@@ -1,9 +1,9 @@
1
- require 'honeybadger/ruby'
1
+ require "honeybadger/ruby"
2
2
 
3
3
  Honeybadger.init!({
4
- :framework => :ruby,
5
- :env => ENV['RUBY_ENV'] || ENV['RACK_ENV'],
6
- :'logging.path' => 'STDOUT'
4
+ framework: :ruby,
5
+ env: ENV["RUBY_ENV"] || ENV["RACK_ENV"],
6
+ "logging.path": "STDOUT"
7
7
  })
8
8
 
9
9
  Honeybadger.load_plugins!
@@ -1,5 +1,5 @@
1
- require 'sinatra/base'
2
- require 'honeybadger/ruby'
1
+ require "sinatra/base"
2
+ require "honeybadger/ruby"
3
3
 
4
4
  module Honeybadger
5
5
  module Init
@@ -15,8 +15,8 @@ module Honeybadger
15
15
  Honeybadger.install_at_exit_callback
16
16
  build_without_honeybadger(*args, &block)
17
17
  end
18
- alias :build_without_honeybadger :build
19
- alias :build :build_with_honeybadger
18
+ alias_method :build_without_honeybadger, :build
19
+ alias_method :build, :build_with_honeybadger
20
20
 
21
21
  def configure_honeybadger
22
22
  return unless defined?(honeybadger_api_key)
@@ -27,21 +27,20 @@ module Honeybadger
27
27
 
28
28
  def install_honeybadger
29
29
  config = Honeybadger.config
30
- return unless config[:'sinatra.enabled']
31
- if config[:'exceptions.enabled']
30
+ return unless config[:"sinatra.enabled"]
31
+ if config[:"exceptions.enabled"]
32
32
  # These two must come before the ErrorNotifier, since an error/response
33
33
  # passes through middleware from inner to outer (bottom to top)
34
- install_honeybadger_middleware(Honeybadger::Rack::UserFeedback) if config[:'feedback.enabled']
35
- install_honeybadger_middleware(Honeybadger::Rack::UserInformer) if config[:'user_informer.enabled']
34
+ install_honeybadger_middleware(Honeybadger::Rack::UserFeedback) if config[:"feedback.enabled"]
35
+ install_honeybadger_middleware(Honeybadger::Rack::UserInformer) if config[:"user_informer.enabled"]
36
36
  install_honeybadger_middleware(Honeybadger::Rack::ErrorNotifier)
37
37
  end
38
38
  end
39
39
 
40
40
  def install_honeybadger_middleware(klass)
41
- return if middleware.any? {|m| m[0] == klass }
41
+ return if middleware.any? { |m| m[0] == klass }
42
42
  use(klass)
43
43
  end
44
-
45
44
  end
46
45
  end
47
46
  end
@@ -49,9 +48,9 @@ module Honeybadger
49
48
  end
50
49
 
51
50
  Honeybadger.init!({
52
- env: ENV['APP_ENV'] || ENV['RACK_ENV'],
51
+ env: ENV["APP_ENV"] || ENV["RACK_ENV"],
53
52
  framework: :sinatra,
54
- :'logging.path' => 'STDOUT'
53
+ "logging.path": "STDOUT"
55
54
  })
56
55
 
57
56
  Honeybadger.load_plugins!
@@ -1,7 +1,7 @@
1
- require 'honeybadger/histogram'
2
- require 'honeybadger/timer'
3
- require 'honeybadger/counter'
4
- require 'honeybadger/gauge'
1
+ require "honeybadger/histogram"
2
+ require "honeybadger/timer"
3
+ require "honeybadger/counter"
4
+ require "honeybadger/gauge"
5
5
 
6
6
  module Honeybadger
7
7
  # +Honeybadger::Instrumentation+ defines the API for collecting metric data from anywhere
@@ -47,14 +47,13 @@ module Honeybadger
47
47
  def time(name, *args)
48
48
  attributes = extract_attributes(args)
49
49
  callable = extract_callable(args)
50
- value = nil
51
50
 
52
- if callable
53
- value = monotonic_timer{ callable.call }[0]
51
+ value = if callable
52
+ monotonic_timer { callable.call }[0]
54
53
  elsif block_given?
55
- value = monotonic_timer{ yield }[0]
54
+ monotonic_timer { yield }[0]
56
55
  else
57
- value = attributes.delete(:duration) || attributes.delete(:value)
56
+ attributes.delete(:duration) || attributes.delete(:value)
58
57
  end
59
58
 
60
59
  Honeybadger::Timer.register(registry, name, attributes).tap do |timer|
@@ -69,14 +68,13 @@ module Honeybadger
69
68
  def histogram(name, *args)
70
69
  attributes = extract_attributes(args)
71
70
  callable = extract_callable(args)
72
- value = nil
73
71
 
74
- if callable
75
- value = monotonic_timer{ callable.call }[0]
72
+ value = if callable
73
+ monotonic_timer { callable.call }[0]
76
74
  elsif block_given?
77
- value = monotonic_timer{ yield }[0]
75
+ monotonic_timer { yield }[0]
78
76
  else
79
- value = attributes.delete(:duration) || attributes.delete(:value)
77
+ attributes.delete(:duration) || attributes.delete(:value)
80
78
  end
81
79
 
82
80
  Honeybadger::Histogram.register(registry, name, attributes).tap do |histogram|
@@ -91,14 +89,13 @@ module Honeybadger
91
89
  def increment_counter(name, *args)
92
90
  attributes = extract_attributes(args)
93
91
  callable = extract_callable(args)
94
- value = nil
95
92
 
96
- if callable
97
- value = callable.call
93
+ value = if callable
94
+ callable.call
98
95
  elsif block_given?
99
- value = yield
96
+ yield
100
97
  else
101
- value = attributes.delete(:by) || attributes.delete(:value) || 1
98
+ attributes.delete(:by) || attributes.delete(:value) || 1
102
99
  end
103
100
 
104
101
  Honeybadger::Counter.register(registry, name, attributes).tap do |counter|
@@ -109,14 +106,13 @@ module Honeybadger
109
106
  def decrement_counter(name, *args)
110
107
  attributes = extract_attributes(args)
111
108
  callable = extract_callable(args)
112
- value = nil
113
109
 
114
- if callable
115
- value = callable.call
110
+ value = if callable
111
+ callable.call
116
112
  elsif block_given?
117
- value = yield
113
+ yield
118
114
  else
119
- value = attributes.delete(:by) || attributes.delete(:value) || 1
115
+ attributes.delete(:by) || attributes.delete(:value) || 1
120
116
  end
121
117
 
122
118
  Honeybadger::Counter.register(registry, name, attributes).tap do |counter|
@@ -127,14 +123,13 @@ module Honeybadger
127
123
  def gauge(name, *args)
128
124
  attributes = extract_attributes(args)
129
125
  callable = extract_callable(args)
130
- value = nil
131
126
 
132
- if callable
133
- value = callable.call
127
+ value = if callable
128
+ callable.call
134
129
  elsif block_given?
135
- value = yield
130
+ yield
136
131
  else
137
- value = attributes.delete(:duration) || attributes.delete(:value)
132
+ attributes.delete(:duration) || attributes.delete(:value)
138
133
  end
139
134
 
140
135
  Honeybadger::Gauge.register(registry, name, attributes).tap do |gauge|
@@ -148,12 +143,12 @@ module Honeybadger
148
143
 
149
144
  # @api private
150
145
  def extract_attributes(args)
151
- args.select { |a| a.is_a?(Hash) }.first || {}
146
+ args.find { |a| a.is_a?(Hash) } || {}
152
147
  end
153
148
 
154
149
  # @api private
155
150
  def extract_callable(args)
156
- args.select { |a| a.respond_to?(:call) }.first
151
+ args.find { |a| a.respond_to?(:call) }
157
152
  end
158
153
  end
159
154
  end
@@ -1,4 +1,4 @@
1
- require 'honeybadger/instrumentation'
1
+ require "honeybadger/instrumentation"
2
2
 
3
3
  module Honeybadger
4
4
  # +Honeybadger::InstrumentationHelper+ is a module that can be included into any class. This module
@@ -25,7 +25,6 @@ module Honeybadger
25
25
  # end
26
26
  # end
27
27
  module InstrumentationHelper
28
-
29
28
  # returns two parameters, the first is the duration of the execution, and the second is
30
29
  # the return value of the passed block
31
30
  def monotonic_timer
@@ -53,9 +52,9 @@ module Honeybadger
53
52
  attributes = extract_attributes(args)
54
53
  callable = extract_callable(args)
55
54
  if callable
56
- metric_instrumentation.time(name, attributes, ->{ callable.call })
55
+ metric_instrumentation.time(name, attributes, -> { callable.call })
57
56
  elsif block_given?
58
- metric_instrumentation.time(name, attributes, ->{ yield })
57
+ metric_instrumentation.time(name, attributes, -> { yield })
59
58
  else
60
59
  metric_instrumentation.time(name, attributes)
61
60
  end
@@ -65,9 +64,9 @@ module Honeybadger
65
64
  attributes = extract_attributes(args)
66
65
  callable = extract_callable(args)
67
66
  if callable
68
- metric_instrumentation.histogram(name, attributes, ->{ callable.call })
67
+ metric_instrumentation.histogram(name, attributes, -> { callable.call })
69
68
  elsif block_given?
70
- metric_instrumentation.histogram(name, attributes, ->{ yield })
69
+ metric_instrumentation.histogram(name, attributes, -> { yield })
71
70
  else
72
71
  metric_instrumentation.histogram(name, attributes)
73
72
  end
@@ -77,9 +76,9 @@ module Honeybadger
77
76
  attributes = extract_attributes(args)
78
77
  callable = extract_callable(args)
79
78
  if callable
80
- metric_instrumentation.increment_counter(name, attributes, ->{ callable.call })
79
+ metric_instrumentation.increment_counter(name, attributes, -> { callable.call })
81
80
  elsif block_given?
82
- metric_instrumentation.increment_counter(name, attributes, ->{ yield })
81
+ metric_instrumentation.increment_counter(name, attributes, -> { yield })
83
82
  else
84
83
  metric_instrumentation.increment_counter(name, attributes)
85
84
  end
@@ -89,9 +88,9 @@ module Honeybadger
89
88
  attributes = extract_attributes(args)
90
89
  callable = extract_callable(args)
91
90
  if callable
92
- metric_instrumentation.decrement_counter(name, attributes, ->{ callable.call })
91
+ metric_instrumentation.decrement_counter(name, attributes, -> { callable.call })
93
92
  elsif block_given?
94
- metric_instrumentation.decrement_counter(name, attributes, ->{ yield })
93
+ metric_instrumentation.decrement_counter(name, attributes, -> { yield })
95
94
  else
96
95
  metric_instrumentation.decrement_counter(name, attributes)
97
96
  end
@@ -101,9 +100,9 @@ module Honeybadger
101
100
  attributes = extract_attributes(args)
102
101
  callable = extract_callable(args)
103
102
  if callable
104
- metric_instrumentation.gauge(name, attributes, ->{ callable.call })
103
+ metric_instrumentation.gauge(name, attributes, -> { callable.call })
105
104
  elsif block_given?
106
- metric_instrumentation.gauge(name, attributes, ->{ yield })
105
+ metric_instrumentation.gauge(name, attributes, -> { yield })
107
106
  else
108
107
  metric_instrumentation.gauge(name, attributes)
109
108
  end