honeybadger 3.3.1 → 3.4.0.beta1
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 +5 -5
- data/CHANGELOG.md +6 -2
- data/lib/honeybadger/agent.rb +16 -0
- data/lib/honeybadger/config.rb +4 -0
- data/lib/honeybadger/config/ruby.rb +34 -2
- data/lib/honeybadger/notice.rb +16 -2
- data/lib/honeybadger/plugins/shoryuken.rb +9 -7
- data/lib/honeybadger/singleton.rb +12 -1
- data/lib/honeybadger/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b610a8fe048c882cb15dadd39ae9adc1955e82952d58cd5852ee6ed0477a72bf
|
4
|
+
data.tar.gz: d65617bd6beb55778cc44001c0d1a8703b797b180e628d5f66f1c3278986fafe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66818e625bb5e5c8ca2c06f8ebd3e7bbac07f4caacb4955ecb90fbb77f08df014df579adf1f3606ed4d26b315c5f108764f61f459d35253a50d0473ddf3b34ec
|
7
|
+
data.tar.gz: 2df50c6580e2ebed48cc1e4a9001cd94588f5cd23bfd80f451166a5ce9d6d1ecf6db4301dab7e5eddaaea67af5cf5e85e81fd6ff985800fb1738fb2dba8340b0
|
data/CHANGELOG.md
CHANGED
@@ -4,10 +4,14 @@ 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
|
+
### Added
|
8
|
+
- Added `before_notify` hooks to be defined, this allows setting up of multiple
|
9
|
+
hooks which will be invoked with a `notice` before a `notice` is sent. Each
|
10
|
+
`before_notify` hook MUST be a `callable` (lambda, Proc etc,) with an arity of 1.
|
11
|
+
- Added the ability to halt notices in callbacks using `notice.halt!`
|
7
12
|
|
8
|
-
## [3.3.1] - 2018-08-02
|
9
13
|
### Fixed
|
10
|
-
-
|
14
|
+
- Ignore SIGTERM SignalExceptions.
|
11
15
|
|
12
16
|
## [3.3.0] - 2018-01-29
|
13
17
|
### Changed
|
data/lib/honeybadger/agent.rb
CHANGED
@@ -127,6 +127,11 @@ module Honeybadger
|
|
127
127
|
|
128
128
|
notice = Notice.new(config, opts)
|
129
129
|
|
130
|
+
config.before_notify_hooks.each do |hook|
|
131
|
+
break if notice.halted?
|
132
|
+
with_error_handling { hook.call(notice) }
|
133
|
+
end
|
134
|
+
|
130
135
|
unless notice.api_key =~ NOT_BLANK
|
131
136
|
error { sprintf('Unable to send error report: API key is missing. id=%s', notice.id) }
|
132
137
|
return false
|
@@ -137,6 +142,11 @@ module Honeybadger
|
|
137
142
|
return false
|
138
143
|
end
|
139
144
|
|
145
|
+
if notice.halted?
|
146
|
+
debug { 'halted notice feature=notices' }
|
147
|
+
return false
|
148
|
+
end
|
149
|
+
|
140
150
|
info { sprintf('Reporting error id=%s', notice.id) }
|
141
151
|
|
142
152
|
if opts[:sync]
|
@@ -381,6 +391,12 @@ module Honeybadger
|
|
381
391
|
@worker = Worker.new(config)
|
382
392
|
end
|
383
393
|
|
394
|
+
def with_error_handling
|
395
|
+
yield
|
396
|
+
rescue => ex
|
397
|
+
error { "Rescued an error in a before notify hook: #{ex.message}" }
|
398
|
+
end
|
399
|
+
|
384
400
|
@instance = new(Config.new)
|
385
401
|
end
|
386
402
|
end
|
data/lib/honeybadger/config.rb
CHANGED
@@ -70,7 +70,7 @@ module Honeybadger
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def logger
|
73
|
-
get(:logger)
|
73
|
+
get(:logger) || config.logger
|
74
74
|
end
|
75
75
|
|
76
76
|
def backend=(backend)
|
@@ -78,7 +78,7 @@ module Honeybadger
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def backend
|
81
|
-
get(:backend)
|
81
|
+
get(:backend) || config.backend
|
82
82
|
end
|
83
83
|
|
84
84
|
def backtrace_filter
|
@@ -86,6 +86,16 @@ module Honeybadger
|
|
86
86
|
get(:backtrace_filter)
|
87
87
|
end
|
88
88
|
|
89
|
+
def before_notify(action = nil, &block)
|
90
|
+
(hash[:before_notify] ||= []).tap do |before_notify_hooks|
|
91
|
+
if action && validate_before_action(action)
|
92
|
+
before_notify_hooks << action
|
93
|
+
elsif block_given? && validate_before_action(block)
|
94
|
+
before_notify_hooks << block
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
89
99
|
def exception_filter
|
90
100
|
hash[:exception_filter] = Proc.new if block_given?
|
91
101
|
get(:exception_filter)
|
@@ -95,6 +105,28 @@ module Honeybadger
|
|
95
105
|
hash[:exception_fingerprint] = Proc.new if block_given?
|
96
106
|
get(:exception_fingerprint)
|
97
107
|
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def validate_before_action(action)
|
112
|
+
if !action.respond_to?(:call)
|
113
|
+
logger.warn(
|
114
|
+
'You attempted to add a before notify hook that does not respond ' \
|
115
|
+
'to #call. We are discarding this hook so your intended behavior ' \
|
116
|
+
'will not occur.'
|
117
|
+
)
|
118
|
+
false
|
119
|
+
elsif action.arity != 1
|
120
|
+
logger.warn(
|
121
|
+
'You attempted to add a before notify hook that has an arity ' \
|
122
|
+
'other than one. We are discarding this hook so your intended ' \
|
123
|
+
'behavior will not occur.'
|
124
|
+
)
|
125
|
+
false
|
126
|
+
else
|
127
|
+
true
|
128
|
+
end
|
129
|
+
end
|
98
130
|
end
|
99
131
|
end
|
100
132
|
end
|
data/lib/honeybadger/notice.rb
CHANGED
@@ -107,8 +107,8 @@ module Honeybadger
|
|
107
107
|
# Local variables are extracted from first frame of backtrace.
|
108
108
|
attr_reader :local_variables
|
109
109
|
|
110
|
-
# The API key used to deliver this notice.
|
111
|
-
|
110
|
+
# Public: The API key used to deliver this notice.
|
111
|
+
attr_accessor :api_key
|
112
112
|
|
113
113
|
# @api private
|
114
114
|
# Cache project path substitutions for backtrace lines.
|
@@ -246,6 +246,19 @@ module Honeybadger
|
|
246
246
|
ignore_by_origin? || ignore_by_class? || ignore_by_callbacks?
|
247
247
|
end
|
248
248
|
|
249
|
+
# Halts the notice and the before_notify callback chain.
|
250
|
+
#
|
251
|
+
# Returns nothing.
|
252
|
+
def halt!
|
253
|
+
@halted ||= true
|
254
|
+
end
|
255
|
+
|
256
|
+
# @api private
|
257
|
+
# Determines if this notice will be discarded.
|
258
|
+
def halted?
|
259
|
+
!!@halted
|
260
|
+
end
|
261
|
+
|
249
262
|
private
|
250
263
|
|
251
264
|
attr_reader :config, :opts, :context, :stats, :now, :pid, :causes,
|
@@ -536,5 +549,6 @@ module Honeybadger
|
|
536
549
|
@request.session
|
537
550
|
end
|
538
551
|
end
|
552
|
+
|
539
553
|
end
|
540
554
|
end
|
@@ -6,14 +6,16 @@ module Honeybadger
|
|
6
6
|
module Shoryuken
|
7
7
|
class Middleware
|
8
8
|
def call(_worker, _queue, sqs_msg, body)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
Honeybadger.flush do
|
10
|
+
begin
|
11
|
+
yield
|
12
|
+
rescue => e
|
13
|
+
if attempt_threshold <= receive_count(sqs_msg)
|
14
|
+
Honeybadger.notify(e, parameters: notification_params(body))
|
15
|
+
end
|
16
|
+
|
17
|
+
raise e
|
14
18
|
end
|
15
|
-
|
16
|
-
raise e
|
17
19
|
end
|
18
20
|
ensure
|
19
21
|
Honeybadger.context.clear!
|
@@ -64,7 +64,7 @@ module Honeybadger
|
|
64
64
|
# @api private
|
65
65
|
def install_at_exit_callback
|
66
66
|
at_exit do
|
67
|
-
if $! &&
|
67
|
+
if $! && !ignored_exception?($!) && Honeybadger.config[:'exceptions.notify_at_exit']
|
68
68
|
Honeybadger.notify($!, component: 'at_exit', sync: true)
|
69
69
|
end
|
70
70
|
|
@@ -85,4 +85,15 @@ module Honeybadger
|
|
85
85
|
end
|
86
86
|
WARNING
|
87
87
|
end
|
88
|
+
|
89
|
+
private
|
90
|
+
# @api private
|
91
|
+
def ignored_exception?(exception)
|
92
|
+
exception.is_a?(SystemExit) ||
|
93
|
+
( exception.is_a?(SignalException) &&
|
94
|
+
( (exception.respond_to?(:signm) && exception.signm == "SIGTERM") ||
|
95
|
+
# jruby has a missing #signm implementation
|
96
|
+
["TERM", "SIGTERM"].include?(exception.to_s) )
|
97
|
+
)
|
98
|
+
end
|
88
99
|
end
|
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: 3.
|
4
|
+
version: 3.4.0.beta1
|
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-03-22 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: 1.3.1
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.
|
146
|
+
rubygems_version: 2.7.3
|
147
147
|
signing_key:
|
148
148
|
specification_version: 4
|
149
149
|
summary: Error reports you can be happy about.
|