honeybadger 3.4.0.beta1 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
[![Build Status](https://secure.travis-ci.org/honeybadger-io/honeybadger-ruby.
|
4
|
-
[![Gem Version](https://badge.fury.io/rb/honeybadger.
|
3
|
+
[![Build Status](https://secure.travis-ci.org/honeybadger-io/honeybadger-ruby.svg?branch=master)](http://travis-ci.org/honeybadger-io/honeybadger-ruby)
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/honeybadger.svg)](http://badge.fury.io/rb/honeybadger)
|
5
|
+
[![SemVer](https://api.dependabot.com/badges/compatibility_score?dependency-name=honeybadger&package-manager=bundler&version-scheme=semver)](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.
|