honeybadger 3.4.0.beta1 → 4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +88 -0
- data/README.md +3 -2
- data/lib/honeybadger/agent.rb +6 -8
- data/lib/honeybadger/config.rb +15 -7
- data/lib/honeybadger/config/defaults.rb +0 -5
- data/lib/honeybadger/config/ruby.rb +19 -7
- data/lib/honeybadger/notice.rb +68 -114
- data/lib/honeybadger/plugins/shoryuken.rb +7 -9
- data/lib/honeybadger/util/request_hash.rb +1 -0
- data/lib/honeybadger/util/request_payload.rb +0 -1
- data/lib/honeybadger/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd1a07eb33ec42cce8c7c6d96bc3288e8d0279a972d4a7828116caae0f93bd8d
|
4
|
+
data.tar.gz: 36cde090bab29995bcb96a34b53e69a6f7d2eb558b5829e68715a7a05e8f62b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2545a49f6d994af837afc5add427d9049a8a5f67170b7ee701b124a010f14783484d9ad10215ac5dfa5fc4e3058a4a8774dbd74463a61bfae556466b98a94a3
|
7
|
+
data.tar.gz: 74907484ab440182d22054624c59c22cac00a07d14551efeaa2ff1df4f1fb60c08991a4fd13ef576589aaa671d7239d6762ed7aad8012c6af8c2dd1af22fcf07
|
data/CHANGELOG.md
CHANGED
@@ -4,15 +4,103 @@ CHANGELOG](http://keepachangelog.com/) for how to update this file. This project
|
|
4
4
|
adheres to [Semantic Versioning](http://semver.org/).
|
5
5
|
|
6
6
|
## [Unreleased]
|
7
|
+
|
8
|
+
## [4.0.0] - 2018-08-21
|
7
9
|
### Added
|
8
10
|
- Added `before_notify` hooks to be defined, this allows setting up of multiple
|
9
11
|
hooks which will be invoked with a `notice` before a `notice` is sent. Each
|
10
12
|
`before_notify` hook MUST be a `callable` (lambda, Proc etc,) with an arity of 1.
|
11
13
|
- Added the ability to halt notices in callbacks using `notice.halt!`
|
14
|
+
- Make essential attributes on Notice writable:
|
15
|
+
```ruby
|
16
|
+
Honeybadger.configure do |config|
|
17
|
+
config.before_notify do |notice|
|
18
|
+
notice.api_key = 'custom api key',
|
19
|
+
notice.error_message = "badgers!",
|
20
|
+
notice.error_class = 'MyError',
|
21
|
+
notice.backtrace = ["/path/to/file.rb:5 in `method'"],
|
22
|
+
notice.fingerprint = 'some unique string',
|
23
|
+
notice.tags = ['foo', 'bar'],
|
24
|
+
notice.context = { user: 33 },
|
25
|
+
notice.controller = 'MyController',
|
26
|
+
notice.action = 'index',
|
27
|
+
notice.parameters = { q: 'badgers?' },
|
28
|
+
notice.session = { uid: 42 },
|
29
|
+
notice.url = "/badgers",
|
30
|
+
end
|
31
|
+
end
|
32
|
+
```
|
12
33
|
|
13
34
|
### Fixed
|
14
35
|
- Ignore SIGTERM SignalExceptions.
|
15
36
|
|
37
|
+
### Removed
|
38
|
+
- Removed Notice#[]
|
39
|
+
|
40
|
+
### Changed
|
41
|
+
- The public method `Notice#backtrace` is now exposed as the raw Ruby
|
42
|
+
backtrace instead of an instance of `Honeybadger::Backtrace` (a private
|
43
|
+
class).
|
44
|
+
|
45
|
+
Before:
|
46
|
+
```ruby
|
47
|
+
notice.backtrace # => #<Honeybadger::Backtrace>
|
48
|
+
```
|
49
|
+
|
50
|
+
After:
|
51
|
+
```ruby
|
52
|
+
notice.backtrace # => ["/path/to/file.rb:5 in `method'"]
|
53
|
+
```
|
54
|
+
- `notice[:context]` now defaults to an empty Hash instead of nil.
|
55
|
+
|
56
|
+
Before:
|
57
|
+
```ruby
|
58
|
+
notice[:context] # => nil
|
59
|
+
```
|
60
|
+
|
61
|
+
After:
|
62
|
+
```ruby
|
63
|
+
notice[:context] # => {}
|
64
|
+
```
|
65
|
+
- The public method `Notice#fingerprint` now returns the original
|
66
|
+
String which was passed in from the `:fingerprint` option or the
|
67
|
+
`exception_fingerprint` callback, not a SHA1 hashed value. The value is
|
68
|
+
still hashed before sending through to the API.
|
69
|
+
- The public method `Honeybadger.exception_filter` has been deprecated in favor
|
70
|
+
of `before_notify`:
|
71
|
+
```ruby
|
72
|
+
Honeybadger.configure do |config|
|
73
|
+
config.before_notify do |notice|
|
74
|
+
notice.halt!
|
75
|
+
end
|
76
|
+
end
|
77
|
+
```
|
78
|
+
- The public method `Honeybadger.exception_fingerprint` has been deprecated in favor
|
79
|
+
of `before_notify`:
|
80
|
+
```ruby
|
81
|
+
Honeybadger.configure do |config|
|
82
|
+
config.before_notify do |notice|
|
83
|
+
notice.exception_fingerprint = 'new fingerprint'
|
84
|
+
end
|
85
|
+
end
|
86
|
+
```
|
87
|
+
- The public method `Honeybadger.backtrace_filter` has been deprecated in favor
|
88
|
+
of `before_notify`:
|
89
|
+
```ruby
|
90
|
+
Honeybadger.configure do |config|
|
91
|
+
config.before_notify do |notice|
|
92
|
+
notice.backtrace.reject!{|x| x =~ /gem/}
|
93
|
+
end
|
94
|
+
end
|
95
|
+
```
|
96
|
+
|
97
|
+
### Removed
|
98
|
+
- The `disabled` option is now removed, Use the `report_data` option instead.
|
99
|
+
|
100
|
+
## [3.3.1] - 2018-08-02
|
101
|
+
### Fixed
|
102
|
+
- Fix synchronous throttling in shoryuken
|
103
|
+
|
16
104
|
## [3.3.0] - 2018-01-29
|
17
105
|
### Changed
|
18
106
|
- Use prepend to add Sidekiq Middleware to fix context getting cleared.
|
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# Honeybadger for Ruby
|
2
2
|
|
3
|
-
[](http://travis-ci.org/honeybadger-io/honeybadger-ruby)
|
4
|
+
[](http://badge.fury.io/rb/honeybadger)
|
5
|
+
[](https://dependabot.com/compatibility-score.html?dependency-name=honeybadger&package-manager=bundler&version-scheme=semver)
|
5
6
|
|
6
7
|
This is the notifier gem for integrating apps with the :zap: [Honeybadger Exception Notifier for Ruby and Rails](http://honeybadger.io).
|
7
8
|
|
data/lib/honeybadger/agent.rb
CHANGED
@@ -110,8 +110,6 @@ module Honeybadger
|
|
110
110
|
# @return [String] UUID reference to the notice within Honeybadger.
|
111
111
|
# @return [false] when ignored.
|
112
112
|
def notify(exception_or_opts, opts = {})
|
113
|
-
return false if config.disabled?
|
114
|
-
|
115
113
|
if exception_or_opts.is_a?(Exception)
|
116
114
|
opts[:exception] = exception_or_opts
|
117
115
|
elsif exception_or_opts.respond_to?(:to_hash)
|
@@ -293,26 +291,26 @@ module Honeybadger
|
|
293
291
|
# @yield [Config::Ruby] configuration object.
|
294
292
|
def_delegator :config, :configure
|
295
293
|
|
296
|
-
# Callback to ignore exceptions.
|
294
|
+
# DEPRECATED: Callback to ignore exceptions.
|
297
295
|
#
|
298
296
|
# See public API documentation for {Honeybadger::Notice} for available attributes.
|
299
297
|
#
|
300
298
|
# @example
|
301
299
|
# # Ignoring based on error message:
|
302
300
|
# Honeybadger.exception_filter do |notice|
|
303
|
-
# notice
|
301
|
+
# notice.error_message =~ /sensitive data/
|
304
302
|
# end
|
305
303
|
#
|
306
304
|
# # Ignore an entire class of exceptions:
|
307
305
|
# Honeybadger.exception_filter do |notice|
|
308
|
-
# notice
|
306
|
+
# notice.exception.class < MyError
|
309
307
|
# end
|
310
308
|
#
|
311
309
|
# @!method exception_filter
|
312
310
|
# @yieldreturn [Boolean] true (to ignore) or false (to send).
|
313
311
|
def_delegator :config, :exception_filter
|
314
312
|
|
315
|
-
# Callback to add a custom grouping strategy for exceptions. The return
|
313
|
+
# DEPRECATED: Callback to add a custom grouping strategy for exceptions. The return
|
316
314
|
# value is hashed and sent to Honeybadger. Errors with the same fingerprint
|
317
315
|
# will be grouped.
|
318
316
|
#
|
@@ -320,14 +318,14 @@ module Honeybadger
|
|
320
318
|
#
|
321
319
|
# @example
|
322
320
|
# Honeybadger.exception_fingerprint do |notice|
|
323
|
-
# [notice
|
321
|
+
# [notice.error_class, notice.component, notice.backtrace.to_s].join(':')
|
324
322
|
# end
|
325
323
|
#
|
326
324
|
# @!method exception_fingerprint
|
327
325
|
# @yieldreturn [#to_s] The fingerprint of the error.
|
328
326
|
def_delegator :config, :exception_fingerprint
|
329
327
|
|
330
|
-
# Callback to filter backtrace lines. One use for this is to make
|
328
|
+
# DEPRECATED: Callback to filter backtrace lines. One use for this is to make
|
331
329
|
# additional [PROJECT_ROOT] or [GEM_ROOT] substitutions, which are used by
|
332
330
|
# Honeybadger when grouping errors and displaying application traces.
|
333
331
|
#
|
data/lib/honeybadger/config.rb
CHANGED
@@ -80,7 +80,11 @@ module Honeybadger
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def backtrace_filter
|
83
|
-
|
83
|
+
if block_given?
|
84
|
+
warn('DEPRECATED: backtrace_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#backtrace_filter')
|
85
|
+
self[:backtrace_filter] = Proc.new
|
86
|
+
end
|
87
|
+
|
84
88
|
self[:backtrace_filter]
|
85
89
|
end
|
86
90
|
|
@@ -89,12 +93,20 @@ module Honeybadger
|
|
89
93
|
end
|
90
94
|
|
91
95
|
def exception_filter
|
92
|
-
|
96
|
+
if block_given?
|
97
|
+
warn('DEPRECATED: exception_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_filter')
|
98
|
+
self[:exception_filter] = Proc.new
|
99
|
+
end
|
100
|
+
|
93
101
|
self[:exception_filter]
|
94
102
|
end
|
95
103
|
|
96
104
|
def exception_fingerprint
|
97
|
-
|
105
|
+
if block_given?
|
106
|
+
warn('DEPRECATED: exception_fingerprint is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_fingerprint')
|
107
|
+
self[:exception_fingerprint] = Proc.new
|
108
|
+
end
|
109
|
+
|
98
110
|
self[:exception_fingerprint]
|
99
111
|
end
|
100
112
|
|
@@ -145,10 +157,6 @@ module Honeybadger
|
|
145
157
|
@backend = nil
|
146
158
|
end
|
147
159
|
|
148
|
-
def disabled?
|
149
|
-
!!self[:disabled]
|
150
|
-
end
|
151
|
-
|
152
160
|
def dev?
|
153
161
|
self[:env] && Array(self[:development_environments]).include?(self[:env])
|
154
162
|
end
|
@@ -68,11 +68,6 @@ module Honeybadger
|
|
68
68
|
default: false,
|
69
69
|
type: Boolean
|
70
70
|
},
|
71
|
-
disabled: {
|
72
|
-
description: 'Prevents Honeybadger from starting entirely.',
|
73
|
-
default: false,
|
74
|
-
type: Boolean
|
75
|
-
},
|
76
71
|
development_environments: {
|
77
72
|
description: 'Environments which will not report data by default (use report_data to enable/disable explicitly).',
|
78
73
|
default: DEVELOPMENT_ENVIRONMENTS,
|
@@ -81,11 +81,6 @@ module Honeybadger
|
|
81
81
|
get(:backend) || config.backend
|
82
82
|
end
|
83
83
|
|
84
|
-
def backtrace_filter
|
85
|
-
hash[:backtrace_filter] = Proc.new if block_given?
|
86
|
-
get(:backtrace_filter)
|
87
|
-
end
|
88
|
-
|
89
84
|
def before_notify(action = nil, &block)
|
90
85
|
(hash[:before_notify] ||= []).tap do |before_notify_hooks|
|
91
86
|
if action && validate_before_action(action)
|
@@ -96,13 +91,30 @@ module Honeybadger
|
|
96
91
|
end
|
97
92
|
end
|
98
93
|
|
94
|
+
def backtrace_filter
|
95
|
+
if block_given?
|
96
|
+
logger.warn('DEPRECATED: backtrace_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#backtrace_filter')
|
97
|
+
hash[:backtrace_filter] = Proc.new if block_given?
|
98
|
+
end
|
99
|
+
|
100
|
+
get(:backtrace_filter)
|
101
|
+
end
|
102
|
+
|
99
103
|
def exception_filter
|
100
|
-
|
104
|
+
if block_given?
|
105
|
+
logger.warn('DEPRECATED: exception_filter is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_filter')
|
106
|
+
hash[:exception_filter] = Proc.new
|
107
|
+
end
|
108
|
+
|
101
109
|
get(:exception_filter)
|
102
110
|
end
|
103
111
|
|
104
112
|
def exception_fingerprint
|
105
|
-
|
113
|
+
if block_given?
|
114
|
+
logger.warn('DEPRECATED: exception_fingerprint is deprecated. Please use before_notify instead. See https://docs.honeybadger.io/ruby/support/v4-upgrade#exception_fingerprint')
|
115
|
+
hash[:exception_fingerprint] = Proc.new
|
116
|
+
end
|
117
|
+
|
106
118
|
get(:exception_fingerprint)
|
107
119
|
end
|
108
120
|
|
data/lib/honeybadger/notice.rb
CHANGED
@@ -66,50 +66,55 @@ module Honeybadger
|
|
66
66
|
attr_reader :cause
|
67
67
|
|
68
68
|
# The backtrace from the given exception or hash.
|
69
|
-
|
69
|
+
attr_accessor :backtrace
|
70
70
|
|
71
71
|
# Custom fingerprint for error, used to group similar errors together.
|
72
|
-
|
72
|
+
attr_accessor :fingerprint
|
73
73
|
|
74
74
|
# Tags which will be applied to error.
|
75
75
|
attr_reader :tags
|
76
|
+
def tags=(tags)
|
77
|
+
@tags = construct_tags(tags)
|
78
|
+
end
|
76
79
|
|
77
80
|
# The name of the class of error (example: RuntimeError).
|
78
|
-
|
81
|
+
attr_accessor :error_class
|
79
82
|
|
80
83
|
# The message from the exception, or a general description of the error.
|
81
|
-
|
84
|
+
attr_accessor :error_message
|
82
85
|
|
83
|
-
#
|
84
|
-
|
86
|
+
# The context Hash.
|
87
|
+
attr_accessor :context
|
85
88
|
|
86
89
|
# CGI variables such as HTTP_METHOD.
|
87
|
-
|
90
|
+
attr_accessor :cgi_data
|
88
91
|
|
89
92
|
# A hash of parameters from the query string or post body.
|
90
|
-
|
93
|
+
attr_accessor :params
|
91
94
|
alias_method :parameters, :params
|
92
95
|
|
93
96
|
# The component (if any) which was used in this request (usually the controller).
|
94
|
-
|
97
|
+
attr_accessor :component
|
95
98
|
alias_method :controller, :component
|
96
99
|
|
97
100
|
# The action (if any) that was called in this request.
|
98
|
-
|
101
|
+
attr_accessor :action
|
99
102
|
|
100
103
|
# A hash of session data from the request.
|
101
|
-
|
102
|
-
def session; @request[:session]; end
|
104
|
+
attr_accessor :session
|
103
105
|
|
104
106
|
# The URL at which the error occurred (if any).
|
105
|
-
|
107
|
+
attr_accessor :url
|
106
108
|
|
107
109
|
# Local variables are extracted from first frame of backtrace.
|
108
|
-
|
110
|
+
attr_accessor :local_variables
|
109
111
|
|
110
|
-
#
|
112
|
+
# The API key used to deliver this notice.
|
111
113
|
attr_accessor :api_key
|
112
114
|
|
115
|
+
# Deprecated: Excerpt from source file.
|
116
|
+
attr_reader :source
|
117
|
+
|
113
118
|
# @api private
|
114
119
|
# Cache project path substitutions for backtrace lines.
|
115
120
|
PROJECT_ROOT_CACHE = {}
|
@@ -143,44 +148,44 @@ module Honeybadger
|
|
143
148
|
|
144
149
|
# @api private
|
145
150
|
def initialize(config, opts = {})
|
146
|
-
@now
|
147
|
-
@pid
|
148
|
-
@id
|
151
|
+
@now = Time.now.utc
|
152
|
+
@pid = Process.pid
|
153
|
+
@id = SecureRandom.uuid
|
154
|
+
@stats = Util::Stats.all
|
149
155
|
|
150
156
|
@opts = opts
|
151
157
|
@config = config
|
152
158
|
|
153
159
|
@rack_env = opts.fetch(:rack_env, nil)
|
154
|
-
|
155
160
|
@request_sanitizer = Util::Sanitizer.new(filters: params_filters)
|
156
161
|
|
157
162
|
@exception = unwrap_exception(opts[:exception])
|
158
|
-
@error_class = exception_attribute(:error_class, 'Notice') {|exception| exception.class.name }
|
159
|
-
@error_message = exception_attribute(:error_message, 'No message provided') do |exception|
|
160
|
-
"#{exception.class.name}: #{exception.message}"
|
161
|
-
end
|
162
|
-
@backtrace = parse_backtrace(exception_attribute(:backtrace, caller))
|
163
|
-
|
164
|
-
@request = construct_request_hash(config, opts)
|
165
|
-
|
166
|
-
@context = construct_context_hash(opts, exception)
|
167
|
-
|
168
163
|
@cause = opts[:cause] || exception_cause(@exception) || $!
|
169
|
-
@causes = unwrap_causes(@cause)
|
170
164
|
|
171
|
-
@
|
172
|
-
@tags = construct_tags(context[:tags]) | @tags if context
|
165
|
+
@causes = unwrap_causes(@cause)
|
173
166
|
|
174
|
-
|
167
|
+
self.error_class = exception_attribute(:error_class, 'Notice') {|exception| exception.class.name }
|
168
|
+
self.error_message = exception_attribute(:error_message, 'No message provided') do |exception|
|
169
|
+
"#{exception.class.name}: #{exception.message}"
|
170
|
+
end
|
171
|
+
self.backtrace = exception_attribute(:backtrace, caller)
|
175
172
|
|
176
|
-
|
173
|
+
self.context = construct_context_hash(opts, exception)
|
174
|
+
self.local_variables = local_variables_from_exception(exception, config)
|
175
|
+
self.api_key = opts[:api_key] || config[:api_key]
|
176
|
+
self.tags = construct_tags(opts[:tags]) | construct_tags(context[:tags])
|
177
177
|
|
178
|
-
|
178
|
+
self.url = opts[:url] || request_hash[:url] || nil
|
179
|
+
self.action = opts[:action] || request_hash[:action] || nil
|
180
|
+
self.component = opts[:controller] || opts[:component] || request_hash[:component] || nil
|
181
|
+
self.params = opts[:parameters] || opts[:params] || request_hash[:params] || {}
|
182
|
+
self.session = opts[:session] || request_hash[:session] || {}
|
183
|
+
self.cgi_data = opts[:cgi_data] || request_hash[:cgi_data] || {}
|
179
184
|
|
180
|
-
|
185
|
+
self.session = opts[:session][:data] if opts[:session] && opts[:session][:data]
|
181
186
|
|
182
187
|
# Fingerprint must be calculated last since callback operates on `self`.
|
183
|
-
|
188
|
+
self.fingerprint = fingerprint_from_opts(opts)
|
184
189
|
end
|
185
190
|
|
186
191
|
# @api private
|
@@ -188,8 +193,9 @@ module Honeybadger
|
|
188
193
|
#
|
189
194
|
# @return [Hash] JSON representation of notice.
|
190
195
|
def as_json(*args)
|
191
|
-
|
192
|
-
|
196
|
+
request = construct_request_hash
|
197
|
+
request[:context] = s(context)
|
198
|
+
request[:local_variables] = local_variables if local_variables
|
193
199
|
|
194
200
|
{
|
195
201
|
api_key: s(api_key),
|
@@ -198,12 +204,12 @@ module Honeybadger
|
|
198
204
|
token: id,
|
199
205
|
class: s(error_class),
|
200
206
|
message: s(error_message),
|
201
|
-
backtrace: s(backtrace
|
202
|
-
fingerprint:
|
207
|
+
backtrace: s(parse_backtrace(backtrace)),
|
208
|
+
fingerprint: fingerprint_hash,
|
203
209
|
tags: s(tags),
|
204
210
|
causes: s(causes)
|
205
211
|
},
|
206
|
-
request:
|
212
|
+
request: request,
|
207
213
|
server: {
|
208
214
|
project_root: s(config[:root]),
|
209
215
|
revision: s(config[:revision]),
|
@@ -223,23 +229,6 @@ module Honeybadger
|
|
223
229
|
::JSON.generate(as_json(*a))
|
224
230
|
end
|
225
231
|
|
226
|
-
# Allows properties to be accessed using a hash-like syntax.
|
227
|
-
#
|
228
|
-
# @example
|
229
|
-
# notice[:error_message]
|
230
|
-
#
|
231
|
-
# @param [Symbol] method The given key for an attribute.
|
232
|
-
#
|
233
|
-
# @return [Object] The attribute value.
|
234
|
-
def [](method)
|
235
|
-
case method
|
236
|
-
when :request
|
237
|
-
self
|
238
|
-
else
|
239
|
-
send(method)
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
232
|
# @api private
|
244
233
|
# Determines if this notice should be ignored.
|
245
234
|
def ignore?
|
@@ -261,7 +250,7 @@ module Honeybadger
|
|
261
250
|
|
262
251
|
private
|
263
252
|
|
264
|
-
attr_reader :config, :opts, :
|
253
|
+
attr_reader :config, :opts, :stats, :now, :pid, :causes,
|
265
254
|
:request_sanitizer, :rack_env
|
266
255
|
|
267
256
|
def ignore_by_origin?
|
@@ -333,21 +322,23 @@ module Honeybadger
|
|
333
322
|
end
|
334
323
|
|
335
324
|
def request_hash
|
336
|
-
|
337
|
-
Util::RequestHash.from_env(rack_env)
|
325
|
+
@request_hash ||= Util::RequestHash.from_env(rack_env)
|
338
326
|
end
|
339
327
|
|
340
|
-
# Construct the request
|
328
|
+
# Construct the request data.
|
341
329
|
#
|
342
|
-
# Returns
|
343
|
-
def construct_request_hash
|
344
|
-
request = {
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
330
|
+
# Returns Hash request data.
|
331
|
+
def construct_request_hash
|
332
|
+
request = {
|
333
|
+
url: url,
|
334
|
+
component: component,
|
335
|
+
action: action,
|
336
|
+
params: params,
|
337
|
+
session: session,
|
338
|
+
cgi_data: cgi_data,
|
339
|
+
sanitizer: request_sanitizer
|
340
|
+
}
|
349
341
|
request.delete_if {|k,v| config.excluded_request_keys.include?(k) }
|
350
|
-
request[:sanitizer] = request_sanitizer
|
351
342
|
Util::RequestPayload.build(request)
|
352
343
|
end
|
353
344
|
|
@@ -368,7 +359,7 @@ module Honeybadger
|
|
368
359
|
context.merge!(Context(opts[:global_context]))
|
369
360
|
context.merge!(exception_context(exception))
|
370
361
|
context.merge!(Context(opts[:context]))
|
371
|
-
context
|
362
|
+
context
|
372
363
|
end
|
373
364
|
|
374
365
|
def fingerprint_from_opts(opts)
|
@@ -382,11 +373,9 @@ module Honeybadger
|
|
382
373
|
end
|
383
374
|
end
|
384
375
|
|
385
|
-
def
|
386
|
-
|
387
|
-
|
388
|
-
Digest::SHA1.hexdigest(fingerprint.to_s)
|
389
|
-
end
|
376
|
+
def fingerprint_hash
|
377
|
+
return unless fingerprint
|
378
|
+
Digest::SHA1.hexdigest(fingerprint.to_s)
|
390
379
|
end
|
391
380
|
|
392
381
|
def construct_tags(tags)
|
@@ -457,7 +446,7 @@ module Honeybadger
|
|
457
446
|
filters: construct_backtrace_filters(opts),
|
458
447
|
config: config,
|
459
448
|
source_radius: config[:'exceptions.source_radius']
|
460
|
-
)
|
449
|
+
).to_a
|
461
450
|
end
|
462
451
|
|
463
452
|
# Unwrap the exception so that original exception is ignored or
|
@@ -499,7 +488,7 @@ module Honeybadger
|
|
499
488
|
causes << {
|
500
489
|
class: c.class.name,
|
501
490
|
message: c.message,
|
502
|
-
backtrace: parse_backtrace(c.backtrace || caller)
|
491
|
+
backtrace: parse_backtrace(c.backtrace || caller)
|
503
492
|
}
|
504
493
|
i += 1
|
505
494
|
c = exception_cause(c)
|
@@ -515,40 +504,5 @@ module Honeybadger
|
|
515
504
|
def rails_params_filters
|
516
505
|
rack_env && Array(rack_env['action_dispatch.parameter_filter']) or []
|
517
506
|
end
|
518
|
-
|
519
|
-
# This is how much Honeybadger cares about Rails developers. :)
|
520
|
-
#
|
521
|
-
# Some Rails projects include ActionDispatch::TestProcess globally for the
|
522
|
-
# use of `fixture_file_upload` in tests. This is a bad practice because it
|
523
|
-
# includes other methods -- such as #session -- which override existing
|
524
|
-
# methods on *all objects*. This creates the following bug in Notice:
|
525
|
-
#
|
526
|
-
# When you call #session on any object which had previously defined it
|
527
|
-
# (such as OpenStruct), that newly defined method calls #session on
|
528
|
-
# +@request+ (defined in `ActionDispatch::TestProcess`), and if +@request+
|
529
|
-
# doesn't exist in that object, it calls #session *again* on `nil`, which
|
530
|
-
# also inherited it from Object, resulting in a SystemStackError.
|
531
|
-
#
|
532
|
-
# See https://stackoverflow.com/questions/18202261/include-actiondispatchtestprocess-prevents-guard-from-reloading-properly
|
533
|
-
# for more info.
|
534
|
-
#
|
535
|
-
# This method restores the correct #session method on @request and warns
|
536
|
-
# the user of the issue.
|
537
|
-
#
|
538
|
-
# Returns nothing.
|
539
|
-
def monkey_patch_action_dispatch_test_process!
|
540
|
-
return unless defined?(ActionDispatch::TestProcess) && defined?(self.fixture_file_upload)
|
541
|
-
|
542
|
-
STDOUT.puts('WARNING: It appears you may be including ActionDispatch::TestProcess globally. Check out https://www.honeybadger.io/s/adtp for more info.')
|
543
|
-
|
544
|
-
def @request.session
|
545
|
-
@table[:session]
|
546
|
-
end
|
547
|
-
|
548
|
-
def self.session
|
549
|
-
@request.session
|
550
|
-
end
|
551
|
-
end
|
552
|
-
|
553
507
|
end
|
554
508
|
end
|
@@ -6,16 +6,14 @@ module Honeybadger
|
|
6
6
|
module Shoryuken
|
7
7
|
class Middleware
|
8
8
|
def call(_worker, _queue, sqs_msg, body)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
Honeybadger.notify(e, parameters: notification_params(body))
|
15
|
-
end
|
16
|
-
|
17
|
-
raise e
|
9
|
+
begin
|
10
|
+
yield
|
11
|
+
rescue => e
|
12
|
+
if attempt_threshold <= receive_count(sqs_msg)
|
13
|
+
Honeybadger.notify(e, parameters: notification_params(body))
|
18
14
|
end
|
15
|
+
|
16
|
+
raise e
|
19
17
|
end
|
20
18
|
ensure
|
21
19
|
Honeybadger.context.clear!
|
@@ -29,7 +29,6 @@ module Honeybadger
|
|
29
29
|
payload[key] = sanitizer.sanitize(opts[key])
|
30
30
|
end
|
31
31
|
|
32
|
-
payload[:session] = opts[:session][:data] if opts[:session] && opts[:session][:data]
|
33
32
|
payload[:url] = sanitizer.filter_url(payload[:url]) if payload[:url]
|
34
33
|
if payload[:cgi_data][HTTP_COOKIE_KEY]
|
35
34
|
payload[:cgi_data][HTTP_COOKIE_KEY] = sanitizer.filter_cookies(payload[:cgi_data][HTTP_COOKIE_KEY])
|
data/lib/honeybadger/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: honeybadger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Honeybadger Industries LLC
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Make managing application errors a more pleasant experience.
|
14
14
|
email:
|
@@ -138,12 +138,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
138
138
|
version: 2.1.0
|
139
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
140
|
requirements:
|
141
|
-
- - "
|
141
|
+
- - ">="
|
142
142
|
- !ruby/object:Gem::Version
|
143
|
-
version:
|
143
|
+
version: '0'
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.7.
|
146
|
+
rubygems_version: 2.7.6
|
147
147
|
signing_key:
|
148
148
|
specification_version: 4
|
149
149
|
summary: Error reports you can be happy about.
|