rollbar 2.25.1 → 2.26.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rollbar/capistrano.rb +1 -1
- data/lib/rollbar/capistrano_tasks.rb +10 -1
- data/lib/rollbar/item.rb +9 -2
- data/lib/rollbar/item/backtrace.rb +1 -1
- data/lib/rollbar/middleware/js.rb +5 -2
- data/lib/rollbar/notifier.rb +79 -19
- data/lib/rollbar/rake_tasks.rb +1 -1
- data/lib/rollbar/request_data_extractor.rb +1 -0
- data/lib/rollbar/rollbar_test.rb +6 -117
- data/lib/rollbar/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd45e6b870eee21793378f297cf881406be39872d66be7cf69327aa7bc06a027
|
4
|
+
data.tar.gz: d575825e0dc9715370e04b4a667d94eec34a089dedbbd4c0ef92df991ac9ecbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51ebdecd60cef3c8cb540ed24179b00840f296a137fad69f68c19b7ddff65e987129b4e7ef6fa138bd5e6b5e823f4a9e9a3aef471524797efe8a6ff9b41efd34
|
7
|
+
data.tar.gz: 17de152e3dadb969fae494fae14d00903bc7e31781d1d0bbe3d6410b8623e96b7f58b52b9cb9bcab03d517ad894acd1d908a23ffe722b4bd748f93450a7b0abf
|
data/lib/rollbar/capistrano.rb
CHANGED
@@ -35,7 +35,7 @@ module Rollbar
|
|
35
35
|
_cset(:rollbar_user) { ENV['USER'] || ENV['USERNAME'] }
|
36
36
|
_cset(:rollbar_env) { fetch(:rails_env, 'production') }
|
37
37
|
_cset(:rollbar_token) { abort("Please specify the Rollbar access token, set :rollbar_token, 'your token'") }
|
38
|
-
_cset(:rollbar_revision) {
|
38
|
+
_cset(:rollbar_revision) { real_revision }
|
39
39
|
_cset(:rollbar_comment) { nil }
|
40
40
|
end
|
41
41
|
end
|
@@ -40,6 +40,9 @@ module Rollbar
|
|
40
40
|
capistrano_300_warning(logger)
|
41
41
|
logger.info opts[:desc] if opts[:desc]
|
42
42
|
yield
|
43
|
+
|
44
|
+
rescue StandardError => e
|
45
|
+
logger.error "Error reporting to Rollbar: #{e.inspect}"
|
43
46
|
end
|
44
47
|
|
45
48
|
def deploy_update(capistrano, logger, dry_run, opts = {})
|
@@ -61,7 +64,11 @@ module Rollbar
|
|
61
64
|
end
|
62
65
|
|
63
66
|
def capistrano_300_warning(logger)
|
64
|
-
|
67
|
+
return unless ::Capistrano.const_defined?('VERSION') && ::Capistrano::VERSION =~ /^3\.0/
|
68
|
+
|
69
|
+
logger.warn('You need to upgrade capistrano to >= 3.1 version in order'\
|
70
|
+
'to correctly report deploys to Rollbar. (On 3.0, the reported revision'\
|
71
|
+
'will be incorrect.)')
|
65
72
|
end
|
66
73
|
|
67
74
|
def report_deploy_started(capistrano, dry_run)
|
@@ -83,6 +90,7 @@ module Rollbar
|
|
83
90
|
def report_deploy_succeeded(capistrano, dry_run)
|
84
91
|
::Rollbar::Deploy.update(
|
85
92
|
{
|
93
|
+
:comment => capistrano.fetch(:rollbar_comment),
|
86
94
|
:proxy => :ENV,
|
87
95
|
:dry_run => dry_run
|
88
96
|
},
|
@@ -95,6 +103,7 @@ module Rollbar
|
|
95
103
|
def report_deploy_failed(capistrano, dry_run)
|
96
104
|
::Rollbar::Deploy.update(
|
97
105
|
{
|
106
|
+
:comment => capistrano.fetch(:rollbar_comment),
|
98
107
|
:proxy => :ENV,
|
99
108
|
:dry_run => dry_run
|
100
109
|
},
|
data/lib/rollbar/item.rb
CHANGED
@@ -136,11 +136,18 @@ module Rollbar
|
|
136
136
|
uuid = stringified_payload['data']['uuid']
|
137
137
|
host = stringified_payload['data'].fetch('server', {})['host']
|
138
138
|
|
139
|
+
original_error = {
|
140
|
+
:message => message,
|
141
|
+
:exception => exception,
|
142
|
+
:configuration => configuration,
|
143
|
+
:uuid => uuid,
|
144
|
+
:host => host
|
145
|
+
}
|
146
|
+
|
139
147
|
notifier.send_failsafe(
|
140
148
|
too_large_payload_string(attempts),
|
141
149
|
nil,
|
142
|
-
|
143
|
-
host
|
150
|
+
original_error
|
144
151
|
)
|
145
152
|
logger.error("[Rollbar] Payload too large to be sent for UUID #{uuid}: #{Rollbar::JSON.dump(payload)}")
|
146
153
|
end
|
@@ -55,7 +55,7 @@ module Rollbar
|
|
55
55
|
current_exception = exception
|
56
56
|
|
57
57
|
while current_exception.respond_to?(:cause) && (cause = current_exception.cause) && cause.is_a?(Exception) && !visited.include?(cause)
|
58
|
-
traces
|
58
|
+
traces << trace_data(cause)
|
59
59
|
visited << cause
|
60
60
|
current_exception = cause
|
61
61
|
end
|
@@ -80,8 +80,11 @@ module Rollbar
|
|
80
80
|
return app_result unless response_string
|
81
81
|
|
82
82
|
env[JS_IS_INJECTED_KEY] = true
|
83
|
-
|
84
|
-
|
83
|
+
|
84
|
+
status, headers, = app_result
|
85
|
+
headers['Content-Length'] = response_string.bytesize.to_s if headers.key?('Content-Length')
|
86
|
+
|
87
|
+
response = ::Rack::Response.new(response_string, status, headers)
|
85
88
|
|
86
89
|
finished = response.finish
|
87
90
|
|
data/lib/rollbar/notifier.rb
CHANGED
@@ -21,6 +21,7 @@ module Rollbar
|
|
21
21
|
|
22
22
|
MUTEX = Mutex.new
|
23
23
|
EXTENSION_REGEXP = /.rollbar\z/.freeze
|
24
|
+
FAILSAFE_STRING_LENGTH = 10_000
|
24
25
|
|
25
26
|
def initialize(parent_notifier = nil, payload_options = nil, scope = nil)
|
26
27
|
if parent_notifier
|
@@ -158,7 +159,13 @@ module Rollbar
|
|
158
159
|
def report_with_rescue(level, message, exception, extra, context)
|
159
160
|
report(level, message, exception, extra, context)
|
160
161
|
rescue StandardError, SystemStackError => e
|
161
|
-
|
162
|
+
original_error = {
|
163
|
+
:message => message,
|
164
|
+
:exception => exception,
|
165
|
+
:configuration => configuration
|
166
|
+
}
|
167
|
+
|
168
|
+
report_internal_error(e, original_error)
|
162
169
|
|
163
170
|
'error'
|
164
171
|
end
|
@@ -262,32 +269,32 @@ module Rollbar
|
|
262
269
|
end
|
263
270
|
end
|
264
271
|
|
265
|
-
def
|
266
|
-
|
267
|
-
|
268
|
-
log_error "[Rollbar] Sending failsafe response due to #{exception_reason}"
|
269
|
-
|
270
|
-
body = failsafe_body(exception_reason)
|
271
|
-
|
272
|
-
failsafe_data = {
|
272
|
+
def failsafe_initial_data(exception_reason)
|
273
|
+
{
|
273
274
|
:level => 'error',
|
274
275
|
:environment => configuration.environment.to_s,
|
275
276
|
:body => {
|
276
277
|
:message => {
|
277
|
-
:body =>
|
278
|
+
:body => failsafe_body(exception_reason)
|
278
279
|
}
|
279
280
|
},
|
280
281
|
:notifier => {
|
281
282
|
:name => 'rollbar-gem',
|
282
283
|
:version => VERSION
|
283
284
|
},
|
284
|
-
:custom => {
|
285
|
-
:orig_uuid => uuid,
|
286
|
-
:orig_host => host
|
287
|
-
},
|
288
285
|
:internal => true,
|
289
286
|
'failsafe' => true
|
290
287
|
}
|
288
|
+
end
|
289
|
+
|
290
|
+
def send_failsafe(message, exception, original_error = nil)
|
291
|
+
exception_reason = failsafe_reason(message, exception)
|
292
|
+
|
293
|
+
log_error "[Rollbar] Sending failsafe response due to #{exception_reason}"
|
294
|
+
|
295
|
+
failsafe_data = failsafe_initial_data(exception_reason)
|
296
|
+
|
297
|
+
failsafe_add_original_error_data(failsafe_data[:notifier], original_error)
|
291
298
|
|
292
299
|
failsafe_payload = {
|
293
300
|
'data' => failsafe_data
|
@@ -298,7 +305,9 @@ module Rollbar
|
|
298
305
|
:notifier => self,
|
299
306
|
:configuration => configuration,
|
300
307
|
:logger => logger)
|
301
|
-
|
308
|
+
|
309
|
+
process_item(item)
|
310
|
+
log_and_return_item_data(item)
|
302
311
|
rescue StandardError => e
|
303
312
|
log_error "[Rollbar] Error sending failsafe : #{e}"
|
304
313
|
end
|
@@ -306,6 +315,57 @@ module Rollbar
|
|
306
315
|
failsafe_payload
|
307
316
|
end
|
308
317
|
|
318
|
+
def failsafe_add_original_error_data(payload_notifier, original_error)
|
319
|
+
return unless original_error
|
320
|
+
|
321
|
+
payload_notifier[:diagnostic] ||= {}
|
322
|
+
|
323
|
+
add_original_host(payload_notifier[:diagnostic], original_error)
|
324
|
+
add_original_uuid(payload_notifier[:diagnostic], original_error)
|
325
|
+
add_original_message(payload_notifier[:diagnostic], original_error)
|
326
|
+
add_original_error(payload_notifier[:diagnostic], original_error)
|
327
|
+
add_configured_options(payload_notifier, original_error)
|
328
|
+
end
|
329
|
+
|
330
|
+
def add_original_message(diagnostic, original_error)
|
331
|
+
diagnostic[:original_message] = original_error[:message].truncate(FAILSAFE_STRING_LENGTH) if original_error[:message]
|
332
|
+
|
333
|
+
rescue StandardError => e
|
334
|
+
diagnostic[:original_message] = "Failed: #{e.message}"
|
335
|
+
end
|
336
|
+
|
337
|
+
def add_original_error(diagnostic, original_error)
|
338
|
+
if original_error[:exception]
|
339
|
+
backtrace = original_error[:exception].backtrace
|
340
|
+
message = original_error[:exception].message
|
341
|
+
diagnostic[:original_error] = {
|
342
|
+
:message => message && message.truncate(FAILSAFE_STRING_LENGTH),
|
343
|
+
:stack => backtrace && backtrace.join(', ').truncate(FAILSAFE_STRING_LENGTH)
|
344
|
+
}
|
345
|
+
end
|
346
|
+
|
347
|
+
rescue StandardError => e
|
348
|
+
diagnostic[:original_error] = "Failed: #{e.message}"
|
349
|
+
end
|
350
|
+
|
351
|
+
def add_configured_options(payload_notifier, original_error)
|
352
|
+
if original_error[:configuration]
|
353
|
+
configured = original_error[:configuration].configured_options.configured
|
354
|
+
payload_notifier[:configured_options] = ::JSON.generate(configured).truncate(FAILSAFE_STRING_LENGTH)
|
355
|
+
end
|
356
|
+
|
357
|
+
rescue StandardError => e
|
358
|
+
payload_notifier[:configured_options] = "Failed: #{e.message}"
|
359
|
+
end
|
360
|
+
|
361
|
+
def add_original_host(diagnostic, original_error)
|
362
|
+
diagnostic[:original_host] = original_error[:host] if original_error[:host]
|
363
|
+
end
|
364
|
+
|
365
|
+
def add_original_uuid(diagnostic, original_error)
|
366
|
+
diagnostic[:original_uuid] = original_error[:uuid] if original_error[:uuid]
|
367
|
+
end
|
368
|
+
|
309
369
|
## Logging
|
310
370
|
%w[debug info warn error].each do |level|
|
311
371
|
define_method(:"log_#{level}") do |message|
|
@@ -461,7 +521,7 @@ module Rollbar
|
|
461
521
|
# Reports an internal error in the Rollbar library. This will be reported within the configured
|
462
522
|
# Rollbar project. We'll first attempt to provide a report including the exception traceback.
|
463
523
|
# If that fails, we'll fall back to a more static failsafe response.
|
464
|
-
def report_internal_error(exception)
|
524
|
+
def report_internal_error(exception, original_error = nil)
|
465
525
|
log_error '[Rollbar] Reporting internal error encountered while sending data to Rollbar.'
|
466
526
|
|
467
527
|
configuration.execute_hook(:on_report_internal_error, exception)
|
@@ -469,7 +529,7 @@ module Rollbar
|
|
469
529
|
begin
|
470
530
|
item = build_item('error', nil, exception, { :internal => true }, nil)
|
471
531
|
rescue StandardError => e
|
472
|
-
send_failsafe('build_item in exception_data', e)
|
532
|
+
send_failsafe('build_item in exception_data', e, original_error)
|
473
533
|
log_error "[Rollbar] Exception: #{exception}"
|
474
534
|
return
|
475
535
|
end
|
@@ -477,7 +537,7 @@ module Rollbar
|
|
477
537
|
begin
|
478
538
|
process_item(item)
|
479
539
|
rescue StandardError => e
|
480
|
-
send_failsafe('error in process_item', e)
|
540
|
+
send_failsafe('error in process_item', e, original_error)
|
481
541
|
log_error "[Rollbar] Item: #{item}"
|
482
542
|
return
|
483
543
|
end
|
@@ -485,7 +545,7 @@ module Rollbar
|
|
485
545
|
begin
|
486
546
|
log_instance_link(item['data'])
|
487
547
|
rescue StandardError => e
|
488
|
-
send_failsafe('error logging instance link', e)
|
548
|
+
send_failsafe('error logging instance link', e, original_error)
|
489
549
|
log_error "[Rollbar] Item: #{item}"
|
490
550
|
return
|
491
551
|
end
|
data/lib/rollbar/rake_tasks.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
namespace :rollbar do
|
3
|
-
desc 'Verify your gem installation by sending a test
|
3
|
+
desc 'Verify your gem installation by sending a test message to Rollbar'
|
4
4
|
task :test => [:environment] do
|
5
5
|
rollbar_dir = Gem.loaded_specs['rollbar'].full_gem_path
|
6
6
|
require "#{rollbar_dir}/lib/rollbar/rollbar_test"
|
@@ -131,6 +131,7 @@ module Rollbar
|
|
131
131
|
host = host.split(',').first.strip unless host.empty?
|
132
132
|
|
133
133
|
path = env['ORIGINAL_FULLPATH'] || env['REQUEST_URI']
|
134
|
+
path ||= "#{env['SCRIPT_NAME']}#{env['PATH_INFO']}#{"?#{env['QUERY_STRING']}" unless env['QUERY_STRING'].to_s.empty?}"
|
134
135
|
unless path.nil? || path.empty?
|
135
136
|
path = '/' + path.to_s if path.to_s.slice(0, 1) != '/'
|
136
137
|
end
|
data/lib/rollbar/rollbar_test.rb
CHANGED
@@ -1,48 +1,16 @@
|
|
1
1
|
require 'rollbar'
|
2
|
-
begin
|
3
|
-
require 'rack/mock'
|
4
|
-
rescue LoadError
|
5
|
-
puts 'Cannot load rack/mock'
|
6
|
-
end
|
7
|
-
require 'logger'
|
8
2
|
|
9
|
-
# Module to inject into the Rails controllers or rack apps
|
10
3
|
module RollbarTest # :nodoc:
|
11
|
-
def test_rollbar
|
12
|
-
puts 'Raising RollbarTestingException to simulate app failure.'
|
13
|
-
|
14
|
-
raise RollbarTestingException.new, ::RollbarTest.success_message
|
15
|
-
end
|
16
|
-
|
17
4
|
def self.run
|
18
5
|
return unless confirmed_token?
|
19
6
|
|
20
|
-
|
21
|
-
|
22
|
-
puts 'Testing manual report...'
|
23
|
-
Rollbar.error('Test error from rollbar:test')
|
24
|
-
|
25
|
-
return unless defined?(Rack::MockRequest)
|
26
|
-
|
27
|
-
protocol, app = setup_app
|
28
|
-
|
29
|
-
puts 'Processing...'
|
30
|
-
env = Rack::MockRequest.env_for("#{protocol}://www.example.com/verify", 'REMOTE_ADDR' => '127.0.0.1')
|
31
|
-
status, = app.call(env)
|
32
|
-
|
33
|
-
puts error_message unless status.to_i == 500
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.configure_rails
|
37
|
-
Rails.logger = if defined?(ActiveSupport::TaggedLogging)
|
38
|
-
ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
|
39
|
-
else
|
40
|
-
Logger.new(STDOUT)
|
41
|
-
end
|
7
|
+
puts 'Test sending to Rollbar...'
|
8
|
+
result = Rollbar.info('Test message from rollbar:test')
|
42
9
|
|
43
|
-
|
44
|
-
|
45
|
-
|
10
|
+
if result == 'error'
|
11
|
+
puts error_message
|
12
|
+
else
|
13
|
+
puts success_message
|
46
14
|
end
|
47
15
|
end
|
48
16
|
|
@@ -54,69 +22,6 @@ module RollbarTest # :nodoc:
|
|
54
22
|
false
|
55
23
|
end
|
56
24
|
|
57
|
-
def self.authlogic_config
|
58
|
-
# from http://stackoverflow.com/questions/5270835/authlogic-activation-problems
|
59
|
-
return unless defined?(Authlogic)
|
60
|
-
|
61
|
-
Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
|
62
|
-
end
|
63
|
-
|
64
|
-
def self.setup_app
|
65
|
-
puts 'Setting up the test app.'
|
66
|
-
|
67
|
-
if defined?(Rails)
|
68
|
-
app = rails_app
|
69
|
-
|
70
|
-
draw_rails_route(app)
|
71
|
-
|
72
|
-
authlogic_config
|
73
|
-
|
74
|
-
[rails_protocol(app), app]
|
75
|
-
else
|
76
|
-
['http', rack_app]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def self.rails_app
|
81
|
-
# The setup below is needed for Rails 5.x, but not for Rails 4.x and below.
|
82
|
-
# (And fails on Rails 4.x in various ways depending on the exact version.)
|
83
|
-
return Rails.application if Rails.version < '5.0.0'
|
84
|
-
|
85
|
-
# Spring now runs by default in development on all new Rails installs. This causes
|
86
|
-
# the new `/verify` route to not get picked up if `config.cache_classes == false`
|
87
|
-
# which is also a default in development env.
|
88
|
-
#
|
89
|
-
# `config.cache_classes` needs to be set, but the only possible time is at app load,
|
90
|
-
# so here we clone the default app with an updated config.
|
91
|
-
#
|
92
|
-
config = Rails.application.config
|
93
|
-
config.cache_classes = true
|
94
|
-
|
95
|
-
# Make a copy of the app, so the config can be updated.
|
96
|
-
Rails.application.class.name.constantize.new(:config => config)
|
97
|
-
end
|
98
|
-
|
99
|
-
def self.draw_rails_route(app)
|
100
|
-
app.routes_reloader.execute_if_updated
|
101
|
-
app.routes.draw do
|
102
|
-
get 'verify' => 'rollbar_test#verify', :as => 'verify'
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def self.rails_protocol(app)
|
107
|
-
defined?(app.config.force_ssl && app.config.force_ssl) ? 'https' : 'http'
|
108
|
-
end
|
109
|
-
|
110
|
-
def self.rack_app
|
111
|
-
Class.new do
|
112
|
-
include RollbarTest
|
113
|
-
|
114
|
-
def self.call(_env)
|
115
|
-
new.test_rollbar
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
25
|
def self.token_error_message
|
121
26
|
'Rollbar needs an access token configured. Check the README for instructions.'
|
122
27
|
end
|
@@ -129,19 +34,3 @@ module RollbarTest # :nodoc:
|
|
129
34
|
'Testing rollbar with "rake rollbar:test". If you can see this, it works.'
|
130
35
|
end
|
131
36
|
end
|
132
|
-
|
133
|
-
class RollbarTestingException < RuntimeError; end
|
134
|
-
|
135
|
-
if defined?(Rails)
|
136
|
-
class RollbarTestController < ActionController::Base # :nodoc:
|
137
|
-
include RollbarTest
|
138
|
-
|
139
|
-
def verify
|
140
|
-
test_rollbar
|
141
|
-
end
|
142
|
-
|
143
|
-
def logger
|
144
|
-
nil
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|
data/lib/rollbar/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rollbar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.26.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rollbar, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Easy and powerful exception tracking for Ruby
|
14
14
|
email:
|