honeybadger 5.29.0 → 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 +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 -223
  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 -89
  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 +4 -4
@@ -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,8 +15,8 @@ module Honeybadger
15
15
 
16
16
  def invoke_command_with_honeybadger(*args)
17
17
  invoke_command_without_honeybadger(*args)
18
- rescue Exception => e
19
- Honeybadger.notify(e)
18
+ rescue => error
19
+ Honeybadger.notify(error)
20
20
  raise
21
21
  end
22
22
  end
@@ -25,7 +25,7 @@ module Honeybadger
25
25
  requirement { defined?(::Thor.no_commands) }
26
26
 
27
27
  execution do
28
- return unless Honeybadger.config[:'exceptions.enabled']
28
+ return unless Honeybadger.config[:"exceptions.enabled"]
29
29
  ::Thor.send(:include, Thor)
30
30
  end
31
31
  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
  Plugin.register do
@@ -9,8 +9,8 @@ module Honeybadger
9
9
  ::Warden::Manager.after_set_user do |user, auth, opts|
10
10
  if user.respond_to?(:id)
11
11
  ::Honeybadger.context({
12
- :user_scope => opts[:scope].to_s,
13
- :user_id => user.id.to_s
12
+ user_scope: opts[:scope].to_s,
13
+ user_id: user.id.to_s
14
14
  })
15
15
  end
16
16
  end
@@ -1,7 +1,7 @@
1
- require 'forwardable'
2
- require 'rack/request'
1
+ require "forwardable"
2
+ require "rack/request"
3
3
 
4
- require 'honeybadger/ruby'
4
+ require "honeybadger/ruby"
5
5
 
6
6
  module Honeybadger
7
7
  module Rack
@@ -23,22 +23,22 @@ module Honeybadger
23
23
 
24
24
  def initialize(app, agent = nil)
25
25
  @app = app
26
- @agent = agent.kind_of?(Agent) && agent
26
+ @agent = agent.is_a?(Agent) && agent
27
27
  end
28
28
 
29
29
  def call(env)
30
30
  agent.with_rack_env(env) do
31
31
  begin
32
- env['honeybadger.config'] = config
32
+ env["honeybadger.config"] = config
33
33
  response = @app.call(env)
34
- rescue Exception => raised
35
- env['honeybadger.error_id'] = notify_honeybadger(raised, env)
34
+ rescue => error
35
+ env["honeybadger.error_id"] = notify_honeybadger(error, env)
36
36
  raise
37
37
  end
38
38
 
39
39
  framework_exception = framework_exception(env)
40
40
  if framework_exception
41
- env['honeybadger.error_id'] = notify_honeybadger(framework_exception, env)
41
+ env["honeybadger.error_id"] = notify_honeybadger(framework_exception, env)
42
42
  end
43
43
 
44
44
  response
@@ -57,15 +57,15 @@ module Honeybadger
57
57
  end
58
58
 
59
59
  def ignored_user_agent?(env)
60
- true if config[:'exceptions.ignored_user_agents'].
61
- flatten.
62
- any? { |ua| ua === env['HTTP_USER_AGENT'] }
60
+ true if config[:"exceptions.ignored_user_agents"]
61
+ .flatten
62
+ .any? { |ua| ua === env["HTTP_USER_AGENT"] }
63
63
  end
64
64
 
65
65
  def notify_honeybadger(exception, env)
66
66
  return if ignored_user_agent?(env)
67
67
 
68
- if config[:'breadcrumbs.enabled']
68
+ if config[:"breadcrumbs.enabled"]
69
69
  # Drop the last breadcrumb only if the message contains the error class name
70
70
  agent.breadcrumbs.drop_previous_breadcrumb_if do |bc|
71
71
  bc.category == "log" && bc.message.include?(exception.class.to_s)
@@ -84,8 +84,8 @@ module Honeybadger
84
84
  end
85
85
 
86
86
  def framework_exception(env)
87
- env['action_dispatch.exception'] || env['rack.exception'] ||
88
- env['sinatra.error'] || env['honeybadger.exception']
87
+ env["action_dispatch.exception"] || env["rack.exception"] ||
88
+ env["sinatra.error"] || env["honeybadger.exception"]
89
89
  end
90
90
  end
91
91
  end
@@ -1,13 +1,13 @@
1
- require 'erb'
2
- require 'uri'
3
- require 'forwardable'
1
+ require "erb"
2
+ require "uri"
3
+ require "forwardable"
4
4
 
5
5
  begin
6
- require 'i18n'
6
+ require "i18n"
7
7
  rescue LoadError
8
8
  module Honeybadger
9
9
  module I18n
10
- def self.t(key, options={})
10
+ def self.t(key, options = {})
11
11
  options[:default]
12
12
  end
13
13
  end
@@ -23,18 +23,18 @@ module Honeybadger
23
23
 
24
24
  def initialize(app, agent = nil)
25
25
  @app = app
26
- @agent = agent.kind_of?(Agent) && agent
26
+ @agent = agent.is_a?(Agent) && agent
27
27
  end
28
28
 
29
29
  def call(env)
30
30
  status, headers, body = @app.call(env)
31
- if env['honeybadger.error_id'] && form = render_form(env['honeybadger.error_id'])
31
+ if env["honeybadger.error_id"] && (form = render_form(env["honeybadger.error_id"]))
32
32
  new_body = []
33
33
  body.each do |chunk|
34
34
  new_body << chunk.gsub("<!-- HONEYBADGER FEEDBACK -->", form)
35
35
  end
36
36
  body.close if body.respond_to?(:close)
37
- headers['Content-Length'] = new_body.reduce(0) { |a,e| a += e.bytesize }.to_s
37
+ headers["Content-Length"] = new_body.reduce(0) { |a, e| a + e.bytesize }.to_s
38
38
  body = new_body
39
39
  end
40
40
  [status, headers, body]
@@ -43,7 +43,7 @@ module Honeybadger
43
43
  # @private
44
44
  # @todo Make this method and others actually private.
45
45
  def action
46
- URI.parse("#{config.connection_protocol}://#{config[:'connection.host']}:#{config.connection_port}/v1/feedback/").to_s
46
+ URI.parse("#{config.connection_protocol}://#{config[:"connection.host"]}:#{config.connection_port}/v1/feedback/").to_s
47
47
  rescue URI::InvalidURIError
48
48
  nil
49
49
  end
@@ -56,7 +56,7 @@ module Honeybadger
56
56
 
57
57
  # @private
58
58
  def custom_template_file
59
- @custom_template_file ||= File.join(config[:root], 'lib', 'honeybadger', 'templates', 'feedback_form.erb')
59
+ @custom_template_file ||= File.join(config[:root], "lib", "honeybadger", "templates", "feedback_form.erb")
60
60
  end
61
61
 
62
62
  # @private
@@ -69,7 +69,7 @@ module Honeybadger
69
69
  if custom_template_file?
70
70
  custom_template_file
71
71
  else
72
- File.expand_path('../../templates/feedback_form.erb', __FILE__)
72
+ File.expand_path("../../templates/feedback_form.erb", __FILE__)
73
73
  end
74
74
  end
75
75
 
@@ -81,7 +81,6 @@ module Honeybadger
81
81
  def agent
82
82
  @agent || Honeybadger::Agent.instance
83
83
  end
84
-
85
84
  end
86
85
  end
87
86
  end
@@ -1,4 +1,4 @@
1
- require 'forwardable'
1
+ require "forwardable"
2
2
 
3
3
  module Honeybadger
4
4
  module Rack
@@ -9,23 +9,23 @@ module Honeybadger
9
9
 
10
10
  def initialize(app, agent = nil)
11
11
  @app = app
12
- @agent = agent.kind_of?(Agent) && agent
12
+ @agent = agent.is_a?(Agent) && agent
13
13
  end
14
14
 
15
15
  def replacement(with)
16
- config[:'user_informer.info'].gsub(/\{\{\s*error_id\s*\}\}/, with.to_s)
16
+ config[:"user_informer.info"].gsub(/\{\{\s*error_id\s*\}\}/, with.to_s)
17
17
  end
18
18
 
19
19
  def call(env)
20
20
  status, headers, body = @app.call(env)
21
- if env['honeybadger.error_id']
21
+ if env["honeybadger.error_id"]
22
22
  new_body = []
23
- replace = replacement(env['honeybadger.error_id'])
23
+ replace = replacement(env["honeybadger.error_id"])
24
24
  body.each do |chunk|
25
25
  new_body << chunk.gsub("<!-- HONEYBADGER ERROR -->", replace)
26
26
  end
27
27
  body.close if body.respond_to?(:close)
28
- headers['Content-Length'] = new_body.reduce(0) { |a,e| a += e.bytesize }.to_s
28
+ headers["Content-Length"] = new_body.reduce(0) { |a, e| a + e.bytesize }.to_s
29
29
  body = new_body
30
30
  end
31
31
  [status, headers, body]
@@ -2,7 +2,7 @@ module Honeybadger
2
2
  class Registry
3
3
  def initialize
4
4
  @mutex = Mutex.new
5
- @metrics = Hash.new
5
+ @metrics = {}
6
6
  end
7
7
 
8
8
  def register(metric)
@@ -19,7 +19,7 @@ module Honeybadger
19
19
 
20
20
  def flush
21
21
  @mutex.synchronize do
22
- @metrics = Hash.new
22
+ @metrics = {}
23
23
  end
24
24
  end
25
25
 
@@ -4,7 +4,7 @@ module Honeybadger
4
4
  @registry = registry
5
5
  @config = config
6
6
  @options = options
7
- @interval = config[:'insights.registry_flush_interval'] || options.fetch(:interval, 60)
7
+ @interval = config[:"insights.registry_flush_interval"] || options.fetch(:interval, 60)
8
8
  @end_time = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC) + @interval
9
9
  end
10
10
 
@@ -1,2 +1,2 @@
1
- require 'honeybadger/const'
2
- require 'honeybadger/singleton'
1
+ require "honeybadger/const"
2
+ require "honeybadger/singleton"
@@ -1,5 +1,5 @@
1
- require 'forwardable'
2
- require 'honeybadger/agent'
1
+ require "forwardable"
2
+ require "honeybadger/agent"
3
3
 
4
4
  # Honeybadger's public API is made up of two parts: the {Honeybadger} singleton
5
5
  # module, and the {Agent} class. The singleton module delegates its methods to
@@ -25,90 +25,91 @@ module Honeybadger
25
25
  # @!method $2(...)
26
26
  # Forwards to {$1}.
27
27
  # @see Agent#$2
28
- def_delegator :'Honeybadger::Agent.instance', :check_in
29
- def_delegator :'Honeybadger::Agent.instance', :context
30
- def_delegator :'Honeybadger::Agent.instance', :event_context
31
- def_delegator :'Honeybadger::Agent.instance', :configure
32
- def_delegator :'Honeybadger::Agent.instance', :get_context
33
- def_delegator :'Honeybadger::Agent.instance', :get_event_context
34
- def_delegator :'Honeybadger::Agent.instance', :flush
35
- def_delegator :'Honeybadger::Agent.instance', :stop
36
- def_delegator :'Honeybadger::Agent.instance', :exception_filter
37
- def_delegator :'Honeybadger::Agent.instance', :exception_fingerprint
38
- def_delegator :'Honeybadger::Agent.instance', :backtrace_filter
39
- def_delegator :'Honeybadger::Agent.instance', :add_breadcrumb
40
- def_delegator :'Honeybadger::Agent.instance', :breadcrumbs
41
- def_delegator :'Honeybadger::Agent.instance', :clear!
42
- def_delegator :'Honeybadger::Agent.instance', :track_deployment
43
- def_delegator :'Honeybadger::Agent.instance', :event
44
- def_delegator :'Honeybadger::Agent.instance', :collect
45
- def_delegator :'Honeybadger::Agent.instance', :registry
46
- def_delegator :'Honeybadger::Agent.instance', :instrumentation
47
- def_delegator :'Honeybadger::Agent.instance', :time
48
- def_delegator :'Honeybadger::Agent.instance', :histogram
49
- def_delegator :'Honeybadger::Agent.instance', :gauge
50
- def_delegator :'Honeybadger::Agent.instance', :increment_counter
51
- def_delegator :'Honeybadger::Agent.instance', :decrement_counter
28
+ def_delegator :"Honeybadger::Agent.instance", :check_in
29
+ def_delegator :"Honeybadger::Agent.instance", :context
30
+ def_delegator :"Honeybadger::Agent.instance", :event_context
31
+ def_delegator :"Honeybadger::Agent.instance", :configure
32
+ def_delegator :"Honeybadger::Agent.instance", :get_context
33
+ def_delegator :"Honeybadger::Agent.instance", :get_event_context
34
+ def_delegator :"Honeybadger::Agent.instance", :flush
35
+ def_delegator :"Honeybadger::Agent.instance", :stop
36
+ def_delegator :"Honeybadger::Agent.instance", :exception_filter
37
+ def_delegator :"Honeybadger::Agent.instance", :exception_fingerprint
38
+ def_delegator :"Honeybadger::Agent.instance", :backtrace_filter
39
+ def_delegator :"Honeybadger::Agent.instance", :add_breadcrumb
40
+ def_delegator :"Honeybadger::Agent.instance", :breadcrumbs
41
+ def_delegator :"Honeybadger::Agent.instance", :clear!
42
+ def_delegator :"Honeybadger::Agent.instance", :track_deployment
43
+ def_delegator :"Honeybadger::Agent.instance", :event
44
+ def_delegator :"Honeybadger::Agent.instance", :collect
45
+ def_delegator :"Honeybadger::Agent.instance", :registry
46
+ def_delegator :"Honeybadger::Agent.instance", :instrumentation
47
+ def_delegator :"Honeybadger::Agent.instance", :time
48
+ def_delegator :"Honeybadger::Agent.instance", :histogram
49
+ def_delegator :"Honeybadger::Agent.instance", :gauge
50
+ def_delegator :"Honeybadger::Agent.instance", :increment_counter
51
+ def_delegator :"Honeybadger::Agent.instance", :decrement_counter
52
52
 
53
53
  # @!macro [attach] def_delegator
54
54
  # @!method $2(...)
55
55
  # @api private
56
56
  # Forwards to {$1}.
57
57
  # @see Agent#$2
58
- def_delegator :'Honeybadger::Agent.instance', :config
59
- def_delegator :'Honeybadger::Agent.instance', :init!
60
- def_delegator :'Honeybadger::Agent.instance', :with_rack_env
58
+ def_delegator :"Honeybadger::Agent.instance", :config
59
+ def_delegator :"Honeybadger::Agent.instance", :init!
60
+ def_delegator :"Honeybadger::Agent.instance", :with_rack_env
61
61
 
62
62
  # @!method notify(...)
63
63
  # Forwards to {Agent.instance}.
64
64
  # @see Agent#notify
65
- def notify(exception_or_opts=nil, opts = {}, **kwargs)
65
+ def notify(exception_or_opts = nil, **opts)
66
66
  # Note this is defined directly (instead of via forwardable) so that
67
67
  # generated stack traces work as expected.
68
- Agent.instance.notify(exception_or_opts, opts, **kwargs)
68
+ Agent.instance.notify(exception_or_opts, **opts)
69
69
  end
70
70
 
71
71
  # @api private
72
72
  def load_plugins!
73
- Dir[File.expand_path('../plugins/*.rb', __FILE__)].each do |plugin|
73
+ Dir[File.expand_path("../plugins/*.rb", __FILE__)].sort.each do |plugin|
74
74
  require plugin
75
75
  end
76
- Plugin.load!(self.config)
76
+ Plugin.load!(config)
77
77
  end
78
78
 
79
79
  # @api private
80
80
  def install_at_exit_callback
81
81
  at_exit do
82
- if $! && !ignored_exception?($!) && Honeybadger.config[:'exceptions.notify_at_exit']
83
- Honeybadger.notify($!, component: 'at_exit', sync: true)
82
+ if $! && !ignored_exception?($!) && Honeybadger.config[:"exceptions.notify_at_exit"]
83
+ Honeybadger.notify($!, component: "at_exit", sync: true)
84
84
  end
85
85
 
86
- Honeybadger.stop if Honeybadger.config[:'send_data_at_exit']
86
+ Honeybadger.stop if Honeybadger.config[:send_data_at_exit]
87
87
  end
88
88
  end
89
89
 
90
90
  # @deprecated
91
91
  def start(config = {})
92
- raise NoMethodError, <<-WARNING
93
- `Honeybadger.start` is no longer necessary and has been removed.
92
+ raise NoMethodError, <<~WARNING
93
+ `Honeybadger.start` is no longer necessary and has been removed.
94
94
 
95
- Use `Honeybadger.configure` to explicitly configure the agent from Ruby moving forward:
95
+ Use `Honeybadger.configure` to explicitly configure the agent from Ruby moving forward:
96
96
 
97
- Honeybadger.configure do |config|
98
- config.api_key = 'project api key'
99
- config.exceptions.ignore += [CustomError]
100
- end
101
- WARNING
97
+ Honeybadger.configure do |config|
98
+ config.api_key = 'project api key'
99
+ config.exceptions.ignore += [CustomError]
100
+ end
101
+ WARNING
102
102
  end
103
103
 
104
104
  private
105
+
105
106
  # @api private
106
107
  def ignored_exception?(exception)
107
108
  exception.is_a?(SystemExit) ||
108
- ( exception.is_a?(SignalException) &&
109
- ( (exception.respond_to?(:signm) && exception.signm == "SIGTERM") ||
109
+ (exception.is_a?(SignalException) &&
110
+ ((exception.respond_to?(:signm) && exception.signm == "SIGTERM") ||
110
111
  # jruby has a missing #signm implementation
111
- ["TERM", "SIGTERM"].include?(exception.to_s) )
112
- )
112
+ ["TERM", "SIGTERM"].include?(exception.to_s))
113
+ )
113
114
  end
114
115
  end
@@ -5,18 +5,18 @@ namespace :honeybadger do
5
5
 
6
6
  desc "Verify your gem installation by sending a test exception to the honeybadger service"
7
7
  task :test do
8
- warn_task_moved('test')
8
+ warn_task_moved("test")
9
9
  end
10
10
 
11
11
  desc "Notify Honeybadger of a new deploy."
12
12
  task :deploy do
13
- warn_task_moved('deploy')
13
+ warn_task_moved("deploy")
14
14
  end
15
15
 
16
16
  namespace :heroku do
17
17
  desc "Install Heroku deploy notifications addon"
18
18
  task :add_deploy_notification do
19
- warn_task_moved('heroku:add_deploy_notification', 'honeybadger heroku help install_deploy_notification')
19
+ warn_task_moved("heroku:add_deploy_notification", "honeybadger heroku help install_deploy_notification")
20
20
  end
21
21
  end
22
22
  end
@@ -1,4 +1,4 @@
1
- require 'honeybadger/gauge'
1
+ require "honeybadger/gauge"
2
2
 
3
3
  module Honeybadger
4
4
  class Timer < Gauge
@@ -1,11 +1,11 @@
1
- require 'forwardable'
2
- require 'net/http'
3
- require 'json'
4
- require 'zlib'
5
- require 'openssl'
1
+ require "forwardable"
2
+ require "net/http"
3
+ require "json"
4
+ require "zlib"
5
+ require "openssl"
6
6
 
7
- require 'honeybadger/version'
8
- require 'honeybadger/logging'
7
+ require "honeybadger/version"
8
+ require "honeybadger/logging"
9
9
 
10
10
  module Honeybadger
11
11
  module Util
@@ -15,23 +15,23 @@ module Honeybadger
15
15
  include Honeybadger::Logging::Helper
16
16
 
17
17
  HEADERS = {
18
- 'Content-type'.freeze => 'application/json'.freeze,
19
- 'Content-Encoding'.freeze => 'deflate'.freeze,
20
- 'Accept'.freeze => 'text/json, application/json'.freeze,
21
- 'User-Agent'.freeze => "HB-Ruby #{VERSION}; #{RUBY_VERSION}; #{RUBY_PLATFORM}".freeze
18
+ "Content-type".freeze => "application/json".freeze,
19
+ "Content-Encoding".freeze => "deflate".freeze,
20
+ "Accept".freeze => "text/json, application/json".freeze,
21
+ "User-Agent".freeze => "HB-Ruby #{VERSION}; #{RUBY_VERSION}; #{RUBY_PLATFORM}".freeze
22
22
  }.freeze
23
23
 
24
24
  ERRORS = [Timeout::Error,
25
- Errno::EINVAL,
26
- Errno::ECONNRESET,
27
- Errno::ECONNREFUSED,
28
- Errno::ENETUNREACH,
29
- EOFError,
30
- Net::HTTPBadResponse,
31
- Net::HTTPHeaderSyntaxError,
32
- Net::ProtocolError,
33
- OpenSSL::SSL::SSLError,
34
- SocketError].freeze
25
+ Errno::EINVAL,
26
+ Errno::ECONNRESET,
27
+ Errno::ECONNREFUSED,
28
+ Errno::ENETUNREACH,
29
+ EOFError,
30
+ Net::HTTPBadResponse,
31
+ Net::HTTPHeaderSyntaxError,
32
+ Net::ProtocolError,
33
+ OpenSSL::SSL::SSLError,
34
+ SocketError].freeze
35
35
 
36
36
  def initialize(config)
37
37
  @config = config
@@ -66,19 +66,19 @@ module Honeybadger
66
66
  def http_headers(headers = nil)
67
67
  {}.tap do |hash|
68
68
  hash.merge!(HEADERS)
69
- hash.merge!({'X-API-Key' => config[:api_key].to_s})
69
+ hash["X-API-Key"] = config[:api_key].to_s
70
70
  hash.merge!(headers) if headers
71
71
  end
72
72
  end
73
73
 
74
74
  def setup_http_connection
75
- http_class = Net::HTTP::Proxy(config[:'connection.proxy_host'], config[:'connection.proxy_port'], config[:'connection.proxy_user'], config[:'connection.proxy_pass'])
76
- http = http_class.new(config[:'connection.host'], config.connection_port)
75
+ http_class = Net::HTTP::Proxy(config[:"connection.proxy_host"], config[:"connection.proxy_port"], config[:"connection.proxy_user"], config[:"connection.proxy_pass"])
76
+ http = http_class.new(config[:"connection.host"], config.connection_port)
77
77
 
78
- http.read_timeout = config[:'connection.http_read_timeout']
79
- http.open_timeout = config[:'connection.http_open_timeout']
78
+ http.read_timeout = config[:"connection.http_read_timeout"]
79
+ http.open_timeout = config[:"connection.http_open_timeout"]
80
80
 
81
- if config[:'connection.secure']
81
+ if config[:"connection.secure"]
82
82
  http.use_ssl = true
83
83
 
84
84
  http.ca_file = config.ca_bundle_path
@@ -1,13 +1,13 @@
1
- require 'set'
1
+ require "set"
2
2
 
3
3
  module Honeybadger
4
4
  module Util
5
5
  # Constructs a request hash from a Rack::Request matching the /v1/notices
6
6
  # API specification.
7
7
  module RequestHash
8
- HTTP_HEADER_PREFIX = 'HTTP_'.freeze
8
+ HTTP_HEADER_PREFIX = "HTTP_".freeze
9
9
 
10
- CGI_WHITELIST = %w(
10
+ CGI_WHITELIST = %w[
11
11
  AUTH_TYPE
12
12
  CONTENT_LENGTH
13
13
  CONTENT_TYPE
@@ -22,7 +22,7 @@ module Honeybadger
22
22
  SERVER_PORT
23
23
  SERVER_PROTOCOL
24
24
  SERVER_SOFTWARE
25
- ).freeze
25
+ ].freeze
26
26
 
27
27
  def self.from_env(env)
28
28
  return {} unless defined?(::Rack::Request)
@@ -32,8 +32,8 @@ module Honeybadger
32
32
 
33
33
  hash[:url] = extract_url(request)
34
34
  hash[:params] = extract_params(request)
35
- hash[:component] = hash[:params]['controller']
36
- hash[:action] = hash[:params]['action']
35
+ hash[:component] = hash[:params]["controller"]
36
+ hash[:action] = hash[:params]["action"]
37
37
  hash[:session] = extract_session(request)
38
38
  hash[:cgi_data] = extract_cgi_data(request)
39
39
 
@@ -41,15 +41,15 @@ module Honeybadger
41
41
  end
42
42
 
43
43
  def self.extract_url(request)
44
- request.env['honeybadger.request.url'] || request.url
44
+ request.env["honeybadger.request.url"] || request.url
45
45
  rescue => e
46
46
  "Failed to access URL -- #{e}"
47
47
  end
48
48
 
49
49
  def self.extract_params(request)
50
- (request.env['action_dispatch.request.parameters'] || request.params).to_hash || {}
50
+ (request.env["action_dispatch.request.parameters"] || request.params).to_hash || {}
51
51
  rescue => e
52
- { error: "Failed to access params -- #{e}" }
52
+ {error: "Failed to access params -- #{e}"}
53
53
  end
54
54
 
55
55
  def self.extract_session(request)
@@ -58,11 +58,11 @@ module Honeybadger
58
58
  # Rails raises ArgumentError when `config.secret_token` is missing, and
59
59
  # ActionDispatch::Session::SessionRestoreError when the session can't be
60
60
  # restored.
61
- { error: "Failed to access session data -- #{e}" }
61
+ {error: "Failed to access session data -- #{e}"}
62
62
  end
63
63
 
64
64
  def self.extract_cgi_data(request)
65
- request.env.each_with_object({}) do |(k,v), env|
65
+ request.env.each_with_object({}) do |(k, v), env|
66
66
  next unless k.is_a?(String)
67
67
  next unless k.start_with?(HTTP_HEADER_PREFIX) || CGI_WHITELIST.include?(k)
68
68
  env[k] = v
@@ -1,4 +1,4 @@
1
- require 'honeybadger/util/sanitizer'
1
+ require "honeybadger/util/sanitizer"
2
2
 
3
3
  module Honeybadger
4
4
  module Util
@@ -18,7 +18,7 @@ module Honeybadger
18
18
  KEYS = DEFAULTS.keys.freeze
19
19
 
20
20
  # The cgi_data key where the raw Cookie header is stored.
21
- HTTP_COOKIE_KEY = 'HTTP_COOKIE'.freeze
21
+ HTTP_COOKIE_KEY = "HTTP_COOKIE".freeze
22
22
 
23
23
  def self.build(opts = {})
24
24
  sanitizer = opts.fetch(:sanitizer) { Sanitizer.new }
@@ -8,7 +8,7 @@ module Honeybadger
8
8
  from_git
9
9
 
10
10
  revision = revision.to_s.strip
11
- return unless revision =~ /\S/
11
+ return unless /\S/.match?(revision)
12
12
 
13
13
  revision
14
14
  end
@@ -20,18 +20,26 @@ module Honeybadger
20
20
  #
21
21
  # See https://devcenter.heroku.com/articles/dyno-metadata
22
22
  def from_heroku
23
- ENV['HEROKU_SLUG_COMMIT']
23
+ ENV["HEROKU_SLUG_COMMIT"]
24
24
  end
25
25
 
26
26
  def from_capistrano(root)
27
- file = File.join(root, 'REVISION')
27
+ file = File.join(root, "REVISION")
28
28
  return nil unless File.file?(file)
29
- File.read(file) rescue nil
29
+ begin
30
+ File.read(file)
31
+ rescue
32
+ nil
33
+ end
30
34
  end
31
35
 
32
36
  def from_git
33
- return nil unless File.directory?('.git')
34
- `git rev-parse HEAD 2> #{File::NULL}` rescue nil
37
+ return nil unless File.directory?(".git")
38
+ begin
39
+ `git rev-parse HEAD 2> #{File::NULL}`
40
+ rescue
41
+ nil
42
+ end
35
43
  end
36
44
  end
37
45
  end