rollbar 2.16.2 → 2.22.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +47 -0
- data/.travis.yml +182 -94
- data/Appraisals +10 -10
- data/Gemfile +45 -13
- data/README.md +20 -3
- data/Rakefile +0 -0
- data/data/rollbar.snippet.js +1 -1
- data/docs/configuration.md +15 -0
- data/gemfiles/rails30.gemfile +21 -14
- data/gemfiles/rails31.gemfile +21 -12
- data/gemfiles/rails32.gemfile +18 -8
- data/gemfiles/rails40.gemfile +18 -6
- data/gemfiles/rails41.gemfile +17 -6
- data/gemfiles/rails42.gemfile +24 -14
- data/gemfiles/rails50.gemfile +20 -11
- data/gemfiles/rails51.gemfile +20 -10
- data/gemfiles/rails52.gemfile +65 -0
- data/gemfiles/rails60.gemfile +67 -0
- data/lib/generators/rollbar/rollbar_generator.rb +1 -1
- data/lib/rails/rollbar_runner.rb +17 -2
- data/lib/rollbar.rb +2 -3
- data/lib/rollbar/capistrano.rb +71 -39
- data/lib/rollbar/capistrano3.rb +56 -1
- data/lib/rollbar/capistrano_tasks.rb +130 -0
- data/lib/rollbar/configuration.rb +95 -7
- data/lib/rollbar/delay/active_job.rb +17 -0
- data/lib/rollbar/delay/girl_friday.rb +2 -2
- data/lib/rollbar/delay/resque.rb +4 -6
- data/lib/rollbar/delay/shoryuken.rb +15 -9
- data/lib/rollbar/delay/sidekiq.rb +6 -8
- data/lib/rollbar/delay/sucker_punch.rb +17 -19
- data/lib/rollbar/delay/thread.rb +3 -3
- data/lib/rollbar/deploy.rb +90 -0
- data/lib/rollbar/encoding/encoder.rb +9 -9
- data/lib/rollbar/exception_reporter.rb +19 -5
- data/lib/rollbar/item.rb +62 -20
- data/lib/rollbar/item/backtrace.rb +4 -4
- data/lib/rollbar/item/frame.rb +7 -1
- data/lib/rollbar/item/locals.rb +56 -0
- data/lib/rollbar/json.rb +5 -51
- data/lib/rollbar/language_support.rb +4 -20
- data/lib/rollbar/lazy_store.rb +5 -5
- data/lib/rollbar/logger.rb +1 -0
- data/lib/rollbar/logger_proxy.rb +15 -2
- data/lib/rollbar/middleware/js.rb +110 -10
- data/lib/rollbar/middleware/js/json_value.rb +26 -0
- data/lib/rollbar/middleware/rack.rb +4 -1
- data/lib/rollbar/middleware/rails/rollbar.rb +10 -1
- data/lib/rollbar/notifier.rb +118 -49
- data/lib/rollbar/notifier/trace_with_bindings.rb +65 -0
- data/lib/rollbar/plugin.rb +54 -6
- data/lib/rollbar/plugins.rb +7 -1
- data/lib/rollbar/plugins/active_job.rb +5 -1
- data/lib/rollbar/plugins/basic_socket.rb +21 -6
- data/lib/rollbar/plugins/delayed_job/job_data.rb +3 -3
- data/lib/rollbar/plugins/delayed_job/plugin.rb +3 -3
- data/lib/rollbar/plugins/goalie.rb +11 -3
- data/lib/rollbar/plugins/rails/controller_methods.rb +17 -4
- data/lib/rollbar/plugins/rails/railtie_mixin.rb +7 -3
- data/lib/rollbar/plugins/rake.rb +2 -2
- data/lib/rollbar/plugins/sidekiq/plugin.rb +10 -6
- data/lib/rollbar/rake_tasks.rb +3 -86
- data/lib/rollbar/request_data_extractor.rb +35 -21
- data/lib/rollbar/rollbar_test.rb +147 -0
- data/lib/rollbar/scrubbers.rb +7 -3
- data/lib/rollbar/scrubbers/params.rb +38 -20
- data/lib/rollbar/scrubbers/url.rb +27 -13
- data/lib/rollbar/truncation.rb +9 -2
- data/lib/rollbar/truncation/min_body_strategy.rb +2 -3
- data/lib/rollbar/truncation/remove_any_key_strategy.rb +123 -0
- data/lib/rollbar/truncation/remove_extra_strategy.rb +35 -0
- data/lib/rollbar/truncation/remove_request_strategy.rb +21 -0
- data/lib/rollbar/truncation/strings_strategy.rb +3 -4
- data/lib/rollbar/util.rb +75 -45
- data/lib/rollbar/util/hash.rb +30 -6
- data/lib/rollbar/util/ip_anonymizer.rb +8 -7
- data/lib/rollbar/util/ip_obfuscator.rb +1 -1
- data/lib/rollbar/version.rb +1 -1
- data/lib/tasks/benchmark.rake +103 -0
- data/rollbar.gemspec +14 -8
- metadata +25 -277
- data/gemfiles/ruby_1_8_and_1_9_2.gemfile +0 -49
- data/lib/rollbar/json/default.rb +0 -11
- data/lib/rollbar/json/oj.rb +0 -16
- data/lib/rollbar/tasks/rollbar.cap +0 -47
- data/spec/cacert.pem +0 -3988
- data/spec/controllers/home_controller_spec.rb +0 -480
- data/spec/delay/sidekiq_spec.rb +0 -61
- data/spec/delay/sucker_punch_spec.rb +0 -25
- data/spec/delayed/backend/test.rb +0 -140
- data/spec/delayed/serialization/test.rb +0 -0
- data/spec/dummyapp/.gitignore +0 -73
- data/spec/dummyapp/Rakefile +0 -7
- data/spec/dummyapp/app/assets/javascripts/application.js +0 -3
- data/spec/dummyapp/app/assets/stylesheets/application.css.scss +0 -37
- data/spec/dummyapp/app/controllers/application_controller.rb +0 -3
- data/spec/dummyapp/app/controllers/home_controller.rb +0 -60
- data/spec/dummyapp/app/controllers/users_controller.rb +0 -17
- data/spec/dummyapp/app/helpers/.gitkeep +0 -0
- data/spec/dummyapp/app/mailers/.gitkeep +0 -0
- data/spec/dummyapp/app/models/.gitkeep +0 -0
- data/spec/dummyapp/app/models/book.rb +0 -5
- data/spec/dummyapp/app/models/post.rb +0 -9
- data/spec/dummyapp/app/models/user.rb +0 -9
- data/spec/dummyapp/app/views/devise/registrations/edit.html.erb +0 -27
- data/spec/dummyapp/app/views/devise/registrations/new.html.erb +0 -20
- data/spec/dummyapp/app/views/devise/shared/_links.html.erb +0 -25
- data/spec/dummyapp/app/views/home/cause_exception.html.erb +0 -1
- data/spec/dummyapp/app/views/home/index.html.erb +0 -4
- data/spec/dummyapp/app/views/home/report_exception.html.erb +0 -1
- data/spec/dummyapp/app/views/js/test.html.erb +0 -1
- data/spec/dummyapp/app/views/layouts/_messages.html.erb +0 -5
- data/spec/dummyapp/app/views/layouts/_navigation.html.erb +0 -21
- data/spec/dummyapp/app/views/layouts/application.html.erb +0 -25
- data/spec/dummyapp/app/views/layouts/simple.html.erb +0 -18
- data/spec/dummyapp/app/views/users/index.html.erb +0 -8
- data/spec/dummyapp/app/views/users/show.html.erb +0 -3
- data/spec/dummyapp/config.ru +0 -4
- data/spec/dummyapp/config/application.rb +0 -59
- data/spec/dummyapp/config/boot.rb +0 -10
- data/spec/dummyapp/config/database.yml +0 -25
- data/spec/dummyapp/config/environment.rb +0 -5
- data/spec/dummyapp/config/environments/development.rb +0 -37
- data/spec/dummyapp/config/environments/production.rb +0 -67
- data/spec/dummyapp/config/environments/test.rb +0 -37
- data/spec/dummyapp/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/dummyapp/config/initializers/inflections.rb +0 -15
- data/spec/dummyapp/config/initializers/mime_types.rb +0 -5
- data/spec/dummyapp/config/initializers/rollbar.rb +0 -26
- data/spec/dummyapp/config/initializers/secret_token.rb +0 -7
- data/spec/dummyapp/config/initializers/session_store.rb +0 -8
- data/spec/dummyapp/config/initializers/wrap_parameters.rb +0 -16
- data/spec/dummyapp/config/locales/devise.en.yml +0 -58
- data/spec/dummyapp/config/locales/en.yml +0 -5
- data/spec/dummyapp/config/routes.rb +0 -17
- data/spec/dummyapp/config/secrets.yml +0 -2
- data/spec/dummyapp/db/migrate/20121121184652_devise_create_users.rb +0 -46
- data/spec/dummyapp/db/migrate/20121121184654_add_name_to_users.rb +0 -5
- data/spec/dummyapp/db/migrate/20161219184410_create_books.rb +0 -10
- data/spec/dummyapp/db/migrate/20161219185529_add_username_to_users.rb +0 -5
- data/spec/dummyapp/db/schema.rb +0 -41
- data/spec/dummyapp/db/seeds.rb +0 -12
- data/spec/dummyapp/lib/assets/.gitkeep +0 -0
- data/spec/dummyapp/public/404.html +0 -26
- data/spec/dummyapp/public/422.html +0 -26
- data/spec/dummyapp/public/500.html +0 -25
- data/spec/dummyapp/public/favicon.ico +0 -0
- data/spec/dummyapp/script/rails +0 -6
- data/spec/fixtures/file1 +0 -1
- data/spec/fixtures/file2 +0 -1
- data/spec/fixtures/payloads/message.json +0 -25
- data/spec/fixtures/payloads/sample.trace.json +0 -275
- data/spec/fixtures/payloads/sample.trace_chain.json +0 -530
- data/spec/fixtures/plugins/dummy1.rb +0 -5
- data/spec/fixtures/plugins/dummy2.rb +0 -5
- data/spec/generators/rollbar/rollbar_generator_rails30_spec.rb +0 -31
- data/spec/generators/rollbar/rollbar_generator_spec.rb +0 -51
- data/spec/requests/home_spec.rb +0 -49
- data/spec/rollbar/configuration_spec.rb +0 -46
- data/spec/rollbar/delay/delayed_job_spec.rb +0 -22
- data/spec/rollbar/delay/girl_friday_spec.rb +0 -41
- data/spec/rollbar/delay/resque_spec.rb +0 -37
- data/spec/rollbar/delay/thread_spec.rb +0 -27
- data/spec/rollbar/encoding/encoder_spec.rb +0 -63
- data/spec/rollbar/item/backtrace_spec.rb +0 -26
- data/spec/rollbar/item/frame_spec.rb +0 -267
- data/spec/rollbar/item_spec.rb +0 -736
- data/spec/rollbar/json/oj_spec.rb +0 -18
- data/spec/rollbar/json_spec.rb +0 -110
- data/spec/rollbar/lazy_store_spec.rb +0 -99
- data/spec/rollbar/logger_proxy_spec.rb +0 -50
- data/spec/rollbar/logger_spec.rb +0 -124
- data/spec/rollbar/middleware/js_spec.rb +0 -421
- data/spec/rollbar/middleware/sinatra_spec.rb +0 -197
- data/spec/rollbar/notifier_spec.rb +0 -56
- data/spec/rollbar/plugin_spec.rb +0 -209
- data/spec/rollbar/plugins/active_job_spec.rb +0 -38
- data/spec/rollbar/plugins/delayed_job/job_data_spec.rb +0 -48
- data/spec/rollbar/plugins/delayed_job_spec.rb +0 -129
- data/spec/rollbar/plugins/rack_spec.rb +0 -152
- data/spec/rollbar/plugins/rails_js_spec.rb +0 -19
- data/spec/rollbar/plugins/rake_spec.rb +0 -34
- data/spec/rollbar/plugins/resque/failure_spec.rb +0 -36
- data/spec/rollbar/plugins/sidekiq_spec.rb +0 -171
- data/spec/rollbar/plugins/validations_spec.rb +0 -56
- data/spec/rollbar/plugins_spec.rb +0 -68
- data/spec/rollbar/request_data_extractor_spec.rb +0 -270
- data/spec/rollbar/scrubbers/params_spec.rb +0 -314
- data/spec/rollbar/scrubbers/url_spec.rb +0 -136
- data/spec/rollbar/scrubbers_spec.rb +0 -31
- data/spec/rollbar/sidekig/clear_scope_spec.rb +0 -19
- data/spec/rollbar/truncation/frames_strategy_spec.rb +0 -70
- data/spec/rollbar/truncation/min_body_strategy_spec.rb +0 -57
- data/spec/rollbar/truncation/strings_strategy_spec.rb +0 -89
- data/spec/rollbar/truncation_spec.rb +0 -27
- data/spec/rollbar/util/hash_spec.rb +0 -22
- data/spec/rollbar/util/ip_anonymizer_spec.rb +0 -30
- data/spec/rollbar/util_spec.rb +0 -80
- data/spec/rollbar_bc_spec.rb +0 -380
- data/spec/rollbar_spec.rb +0 -1667
- data/spec/spec_helper.rb +0 -84
- data/spec/support/cause_exception.rb +0 -1
- data/spec/support/encoding_helpers.rb +0 -8
- data/spec/support/encodings/iso_8859_9 +0 -1
- data/spec/support/fixture_helpers.rb +0 -10
- data/spec/support/get_ip_raising.rb +0 -7
- data/spec/support/helpers.rb +0 -5
- data/spec/support/matchers.rb +0 -23
- data/spec/support/notifier_helpers.rb +0 -57
- data/spec/support/rollbar_api.rb +0 -57
- data/spec/support/shared_contexts.rb +0 -12
data/lib/rollbar/capistrano3.rb
CHANGED
@@ -1 +1,56 @@
|
|
1
|
-
|
1
|
+
# This is a tasks file to use with Capistrano 3
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'rubygems'
|
5
|
+
require 'json'
|
6
|
+
require 'rollbar/deploy'
|
7
|
+
require 'rollbar/capistrano_tasks'
|
8
|
+
|
9
|
+
namespace :rollbar do
|
10
|
+
# dry_run? wasn't introduced till Capistrano 3.5.0; use the old fetch(:sshkit_backed)
|
11
|
+
set :dry_run, (proc { ::Capistrano::Configuration.env.fetch(:sshkit_backend) == ::SSHKit::Backend::Printer })
|
12
|
+
|
13
|
+
desc 'Send deployment started notification to Rollbar.'
|
14
|
+
task :deploy_started do
|
15
|
+
on primary fetch(:rollbar_role) do
|
16
|
+
::Rollbar::CapistranoTasks.deploy_started(self, self, fetch(:dry_run))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'Send deployment succeeded notification to Rollbar.'
|
21
|
+
task :deploy_succeeded do
|
22
|
+
on primary fetch(:rollbar_role) do
|
23
|
+
::Rollbar::CapistranoTasks.deploy_succeeded(self, self, fetch(:dry_run))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
desc 'Send deployment failed notification to Rollbar.'
|
28
|
+
task :deploy_failed do
|
29
|
+
on primary fetch(:rollbar_role) do
|
30
|
+
::Rollbar::CapistranoTasks.deploy_failed(self, self, fetch(:dry_run))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
task :fail do
|
35
|
+
raise StandardError
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
namespace :deploy do
|
40
|
+
after 'deploy:set_current_revision', 'rollbar:deploy_started'
|
41
|
+
after 'deploy:finished', 'rollbar:deploy_succeeded'
|
42
|
+
after 'deploy:failed', 'rollbar:deploy_failed'
|
43
|
+
|
44
|
+
# Used for testing :deploy_failed task
|
45
|
+
# after 'rollbar:deploy_started', 'rollbar:fail'
|
46
|
+
end
|
47
|
+
|
48
|
+
namespace :load do
|
49
|
+
task :defaults do
|
50
|
+
set :rollbar_user, (proc { fetch :local_user, ENV['USER'] || ENV['USERNAME'] })
|
51
|
+
set :rollbar_env, (proc { fetch :rails_env, 'production' })
|
52
|
+
set :rollbar_token, (proc { abort "Please specify the Rollbar access token, set :rollbar_token, 'your token'" })
|
53
|
+
set :rollbar_role, (proc { :app })
|
54
|
+
set :rollbar_revision, (proc { fetch :current_revision })
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'rollbar/deploy'
|
2
|
+
|
3
|
+
module Rollbar
|
4
|
+
# Module containing the logic of Capistrano tasks for deploy tracking
|
5
|
+
module CapistranoTasks
|
6
|
+
class << self
|
7
|
+
def deploy_started(capistrano, logger, dry_run)
|
8
|
+
deploy_task(logger, :desc => 'Notifying Rollbar of deployment start') do
|
9
|
+
result = report_deploy_started(capistrano, dry_run)
|
10
|
+
|
11
|
+
debug_request_response(logger, result)
|
12
|
+
|
13
|
+
capistrano.set(:rollbar_deploy_id, 123) if dry_run
|
14
|
+
|
15
|
+
skip_in_dry_run(logger, dry_run) do
|
16
|
+
if result[:success] && (deploy_id = result[:data] && result[:data][:deploy_id])
|
17
|
+
capistrano.set :rollbar_deploy_id, deploy_id
|
18
|
+
else
|
19
|
+
logger.error 'Unable to report deploy to Rollbar' + (result[:message] ? ': ' + result[:message] : '')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def deploy_succeeded(capistrano, logger, dry_run)
|
26
|
+
deploy_update(capistrano, logger, dry_run, :desc => 'Setting deployment status to `succeeded` in Rollbar') do
|
27
|
+
report_deploy_succeeded(capistrano, dry_run)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def deploy_failed(capistrano, logger, dry_run)
|
32
|
+
deploy_update(capistrano, logger, dry_run, :desc => 'Setting deployment status to `failed` in Rollbar') do
|
33
|
+
report_deploy_failed(capistrano, dry_run)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def deploy_task(logger, opts = {})
|
40
|
+
capistrano_300_warning(logger)
|
41
|
+
logger.info opts[:desc] if opts[:desc]
|
42
|
+
yield
|
43
|
+
end
|
44
|
+
|
45
|
+
def deploy_update(capistrano, logger, dry_run, opts = {})
|
46
|
+
deploy_task(logger, opts) do
|
47
|
+
depend_on_deploy_id(capistrano, logger) do
|
48
|
+
result = yield
|
49
|
+
|
50
|
+
debug_request_response(logger, result)
|
51
|
+
|
52
|
+
skip_in_dry_run(logger, dry_run) do
|
53
|
+
if result[:success]
|
54
|
+
logger.info 'Updated deploy status in Rollbar'
|
55
|
+
else
|
56
|
+
logger.error 'Unable to update deploy status in Rollbar' + (result[:message] ? ': ' + result[:message] : '')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def capistrano_300_warning(logger)
|
64
|
+
logger.warn("You need to upgrade capistrano to '>= 3.1' version in order to correctly report deploys to Rollbar. (On 3.0, the reported revision will be incorrect.)") if ::Capistrano::VERSION =~ /^3\.0/
|
65
|
+
end
|
66
|
+
|
67
|
+
def report_deploy_started(capistrano, dry_run)
|
68
|
+
::Rollbar::Deploy.report(
|
69
|
+
{
|
70
|
+
:rollbar_username => capistrano.fetch(:rollbar_user),
|
71
|
+
:local_username => capistrano.fetch(:rollbar_user),
|
72
|
+
:comment => capistrano.fetch(:rollbar_comment),
|
73
|
+
:status => :started,
|
74
|
+
:proxy => :ENV,
|
75
|
+
:dry_run => dry_run
|
76
|
+
},
|
77
|
+
capistrano.fetch(:rollbar_token),
|
78
|
+
capistrano.fetch(:rollbar_env),
|
79
|
+
capistrano.fetch(:rollbar_revision)
|
80
|
+
)
|
81
|
+
end
|
82
|
+
|
83
|
+
def report_deploy_succeeded(capistrano, dry_run)
|
84
|
+
::Rollbar::Deploy.update(
|
85
|
+
{
|
86
|
+
:proxy => :ENV,
|
87
|
+
:dry_run => dry_run
|
88
|
+
},
|
89
|
+
capistrano.fetch(:rollbar_token),
|
90
|
+
capistrano.fetch(:rollbar_deploy_id),
|
91
|
+
:succeeded
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
def report_deploy_failed(capistrano, dry_run)
|
96
|
+
::Rollbar::Deploy.update(
|
97
|
+
{
|
98
|
+
:proxy => :ENV,
|
99
|
+
:dry_run => dry_run
|
100
|
+
},
|
101
|
+
capistrano.fetch(:rollbar_token),
|
102
|
+
capistrano.fetch(:rollbar_deploy_id),
|
103
|
+
:failed
|
104
|
+
)
|
105
|
+
end
|
106
|
+
|
107
|
+
def depend_on_deploy_id(capistrano, logger)
|
108
|
+
if capistrano.fetch(:rollbar_deploy_id)
|
109
|
+
yield
|
110
|
+
else
|
111
|
+
logger.error 'Failed to update the deploy in Rollbar. No deploy id available.'
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def skip_in_dry_run(logger, dry_run)
|
116
|
+
if dry_run
|
117
|
+
logger.info 'Skipping sending HTTP requests to Rollbar in dry run.'
|
118
|
+
else
|
119
|
+
yield
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def debug_request_response(logger, result)
|
124
|
+
# NOTE: in Capistrano debug messages go to log/capistrano.log but not to stdout even if log_level == :debug
|
125
|
+
logger.debug result[:request_info]
|
126
|
+
logger.debug result[:response_info] if result[:response_info]
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -8,10 +8,12 @@ module Rollbar
|
|
8
8
|
attr_accessor :async_handler
|
9
9
|
attr_accessor :branch
|
10
10
|
attr_reader :before_process
|
11
|
+
attr_accessor :capture_uncaught
|
11
12
|
attr_accessor :code_version
|
12
13
|
attr_accessor :custom_data_method
|
13
14
|
attr_accessor :delayed_job_enabled
|
14
15
|
attr_accessor :default_logger
|
16
|
+
attr_reader :logger_level
|
15
17
|
attr_accessor :disable_monkey_patch
|
16
18
|
attr_accessor :disable_rack_monkey_patch
|
17
19
|
attr_accessor :disable_core_monkey_patch
|
@@ -25,6 +27,7 @@ module Rollbar
|
|
25
27
|
attr_accessor :framework
|
26
28
|
attr_accessor :ignored_person_ids
|
27
29
|
attr_accessor :host
|
30
|
+
attr_accessor :locals
|
28
31
|
attr_writer :logger
|
29
32
|
attr_accessor :payload_options
|
30
33
|
attr_accessor :person_method
|
@@ -43,6 +46,7 @@ module Rollbar
|
|
43
46
|
attr_accessor :scrub_fields
|
44
47
|
attr_accessor :scrub_user
|
45
48
|
attr_accessor :scrub_password
|
49
|
+
attr_accessor :scrub_whitelist
|
46
50
|
attr_accessor :collect_user_ip
|
47
51
|
attr_accessor :anonymize_user_ip
|
48
52
|
attr_accessor :user_ip_obfuscator_secret
|
@@ -59,20 +63,26 @@ module Rollbar
|
|
59
63
|
attr_reader :send_extra_frame_data
|
60
64
|
attr_accessor :use_exception_level_filters_default
|
61
65
|
attr_accessor :proxy
|
66
|
+
attr_accessor :raise_on_error
|
67
|
+
attr_accessor :transmit
|
68
|
+
attr_accessor :log_payload
|
62
69
|
|
63
70
|
attr_reader :project_gem_paths
|
71
|
+
attr_accessor :configured_options
|
64
72
|
|
65
|
-
|
73
|
+
alias safely? safely
|
66
74
|
|
67
|
-
DEFAULT_ENDPOINT = 'https://api.rollbar.com/api/1/item/'
|
68
|
-
DEFAULT_WEB_BASE = 'https://rollbar.com'
|
75
|
+
DEFAULT_ENDPOINT = 'https://api.rollbar.com/api/1/item/'.freeze
|
76
|
+
DEFAULT_WEB_BASE = 'https://rollbar.com'.freeze
|
69
77
|
|
70
78
|
def initialize
|
71
79
|
@async_handler = nil
|
72
80
|
@before_process = []
|
81
|
+
@capture_uncaught = nil
|
73
82
|
@code_version = nil
|
74
83
|
@custom_data_method = nil
|
75
84
|
@default_logger = lambda { ::Logger.new(STDERR) }
|
85
|
+
@logger_level = :info
|
76
86
|
@delayed_job_enabled = true
|
77
87
|
@disable_monkey_patch = false
|
78
88
|
@disable_core_monkey_patch = false
|
@@ -102,12 +112,14 @@ module Rollbar
|
|
102
112
|
@net_retries = 3
|
103
113
|
@js_enabled = false
|
104
114
|
@js_options = {}
|
115
|
+
@locals = {}
|
105
116
|
@scrub_fields = [:passwd, :password, :password_confirmation, :secret,
|
106
117
|
:confirm_password, :password_confirmation, :secret_token,
|
107
|
-
:api_key, :access_token]
|
118
|
+
:api_key, :access_token, :accessToken, :session_id]
|
108
119
|
@scrub_user = true
|
109
120
|
@scrub_password = true
|
110
121
|
@randomize_scrub_length = true
|
122
|
+
@scrub_whitelist = []
|
111
123
|
@uncaught_exception_level = 'error'
|
112
124
|
@scrub_headers = ['Authorization']
|
113
125
|
@sidekiq_threshold = 0
|
@@ -122,8 +134,17 @@ module Rollbar
|
|
122
134
|
@project_gem_paths = []
|
123
135
|
@use_exception_level_filters_default = false
|
124
136
|
@proxy = nil
|
137
|
+
@raise_on_error = false
|
138
|
+
@transmit = true
|
139
|
+
@log_payload = false
|
125
140
|
@collect_user_ip = true
|
126
141
|
@anonymize_user_ip = false
|
142
|
+
@hooks = {
|
143
|
+
:on_error_response => nil, # params: response
|
144
|
+
:on_report_internal_error => nil # params: exception
|
145
|
+
}
|
146
|
+
|
147
|
+
@configured_options = ConfiguredOptions.new(self)
|
127
148
|
end
|
128
149
|
|
129
150
|
def initialize_copy(orig)
|
@@ -131,9 +152,18 @@ module Rollbar
|
|
131
152
|
|
132
153
|
instance_variables.each do |var|
|
133
154
|
instance_var = instance_variable_get(var)
|
134
|
-
instance_variable_set(var, Rollbar::Util
|
155
|
+
instance_variable_set(var, Rollbar::Util.deep_copy(instance_var))
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def wrapped_clone
|
160
|
+
original_clone.tap do |new_config|
|
161
|
+
new_config.configured_options = ConfiguredOptions.new(new_config)
|
162
|
+
new_config.configured_options.configured = configured_options.configured
|
135
163
|
end
|
136
164
|
end
|
165
|
+
alias original_clone clone
|
166
|
+
alias clone wrapped_clone
|
137
167
|
|
138
168
|
def merge(options)
|
139
169
|
new_configuration = clone
|
@@ -153,6 +183,15 @@ module Rollbar
|
|
153
183
|
self
|
154
184
|
end
|
155
185
|
|
186
|
+
def use_active_job(options = {})
|
187
|
+
require 'rollbar/delay/active_job'
|
188
|
+
|
189
|
+
Rollbar::Delay::ActiveJob.queue_as(options[:queue] || Rollbar::Delay::ActiveJob.default_queue_name)
|
190
|
+
|
191
|
+
@use_async = true
|
192
|
+
@async_handler = Rollbar::Delay::ActiveJob
|
193
|
+
end
|
194
|
+
|
156
195
|
def use_delayed_job(options = {})
|
157
196
|
require 'rollbar/delay/delayed_job'
|
158
197
|
|
@@ -177,8 +216,11 @@ module Rollbar
|
|
177
216
|
@async_handler = Rollbar::Delay::Resque
|
178
217
|
end
|
179
218
|
|
180
|
-
def use_shoryuken
|
219
|
+
def use_shoryuken(options = {})
|
181
220
|
require 'rollbar/delay/shoryuken' if defined?(Shoryuken)
|
221
|
+
|
222
|
+
Rollbar::Delay::Shoryuken.queue = options[:queue] if options[:queue]
|
223
|
+
|
182
224
|
@use_async = true
|
183
225
|
@async_handler = Rollbar::Delay::Shoryuken
|
184
226
|
end
|
@@ -202,7 +244,7 @@ module Rollbar
|
|
202
244
|
@async_handler = Rollbar::Delay::SuckerPunch
|
203
245
|
end
|
204
246
|
|
205
|
-
def use_sucker_punch=(
|
247
|
+
def use_sucker_punch=(_value)
|
206
248
|
deprecation_message = '#use_sucker_punch=(value) has been deprecated in favor of #use_sucker_punch. Please update your rollbar configuration.'
|
207
249
|
defined?(ActiveSupport) ? ActiveSupport::Deprecation.warn(deprecation_message) : puts(deprecation_message)
|
208
250
|
|
@@ -245,8 +287,54 @@ module Rollbar
|
|
245
287
|
send(option)
|
246
288
|
end
|
247
289
|
|
290
|
+
def logger_level=(level)
|
291
|
+
@logger_level = if level
|
292
|
+
level.to_sym
|
293
|
+
else
|
294
|
+
level
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
248
298
|
def logger
|
249
299
|
@logger ||= default_logger.call
|
250
300
|
end
|
301
|
+
|
302
|
+
def hook(symbol, &block)
|
303
|
+
if @hooks.key?(symbol)
|
304
|
+
if block_given?
|
305
|
+
@hooks[symbol] = block
|
306
|
+
else
|
307
|
+
@hooks[symbol]
|
308
|
+
end
|
309
|
+
else
|
310
|
+
raise StandardError, 'Hook :' + symbol.to_s + ' is not supported by Rollbar SDK.'
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
def execute_hook(symbol, *args)
|
315
|
+
hook(symbol).call(*args) if hook(symbol).is_a?(Proc)
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
class ConfiguredOptions
|
320
|
+
attr_accessor :configuration, :configured
|
321
|
+
|
322
|
+
def initialize(configuration)
|
323
|
+
@configuration = configuration
|
324
|
+
@configured = {}
|
325
|
+
end
|
326
|
+
|
327
|
+
def method_missing(method, *args, &block)
|
328
|
+
return super unless configuration.respond_to?(method)
|
329
|
+
|
330
|
+
method_string = method.to_s
|
331
|
+
configured[method_string.chomp('=').to_sym] = args.first if method_string.end_with?('=')
|
332
|
+
|
333
|
+
configuration.send(method, *args, &block)
|
334
|
+
end
|
335
|
+
|
336
|
+
def respond_to_missing?(method)
|
337
|
+
configuration.respond_to?(method) || super
|
338
|
+
end
|
251
339
|
end
|
252
340
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Rollbar
|
2
|
+
module Delay
|
3
|
+
# This class provides the ActiveJob async handler. Users can
|
4
|
+
# use ActiveJob in order to send the reports to the Rollbar API
|
5
|
+
class ActiveJob < ::ActiveJob::Base
|
6
|
+
queue_as :default
|
7
|
+
|
8
|
+
def perform(payload)
|
9
|
+
Rollbar.process_from_async_handler(payload)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.call(payload)
|
13
|
+
perform_later payload
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -11,10 +11,10 @@ module Rollbar
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def queue
|
14
|
-
@queue ||=
|
14
|
+
@queue ||= queue_class.new(nil, :size => 5) do |payload|
|
15
15
|
begin
|
16
16
|
Rollbar.process_from_async_handler(payload)
|
17
|
-
rescue
|
17
|
+
rescue StandardError
|
18
18
|
# According to https://github.com/mperham/girl_friday/wiki#error-handling
|
19
19
|
# we reraise the exception so it can be handled some way
|
20
20
|
raise
|
data/lib/rollbar/delay/resque.rb
CHANGED
@@ -23,12 +23,10 @@ module Rollbar
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def perform(payload)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
raise
|
31
|
-
end
|
26
|
+
Rollbar.process_from_async_handler(payload)
|
27
|
+
rescue StandardError
|
28
|
+
# Raise the exception so Resque can track the errored job
|
29
|
+
raise
|
32
30
|
end
|
33
31
|
end
|
34
32
|
end
|
@@ -8,22 +8,28 @@ module Rollbar
|
|
8
8
|
class Shoryuken
|
9
9
|
include ::Shoryuken::Worker
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
class << self
|
12
|
+
attr_accessor :queue
|
13
|
+
end
|
14
|
+
|
15
|
+
self.queue = "rollbar_#{Rollbar.configuration.environment}"
|
16
|
+
|
17
|
+
def self.call(payload)
|
18
|
+
new.call(payload, :queue => queue)
|
19
|
+
end
|
20
|
+
|
21
|
+
def call(payload, options = {})
|
22
|
+
self.class.perform_async(payload, options)
|
13
23
|
end
|
14
24
|
|
15
25
|
# not allowing bulk, to not double-report rollbars if one of them failed in bunch.
|
16
|
-
shoryuken_options :
|
26
|
+
shoryuken_options :auto_delete => true,
|
27
|
+
:body_parser => :json,
|
28
|
+
:retry_intervals => [60, 180, 360, 120_0, 360_0, 186_00]
|
17
29
|
|
18
|
-
## responsible for performing job. - payload is a json parsed body of the message.
|
19
30
|
def perform(_sqs_message, payload)
|
20
31
|
Rollbar.process_from_async_handler(payload)
|
21
32
|
end
|
22
|
-
|
23
|
-
## to push the job !
|
24
|
-
def call(payload)
|
25
|
-
self.class.perform_async(payload)
|
26
|
-
end
|
27
33
|
end
|
28
34
|
end
|
29
35
|
end
|