honeybadger 5.29.1 → 6.0.6
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 +69 -0
- data/lib/honeybadger/agent.rb +36 -35
- data/lib/honeybadger/backend/base.rb +11 -11
- data/lib/honeybadger/backend/debug.rb +4 -4
- data/lib/honeybadger/backend/null.rb +2 -2
- data/lib/honeybadger/backend/server.rb +11 -11
- data/lib/honeybadger/backend/test.rb +2 -2
- data/lib/honeybadger/backend.rb +6 -6
- data/lib/honeybadger/backtrace.rb +27 -22
- data/lib/honeybadger/breadcrumbs/active_support.rb +9 -9
- data/lib/honeybadger/breadcrumbs/breadcrumb.rb +1 -2
- data/lib/honeybadger/breadcrumbs/collector.rb +4 -4
- data/lib/honeybadger/breadcrumbs/logging.rb +11 -14
- data/lib/honeybadger/breadcrumbs.rb +3 -3
- data/lib/honeybadger/cli/deploy.rb +7 -7
- data/lib/honeybadger/cli/exec.rb +41 -41
- data/lib/honeybadger/cli/helpers.rb +18 -18
- data/lib/honeybadger/cli/heroku.rb +36 -36
- data/lib/honeybadger/cli/install.rb +44 -44
- data/lib/honeybadger/cli/main.rb +107 -107
- data/lib/honeybadger/cli/notify.rb +13 -13
- data/lib/honeybadger/cli/test.rb +109 -94
- data/lib/honeybadger/cli.rb +3 -3
- data/lib/honeybadger/config/defaults.rb +224 -218
- data/lib/honeybadger/config/env.rb +5 -5
- data/lib/honeybadger/config/ruby.rb +19 -19
- data/lib/honeybadger/config/yaml.rb +12 -12
- data/lib/honeybadger/config.rb +76 -78
- data/lib/honeybadger/const.rb +4 -4
- data/lib/honeybadger/context_manager.rb +16 -16
- data/lib/honeybadger/conversions.rb +9 -6
- data/lib/honeybadger/counter.rb +4 -4
- data/lib/honeybadger/event.rb +3 -3
- data/lib/honeybadger/events_worker.rb +34 -33
- data/lib/honeybadger/gauge.rb +2 -2
- data/lib/honeybadger/histogram.rb +4 -4
- data/lib/honeybadger/init/hanami.rb +5 -5
- data/lib/honeybadger/init/rails.rb +14 -14
- data/lib/honeybadger/init/rake.rb +19 -21
- data/lib/honeybadger/init/ruby.rb +4 -4
- data/lib/honeybadger/init/sinatra.rb +11 -12
- data/lib/honeybadger/instrumentation.rb +26 -31
- data/lib/honeybadger/instrumentation_helper.rb +11 -12
- data/lib/honeybadger/karafka.rb +55 -56
- data/lib/honeybadger/logging.rb +22 -21
- data/lib/honeybadger/metric.rb +2 -2
- data/lib/honeybadger/metrics_worker.rb +12 -10
- data/lib/honeybadger/notice.rb +55 -58
- data/lib/honeybadger/notification_subscriber.rb +32 -19
- data/lib/honeybadger/plugin.rb +16 -18
- data/lib/honeybadger/plugins/active_job.rb +11 -9
- data/lib/honeybadger/plugins/autotuner.rb +5 -5
- data/lib/honeybadger/plugins/breadcrumbs.rb +7 -7
- data/lib/honeybadger/plugins/delayed_job/plugin.rb +36 -37
- data/lib/honeybadger/plugins/delayed_job.rb +4 -4
- data/lib/honeybadger/plugins/faktory.rb +10 -10
- data/lib/honeybadger/plugins/karafka.rb +3 -3
- data/lib/honeybadger/plugins/lambda.rb +9 -11
- data/lib/honeybadger/plugins/local_variables.rb +4 -4
- data/lib/honeybadger/plugins/net_http.rb +10 -10
- data/lib/honeybadger/plugins/passenger.rb +4 -4
- data/lib/honeybadger/plugins/rails.rb +13 -9
- data/lib/honeybadger/plugins/resque.rb +7 -7
- data/lib/honeybadger/plugins/shoryuken.rb +6 -6
- data/lib/honeybadger/plugins/sidekiq.rb +74 -60
- data/lib/honeybadger/plugins/solid_queue.rb +3 -3
- data/lib/honeybadger/plugins/sucker_punch.rb +5 -5
- data/lib/honeybadger/plugins/system.rb +3 -3
- data/lib/honeybadger/plugins/thor.rb +5 -5
- data/lib/honeybadger/plugins/warden.rb +4 -4
- data/lib/honeybadger/rack/error_notifier.rb +14 -14
- data/lib/honeybadger/rack/user_feedback.rb +11 -12
- data/lib/honeybadger/rack/user_informer.rb +6 -6
- data/lib/honeybadger/registry.rb +2 -2
- data/lib/honeybadger/registry_execution.rb +1 -1
- data/lib/honeybadger/ruby.rb +2 -2
- data/lib/honeybadger/singleton.rb +49 -48
- data/lib/honeybadger/tasks.rb +3 -3
- data/lib/honeybadger/timer.rb +1 -1
- data/lib/honeybadger/util/http.rb +27 -27
- data/lib/honeybadger/util/request_hash.rb +11 -11
- data/lib/honeybadger/util/request_payload.rb +2 -2
- data/lib/honeybadger/util/revision.rb +14 -6
- data/lib/honeybadger/util/sanitizer.rb +22 -22
- data/lib/honeybadger/util/stats.rb +6 -3
- data/lib/honeybadger/version.rb +1 -1
- data/lib/honeybadger/worker.rb +31 -29
- data/lib/honeybadger.rb +5 -5
- data/lib/puma/plugin/honeybadger.rb +12 -8
- metadata +3 -3
@@ -1,4 +1,5 @@
|
|
1
|
-
require
|
1
|
+
require "honeybadger/conversions"
|
2
|
+
require "monitor"
|
2
3
|
|
3
4
|
module Honeybadger
|
4
5
|
# @api private
|
@@ -10,7 +11,7 @@ module Honeybadger
|
|
10
11
|
end
|
11
12
|
|
12
13
|
def initialize
|
13
|
-
@
|
14
|
+
@monitor = Monitor.new
|
14
15
|
_initialize
|
15
16
|
end
|
16
17
|
|
@@ -20,10 +21,9 @@ module Honeybadger
|
|
20
21
|
|
21
22
|
# Internal helpers
|
22
23
|
|
23
|
-
|
24
24
|
def set_context(hash, &block)
|
25
25
|
local = block_given?
|
26
|
-
@
|
26
|
+
@monitor.synchronize do
|
27
27
|
@global_context ||= {}
|
28
28
|
@local_context ||= []
|
29
29
|
|
@@ -40,13 +40,13 @@ module Honeybadger
|
|
40
40
|
begin
|
41
41
|
yield
|
42
42
|
ensure
|
43
|
-
@
|
43
|
+
@monitor.synchronize { @local_context&.pop }
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
48
|
def get_context
|
49
|
-
@
|
49
|
+
@monitor.synchronize do
|
50
50
|
return @global_context unless @local_context
|
51
51
|
|
52
52
|
@global_context.merge(@local_context.inject({}, :merge))
|
@@ -54,7 +54,7 @@ module Honeybadger
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def clear_context
|
57
|
-
@
|
57
|
+
@monitor.synchronize do
|
58
58
|
@global_context = nil
|
59
59
|
@local_context = nil
|
60
60
|
end
|
@@ -62,7 +62,7 @@ module Honeybadger
|
|
62
62
|
|
63
63
|
def set_event_context(hash, &block)
|
64
64
|
local = block_given?
|
65
|
-
@
|
65
|
+
@monitor.synchronize do
|
66
66
|
@global_event_context ||= {}
|
67
67
|
@local_event_context ||= []
|
68
68
|
|
@@ -79,13 +79,13 @@ module Honeybadger
|
|
79
79
|
begin
|
80
80
|
yield
|
81
81
|
ensure
|
82
|
-
@
|
82
|
+
@monitor.synchronize { @local_event_context&.pop }
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
87
|
def get_event_context
|
88
|
-
@
|
88
|
+
@monitor.synchronize do
|
89
89
|
return @global_event_context unless @local_event_context
|
90
90
|
|
91
91
|
@global_event_context.merge(@local_event_context.inject({}, :merge))
|
@@ -93,26 +93,26 @@ module Honeybadger
|
|
93
93
|
end
|
94
94
|
|
95
95
|
def clear_event_context
|
96
|
-
@
|
96
|
+
@monitor.synchronize do
|
97
97
|
@global_event_context = nil
|
98
98
|
@local_event_context = nil
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
102
|
def set_rack_env(env)
|
103
|
-
@
|
103
|
+
@monitor.synchronize { @rack_env = env }
|
104
104
|
end
|
105
105
|
|
106
106
|
def get_rack_env
|
107
|
-
@
|
107
|
+
@monitor.synchronize { @rack_env }
|
108
108
|
end
|
109
109
|
|
110
110
|
def set_request_id(request_id)
|
111
|
-
@
|
111
|
+
@monitor.synchronize { @request_id = request_id }
|
112
112
|
end
|
113
113
|
|
114
114
|
def get_request_id
|
115
|
-
@
|
115
|
+
@monitor.synchronize { @request_id }
|
116
116
|
end
|
117
117
|
|
118
118
|
private
|
@@ -120,7 +120,7 @@ module Honeybadger
|
|
120
120
|
attr_accessor :custom, :rack_env, :request_id
|
121
121
|
|
122
122
|
def _initialize
|
123
|
-
@
|
123
|
+
@monitor.synchronize do
|
124
124
|
@global_context = nil
|
125
125
|
@local_context = nil
|
126
126
|
@global_event_context = nil
|
@@ -2,6 +2,7 @@ module Honeybadger
|
|
2
2
|
# @api private
|
3
3
|
module Conversions
|
4
4
|
module_function
|
5
|
+
|
5
6
|
MAX_CONTEXT_DEPTH = 5
|
6
7
|
|
7
8
|
# Convert context into a Hash.
|
@@ -12,13 +13,15 @@ module Honeybadger
|
|
12
13
|
def Context(object, depth = 1)
|
13
14
|
object = object.to_honeybadger_context if object.respond_to?(:to_honeybadger_context)
|
14
15
|
object = Hash(object)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
if depth < MAX_CONTEXT_DEPTH
|
17
|
+
object = object.transform_values do |value|
|
18
|
+
if value&.respond_to?(:to_honeybadger_context)
|
19
|
+
Context(value, depth + 1)
|
20
|
+
else
|
21
|
+
value
|
22
|
+
end
|
20
23
|
end
|
21
|
-
end
|
24
|
+
end
|
22
25
|
object
|
23
26
|
end
|
24
27
|
end
|
data/lib/honeybadger/counter.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
require
|
1
|
+
require "honeybadger/metric"
|
2
2
|
|
3
3
|
module Honeybadger
|
4
4
|
class Counter < Metric
|
5
|
-
def count(by=1)
|
5
|
+
def count(by = 1)
|
6
6
|
return unless by
|
7
7
|
|
8
8
|
@samples += 1
|
9
9
|
|
10
10
|
@counter ||= 0
|
11
|
-
@counter
|
11
|
+
@counter += by
|
12
12
|
end
|
13
13
|
|
14
14
|
def payloads
|
15
|
-
[{
|
15
|
+
[{counter: @counter}]
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/honeybadger/event.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "forwardable"
|
2
2
|
|
3
|
-
require
|
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
|
2
|
-
require
|
1
|
+
require "forwardable"
|
2
|
+
require "net/http"
|
3
3
|
|
4
|
-
require
|
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 {
|
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(
|
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(
|
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
|
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 {
|
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 {
|
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 {
|
182
|
+
d { "stopping worker" }
|
183
183
|
end
|
184
|
-
rescue
|
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(
|
211
|
+
debug { sprintf("Sending %s events", send_queue.length) }
|
212
212
|
send_queue.clear
|
213
213
|
if @dropped_events > 0
|
214
|
-
warn { sprintf(
|
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
|
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(
|
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
|
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 {
|
258
|
-
|
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
|
261
|
+
((BASE_THROTTLE**throttle) - 1).round(3)
|
264
262
|
end
|
265
263
|
|
266
264
|
def inc_throttle
|
@@ -281,32 +279,33 @@ module Honeybadger
|
|
281
279
|
end
|
282
280
|
|
283
281
|
def handle_response(response)
|
284
|
-
d { sprintf(
|
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
|
-
|
287
|
+
debug { sprintf("Insights Event send failed: project is sending too many events. code=%s throttle=%s interval=%s", response.code, throttle, throttle_interval) }
|
288
|
+
suspend(3600)
|
290
289
|
when 402
|
291
|
-
warn { sprintf(
|
290
|
+
warn { sprintf("Insights Event send failed: payment is required. code=%s", response.code) }
|
292
291
|
suspend(3600)
|
293
292
|
when 403
|
294
|
-
warn { sprintf(
|
293
|
+
warn { sprintf("Insights Event send failed: API key is invalid. code=%s", response.code) }
|
295
294
|
suspend(3600)
|
296
295
|
when 413
|
297
|
-
warn { sprintf(
|
296
|
+
warn { sprintf("Insights Event send failed: Payload is too large. code=%s", response.code) }
|
298
297
|
when 201
|
299
|
-
if throttle = dec_throttle
|
300
|
-
debug { sprintf(
|
298
|
+
if (throttle = dec_throttle)
|
299
|
+
debug { sprintf("Success ⚡ Insights Event sent code=%s throttle=%s interval=%s", response.code, throttle, throttle_interval) }
|
301
300
|
else
|
302
|
-
debug { sprintf(
|
301
|
+
debug { sprintf("Success ⚡ Insights Event sent code=%s", response.code) }
|
303
302
|
end
|
304
303
|
when :stubbed
|
305
|
-
info {
|
304
|
+
info { "Success ⚡ Development mode is enabled; This event will be sent after app is deployed." }
|
306
305
|
when :error
|
307
|
-
warn { sprintf(
|
306
|
+
warn { sprintf("Insights Event send failed: an unknown error occurred. code=%s error=%s", response.code, response.message.to_s.dump) }
|
308
307
|
else
|
309
|
-
warn { sprintf(
|
308
|
+
warn { sprintf("Insights Event send failed: unknown response from server. code=%s", response.code) }
|
310
309
|
end
|
311
310
|
end
|
312
311
|
|
@@ -317,8 +316,10 @@ module Honeybadger
|
|
317
316
|
end
|
318
317
|
|
319
318
|
def signal_marker(marker)
|
320
|
-
mutex.
|
319
|
+
if mutex.owned?
|
321
320
|
marker.signal
|
321
|
+
else
|
322
|
+
mutex.synchronize { marker.signal }
|
322
323
|
end
|
323
324
|
end
|
324
325
|
end
|
data/lib/honeybadger/gauge.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
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
|
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
|
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
|
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
|
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
|
1
|
+
require "honeybadger/ruby"
|
2
2
|
|
3
3
|
Honeybadger.init!({
|
4
|
-
:
|
5
|
-
:
|
6
|
-
|
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 >=
|
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
|
2
|
-
require
|
1
|
+
require "rails"
|
2
|
+
require "yaml"
|
3
3
|
|
4
|
-
require
|
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
|
11
|
+
load "honeybadger/tasks.rb"
|
12
12
|
end
|
13
13
|
|
14
|
-
initializer
|
14
|
+
initializer "honeybadger.install_middleware" do |app|
|
15
15
|
honeybadger_config = Honeybadger::Agent.instance.config
|
16
16
|
|
17
|
-
if honeybadger_config[:
|
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[:
|
20
|
-
app.config.middleware.insert_before(Honeybadger::Rack::ErrorNotifier, Honeybadger::Rack::UserFeedback) if honeybadger_config[:
|
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
|
-
:
|
27
|
-
:
|
28
|
-
|
29
|
-
:
|
30
|
-
:
|
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[:
|
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
|
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 >=
|
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
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
-
|
50
|
-
|
47
|
+
warn "#{name} aborted!"
|
48
|
+
warn ex.message
|
51
49
|
if options.trace
|
52
|
-
|
50
|
+
warn ex.backtrace.join("\n")
|
53
51
|
else
|
54
|
-
|
55
|
-
|
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
|
1
|
+
require "honeybadger/ruby"
|
2
2
|
|
3
3
|
Honeybadger.init!({
|
4
|
-
:
|
5
|
-
:
|
6
|
-
|
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
|
2
|
-
require
|
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
|
-
|
19
|
-
|
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[:
|
31
|
-
if config[:
|
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[:
|
35
|
-
install_honeybadger_middleware(Honeybadger::Rack::UserInformer) if config[:
|
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[
|
51
|
+
env: ENV["APP_ENV"] || ENV["RACK_ENV"],
|
53
52
|
framework: :sinatra,
|
54
|
-
|
53
|
+
"logging.path": "STDOUT"
|
55
54
|
})
|
56
55
|
|
57
56
|
Honeybadger.load_plugins!
|