rollbar 2.8.3 → 3.6.0
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/.codeclimate.yml +18 -0
- data/.github/pull_request_template.md +34 -0
- data/.github/workflows/ci.yml +67 -0
- data/.gitignore +3 -1
- data/.rubocop.yml +206 -7
- data/Appraisals +10 -10
- data/CHANGELOG.md +257 -3
- data/Gemfile +74 -13
- data/README.md +38 -833
- data/Rakefile +0 -0
- data/THANKS.md +1 -0
- data/data/rollbar.snippet.js +1 -1
- data/docs/configuration.md +64 -3
- data/docs/plugins.md +46 -0
- data/gemfiles/rails50.gemfile +56 -0
- data/gemfiles/rails51.gemfile +57 -0
- data/gemfiles/rails52.gemfile +56 -0
- data/gemfiles/rails60.gemfile +52 -0
- data/gemfiles/rails61.gemfile +52 -0
- data/gemfiles/rails70.gemfile +52 -0
- data/gemfiles/rails71.gemfile +52 -0
- data/lib/generators/rollbar/rollbar_generator.rb +24 -20
- data/lib/generators/rollbar/templates/{initializer.rb → initializer.erb} +19 -5
- data/lib/rails/rollbar_runner.rb +26 -22
- data/lib/rollbar/capistrano.rb +78 -38
- data/lib/rollbar/capistrano3.rb +62 -1
- data/lib/rollbar/capistrano_tasks.rb +166 -0
- data/lib/rollbar/configuration.rb +291 -71
- data/lib/rollbar/delay/active_job.rb +17 -0
- data/lib/rollbar/delay/delayed_job.rb +23 -0
- data/lib/rollbar/delay/girl_friday.rb +4 -9
- data/lib/rollbar/delay/resque.rb +3 -6
- data/lib/rollbar/delay/shoryuken.rb +36 -0
- data/lib/rollbar/delay/sidekiq.rb +6 -8
- data/lib/rollbar/delay/sucker_punch.rb +17 -22
- data/lib/rollbar/delay/thread.rb +74 -3
- data/lib/rollbar/deploy.rb +91 -0
- data/lib/rollbar/encoding/encoder.rb +22 -11
- data/lib/rollbar/encoding.rb +2 -7
- data/lib/rollbar/exception_reporter.rb +36 -12
- data/lib/rollbar/item/backtrace.rb +118 -0
- data/lib/rollbar/item/frame.rb +121 -0
- data/lib/rollbar/item/locals.rb +103 -0
- data/lib/rollbar/item.rb +314 -0
- data/lib/rollbar/js.rb +0 -28
- data/lib/rollbar/json.rb +7 -55
- data/lib/rollbar/language_support.rb +7 -19
- data/lib/rollbar/lazy_store.rb +8 -12
- data/lib/rollbar/logger.rb +71 -0
- data/lib/rollbar/logger_proxy.rb +18 -1
- data/lib/rollbar/middleware/js/json_value.rb +36 -0
- data/lib/rollbar/middleware/js.rb +297 -0
- data/lib/rollbar/middleware/rack/builder.rb +4 -4
- data/lib/rollbar/middleware/rack/test_session.rb +4 -4
- data/lib/rollbar/middleware/rack.rb +52 -0
- data/lib/rollbar/middleware/rails/rollbar.rb +19 -7
- data/lib/rollbar/middleware/rails/show_exceptions.rb +21 -9
- data/lib/rollbar/middleware/sinatra.rb +2 -40
- data/lib/rollbar/notifier/trace_with_bindings.rb +75 -0
- data/lib/rollbar/notifier.rb +913 -0
- data/lib/rollbar/plugin.rb +126 -0
- data/lib/rollbar/plugins/active_job.rb +54 -0
- data/lib/rollbar/plugins/basic_socket.rb +31 -0
- data/lib/rollbar/plugins/delayed_job/job_data.rb +50 -0
- data/lib/rollbar/plugins/delayed_job/plugin.rb +88 -0
- data/lib/rollbar/plugins/delayed_job.rb +12 -0
- data/lib/rollbar/plugins/error_context.rb +11 -0
- data/lib/rollbar/plugins/goalie.rb +65 -0
- data/lib/rollbar/plugins/rack.rb +18 -0
- data/lib/rollbar/plugins/rails/controller_methods.rb +56 -0
- data/lib/rollbar/plugins/rails/error_subscriber.rb +12 -0
- data/lib/rollbar/plugins/rails/railtie30.rb +18 -0
- data/lib/rollbar/plugins/rails/railtie32.rb +18 -0
- data/lib/rollbar/plugins/rails/railtie_mixin.rb +37 -0
- data/lib/rollbar/plugins/rails.rb +89 -0
- data/lib/rollbar/plugins/rake.rb +73 -0
- data/lib/rollbar/plugins/resque/failure.rb +39 -0
- data/lib/rollbar/plugins/resque.rb +11 -0
- data/lib/rollbar/plugins/sidekiq/plugin.rb +77 -0
- data/lib/rollbar/plugins/sidekiq.rb +37 -0
- data/lib/rollbar/plugins/thread.rb +14 -0
- data/lib/rollbar/plugins/validations.rb +45 -0
- data/lib/rollbar/plugins.rb +47 -0
- data/lib/rollbar/rails.rb +0 -1
- data/lib/rollbar/rake_tasks.rb +4 -66
- data/lib/rollbar/request_data_extractor.rb +157 -117
- data/lib/rollbar/rollbar_test.rb +38 -0
- data/lib/rollbar/scrubbers/params.rb +133 -0
- data/lib/rollbar/scrubbers/url.rb +90 -35
- data/lib/rollbar/scrubbers.rb +13 -0
- data/lib/rollbar/truncation/frames_strategy.rb +2 -1
- data/lib/rollbar/truncation/min_body_strategy.rb +3 -4
- data/lib/rollbar/truncation/mixin.rb +1 -1
- data/lib/rollbar/truncation/remove_any_key_strategy.rb +126 -0
- data/lib/rollbar/truncation/remove_extra_strategy.rb +37 -0
- data/lib/rollbar/truncation/remove_request_strategy.rb +21 -0
- data/lib/rollbar/truncation/strings_strategy.rb +6 -5
- data/lib/rollbar/truncation.rb +10 -4
- data/lib/rollbar/util/hash.rb +37 -6
- data/lib/rollbar/util/ip_anonymizer.rb +33 -0
- data/lib/rollbar/util/ip_obfuscator.rb +1 -1
- data/lib/rollbar/util.rb +101 -55
- data/lib/rollbar/version.rb +1 -1
- data/lib/rollbar.rb +91 -879
- data/lib/tasks/benchmark.rake +104 -0
- data/lib/tasks/tasks.rake +3 -3
- data/rollbar.gemspec +21 -32
- data/spec/support/rollbar_api.rb +67 -0
- metadata +78 -439
- data/.travis.yml +0 -155
- data/gemfiles/rails30.gemfile +0 -20
- data/gemfiles/rails31.gemfile +0 -16
- data/gemfiles/rails32.gemfile +0 -17
- data/gemfiles/rails40.gemfile +0 -17
- data/gemfiles/rails41.gemfile +0 -15
- data/gemfiles/rails42.gemfile +0 -15
- data/lib/rollbar/active_job.rb +0 -11
- data/lib/rollbar/active_record_extension.rb +0 -14
- data/lib/rollbar/core_ext/basic_socket.rb +0 -7
- data/lib/rollbar/core_ext/thread.rb +0 -9
- data/lib/rollbar/delayed_job.rb +0 -78
- data/lib/rollbar/encoding/legacy_encoder.rb +0 -20
- data/lib/rollbar/goalie.rb +0 -33
- data/lib/rollbar/js/frameworks/rails.rb +0 -29
- data/lib/rollbar/js/frameworks.rb +0 -6
- data/lib/rollbar/js/middleware.rb +0 -129
- data/lib/rollbar/js/version.rb +0 -5
- data/lib/rollbar/json/default.rb +0 -11
- data/lib/rollbar/json/oj.rb +0 -15
- data/lib/rollbar/rack.rb +0 -9
- data/lib/rollbar/rails/controller_methods.rb +0 -40
- data/lib/rollbar/railtie.rb +0 -46
- data/lib/rollbar/rake.rb +0 -38
- data/lib/rollbar/sidekiq.rb +0 -40
- data/lib/rollbar/tasks/rollbar.cap +0 -45
- data/spec/cacert.pem +0 -3988
- data/spec/controllers/home_controller_spec.rb +0 -455
- data/spec/delay/sidekiq_spec.rb +0 -61
- data/spec/delay/sucker_punch_spec.rb +0 -25
- data/spec/delayed/backend/test.rb +0 -139
- 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/user.rb +0 -7
- 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/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 -23
- 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.ru +0 -4
- 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/schema.rb +0 -35
- 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/generators/rollbar/rollbar_generator_spec.rb +0 -24
- data/spec/requests/home_spec.rb +0 -49
- data/spec/rollbar/active_job_spec.rb +0 -33
- data/spec/rollbar/configuration_spec.rb +0 -24
- 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/delayed_job/job_data.rb +0 -35
- data/spec/rollbar/delayed_job_spec.rb +0 -90
- data/spec/rollbar/encoding/encoder_spec.rb +0 -63
- data/spec/rollbar/js/frameworks/rails_spec.rb +0 -19
- data/spec/rollbar/js/middleware_spec.rb +0 -162
- 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 -34
- data/spec/rollbar/middleware/rack/builder_spec.rb +0 -151
- data/spec/rollbar/middleware/sinatra_spec.rb +0 -197
- data/spec/rollbar/rake_spec.rb +0 -34
- data/spec/rollbar/request_data_extractor_spec.rb +0 -82
- data/spec/rollbar/scrubbers/url_spec.rb +0 -111
- data/spec/rollbar/sidekiq_spec.rb +0 -90
- 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_spec.rb +0 -19
- data/spec/rollbar_bc_spec.rb +0 -380
- data/spec/rollbar_spec.rb +0 -2067
- data/spec/spec_helper.rb +0 -49
- 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/notifier_helpers.rb +0 -36
- data/spec/support/shared_contexts.rb +0 -12
@@ -2,74 +2,114 @@ require 'logger'
|
|
2
2
|
|
3
3
|
module Rollbar
|
4
4
|
class Configuration
|
5
|
+
SEND_EXTRA_FRAME_DATA_OPTIONS = [:none, :app, :all].freeze
|
5
6
|
|
6
|
-
attr_accessor :access_token
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
7
|
+
attr_accessor :access_token,
|
8
|
+
:anonymize_user_ip,
|
9
|
+
:async_handler,
|
10
|
+
:async_json_payload,
|
11
|
+
:async_skip_report_handler,
|
12
|
+
:backtrace_cleaner,
|
13
|
+
:branch,
|
14
|
+
:capture_uncaught,
|
15
|
+
:code_version,
|
16
|
+
:collect_user_ip,
|
17
|
+
:configured_options,
|
18
|
+
:custom_data_method,
|
19
|
+
:default_logger,
|
20
|
+
:delayed_job_enabled,
|
21
|
+
:disable_action_mailer_monkey_patch,
|
22
|
+
:disable_core_monkey_patch,
|
23
|
+
:disable_monkey_patch,
|
24
|
+
:disable_rack_monkey_patch,
|
25
|
+
:dj_threshold,
|
26
|
+
:dj_use_scoped_block,
|
27
|
+
:enable_error_context,
|
28
|
+
:enabled,
|
29
|
+
:endpoint,
|
30
|
+
:environment,
|
31
|
+
:exception_level_filters,
|
32
|
+
:failover_handlers,
|
33
|
+
:filepath,
|
34
|
+
:files_processed_duration,
|
35
|
+
:files_processed_enabled,
|
36
|
+
:files_processed_size,
|
37
|
+
:files_with_pid_name_enabled,
|
38
|
+
:framework,
|
39
|
+
:ignore_internal_errors,
|
40
|
+
:ignored_person_ids,
|
41
|
+
:js_enabled,
|
42
|
+
:js_options,
|
43
|
+
:host,
|
44
|
+
:locals,
|
45
|
+
:log_payload,
|
46
|
+
:net_retries,
|
47
|
+
:open_timeout,
|
48
|
+
:payload_options,
|
49
|
+
:person_email_method,
|
50
|
+
:person_id_method,
|
51
|
+
:person_method,
|
52
|
+
:person_username_method,
|
53
|
+
:populate_empty_backtraces,
|
54
|
+
:proxy,
|
55
|
+
:raise_on_error,
|
56
|
+
:randomize_scrub_length,
|
57
|
+
:report_dj_data,
|
58
|
+
:request_timeout,
|
59
|
+
:root,
|
60
|
+
:safely,
|
61
|
+
:scrub_fields,
|
62
|
+
:scrub_password,
|
63
|
+
:scrub_user,
|
64
|
+
:scrub_whitelist,
|
65
|
+
:transmit,
|
66
|
+
:uncaught_exception_level,
|
67
|
+
:user_ip_obfuscator_secret,
|
68
|
+
:user_ip_rack_env_key,
|
69
|
+
:scrub_headers,
|
70
|
+
:sidekiq_threshold,
|
71
|
+
:sidekiq_use_scoped_block,
|
72
|
+
:use_async,
|
73
|
+
:use_exception_level_filters_default,
|
74
|
+
:use_payload_access_token,
|
75
|
+
:verify_ssl_peer,
|
76
|
+
:web_base,
|
77
|
+
:write_to_file
|
78
|
+
attr_reader :before_process,
|
79
|
+
:enable_rails_error_subscriber,
|
80
|
+
:logger_level,
|
81
|
+
:project_gem_paths,
|
82
|
+
:send_extra_frame_data,
|
83
|
+
:transform,
|
84
|
+
:use_eventmachine
|
85
|
+
attr_writer :logger # seconds # bytes
|
86
|
+
|
87
|
+
alias safely? safely
|
88
|
+
|
89
|
+
DEFAULT_ENDPOINT = 'https://api.rollbar.com/api/1/item/'.freeze
|
90
|
+
DEFAULT_WEB_BASE = 'https://rollbar.com'.freeze
|
60
91
|
|
61
92
|
def initialize
|
93
|
+
@access_token = nil
|
62
94
|
@async_handler = nil
|
63
95
|
@before_process = []
|
96
|
+
@branch = nil
|
97
|
+
@capture_uncaught = nil
|
64
98
|
@code_version = nil
|
65
99
|
@custom_data_method = nil
|
66
|
-
@default_logger = lambda { Logger.new(
|
100
|
+
@default_logger = lambda { ::Logger.new($stderr) }
|
101
|
+
@logger_level = :info
|
67
102
|
@delayed_job_enabled = true
|
68
103
|
@disable_monkey_patch = false
|
104
|
+
@disable_action_mailer_monkey_patch = false
|
69
105
|
@disable_core_monkey_patch = false
|
70
106
|
@disable_rack_monkey_patch = false
|
107
|
+
@enable_error_context = true
|
108
|
+
@enable_rails_error_subscriber = false
|
71
109
|
@dj_threshold = 0
|
72
|
-
@
|
110
|
+
@dj_use_scoped_block = false
|
111
|
+
@async_skip_report_handler = nil
|
112
|
+
@enabled = nil # set to true when configure is called
|
73
113
|
@endpoint = DEFAULT_ENDPOINT
|
74
114
|
@environment = nil
|
75
115
|
@exception_level_filters = {
|
@@ -79,34 +119,72 @@ module Rollbar
|
|
79
119
|
}
|
80
120
|
@failover_handlers = []
|
81
121
|
@framework = 'Plain'
|
122
|
+
@ignore_internal_errors = [
|
123
|
+
'Net::ReadTimeout',
|
124
|
+
'Net::OpenTimeout',
|
125
|
+
'SocketError'
|
126
|
+
]
|
82
127
|
@ignored_person_ids = []
|
128
|
+
@host = nil
|
83
129
|
@payload_options = {}
|
84
130
|
@person_method = 'current_user'
|
85
131
|
@person_id_method = 'id'
|
86
|
-
@person_username_method =
|
87
|
-
@person_email_method =
|
132
|
+
@person_username_method = nil
|
133
|
+
@person_email_method = nil
|
88
134
|
@project_gems = []
|
89
135
|
@populate_empty_backtraces = false
|
90
136
|
@report_dj_data = true
|
137
|
+
@open_timeout = 3
|
91
138
|
@request_timeout = 3
|
139
|
+
@net_retries = 3
|
140
|
+
@root = nil
|
92
141
|
@js_enabled = false
|
93
142
|
@js_options = {}
|
143
|
+
@locals = {}
|
94
144
|
@scrub_fields = [:passwd, :password, :password_confirmation, :secret,
|
95
145
|
:confirm_password, :password_confirmation, :secret_token,
|
96
|
-
:api_key, :access_token ]
|
146
|
+
:api_key, :access_token, :accessToken, :session_id]
|
97
147
|
@scrub_user = true
|
98
148
|
@scrub_password = true
|
99
|
-
@randomize_scrub_length =
|
149
|
+
@randomize_scrub_length = false
|
150
|
+
@scrub_whitelist = []
|
100
151
|
@uncaught_exception_level = 'error'
|
101
152
|
@scrub_headers = ['Authorization']
|
102
153
|
@sidekiq_threshold = 0
|
154
|
+
@sidekiq_use_scoped_block = false
|
103
155
|
@safely = false
|
104
156
|
@transform = []
|
105
157
|
@use_async = false
|
158
|
+
@async_json_payload = false
|
106
159
|
@use_eventmachine = false
|
107
160
|
@verify_ssl_peer = true
|
108
161
|
@web_base = DEFAULT_WEB_BASE
|
162
|
+
@send_extra_frame_data = :none
|
163
|
+
@project_gem_paths = []
|
164
|
+
@use_exception_level_filters_default = false
|
165
|
+
@proxy = nil
|
166
|
+
@raise_on_error = false
|
167
|
+
@transmit = true
|
168
|
+
@log_payload = false
|
169
|
+
@collect_user_ip = true
|
170
|
+
@anonymize_user_ip = false
|
171
|
+
@user_ip_obfuscator_secret = nil
|
172
|
+
@user_ip_rack_env_key = nil
|
173
|
+
@backtrace_cleaner = nil
|
174
|
+
@hooks = {
|
175
|
+
:on_error_response => nil, # params: response
|
176
|
+
:on_report_internal_error => nil # params: exception
|
177
|
+
}
|
178
|
+
|
109
179
|
@write_to_file = false
|
180
|
+
@filepath = nil
|
181
|
+
@files_with_pid_name_enabled = false
|
182
|
+
@files_processed_enabled = false
|
183
|
+
@files_processed_duration = 60
|
184
|
+
@files_processed_size = 5 * 1000 * 1000
|
185
|
+
@use_payload_access_token = false
|
186
|
+
|
187
|
+
@configured_options = ConfiguredOptions.new(self)
|
110
188
|
end
|
111
189
|
|
112
190
|
def initialize_copy(orig)
|
@@ -114,10 +192,56 @@ module Rollbar
|
|
114
192
|
|
115
193
|
instance_variables.each do |var|
|
116
194
|
instance_var = instance_variable_get(var)
|
117
|
-
instance_variable_set(var, Rollbar::Util
|
195
|
+
instance_variable_set(var, Rollbar::Util.deep_copy(instance_var))
|
118
196
|
end
|
119
197
|
end
|
120
198
|
|
199
|
+
def wrapped_clone
|
200
|
+
original_clone.tap do |new_config|
|
201
|
+
new_config.configured_options = ConfiguredOptions.new(new_config)
|
202
|
+
new_config.configured_options.configured = configured_options.configured
|
203
|
+
end
|
204
|
+
end
|
205
|
+
alias original_clone clone
|
206
|
+
alias clone wrapped_clone
|
207
|
+
|
208
|
+
def merge(options)
|
209
|
+
new_configuration = clone
|
210
|
+
new_configuration.merge!(options)
|
211
|
+
|
212
|
+
new_configuration
|
213
|
+
end
|
214
|
+
|
215
|
+
def merge!(options)
|
216
|
+
options.each do |name, value|
|
217
|
+
variable_name = "@#{name}"
|
218
|
+
next unless instance_variable_defined?(variable_name)
|
219
|
+
|
220
|
+
instance_variable_set(variable_name, value)
|
221
|
+
end
|
222
|
+
|
223
|
+
self
|
224
|
+
end
|
225
|
+
|
226
|
+
def use_active_job(options = {})
|
227
|
+
require 'rollbar/delay/active_job'
|
228
|
+
|
229
|
+
Rollbar::Delay::ActiveJob.queue_as(options[:queue] ||
|
230
|
+
Rollbar::Delay::ActiveJob.default_queue_name)
|
231
|
+
|
232
|
+
@use_async = true
|
233
|
+
@async_handler = Rollbar::Delay::ActiveJob
|
234
|
+
end
|
235
|
+
|
236
|
+
def use_delayed_job(options = {})
|
237
|
+
require 'rollbar/delay/delayed_job'
|
238
|
+
|
239
|
+
Rollbar::Delay::DelayedJob.queue = options[:queue] if options[:queue]
|
240
|
+
|
241
|
+
@use_async = true
|
242
|
+
@async_handler = Rollbar::Delay::DelayedJob
|
243
|
+
end
|
244
|
+
|
121
245
|
def use_sidekiq(options = {})
|
122
246
|
require 'rollbar/delay/sidekiq' if defined?(Sidekiq)
|
123
247
|
@use_async = true
|
@@ -133,16 +257,31 @@ module Rollbar
|
|
133
257
|
@async_handler = Rollbar::Delay::Resque
|
134
258
|
end
|
135
259
|
|
260
|
+
def use_shoryuken(options = {})
|
261
|
+
require 'rollbar/delay/shoryuken' if defined?(Shoryuken)
|
262
|
+
|
263
|
+
Rollbar::Delay::Shoryuken.queue = options[:queue] if options[:queue]
|
264
|
+
|
265
|
+
@use_async = true
|
266
|
+
@async_handler = Rollbar::Delay::Shoryuken
|
267
|
+
end
|
268
|
+
|
136
269
|
def use_sidekiq=(value)
|
137
|
-
deprecation_message =
|
138
|
-
|
270
|
+
deprecation_message = '#use_sidekiq=(value) has been deprecated in favor ' \
|
271
|
+
'of #use_sidekiq(options = {}). Please update your rollbar configuration.'
|
272
|
+
if defined?(ActiveSupport)
|
273
|
+
ActiveSupport::Deprecation.warn(deprecation_message)
|
274
|
+
else
|
275
|
+
puts(deprecation_message)
|
276
|
+
end
|
139
277
|
|
140
278
|
value.is_a?(Hash) ? use_sidekiq(value) : use_sidekiq
|
141
279
|
end
|
142
280
|
|
143
|
-
def use_thread
|
281
|
+
def use_thread(options = {})
|
144
282
|
require 'rollbar/delay/thread'
|
145
283
|
@use_async = true
|
284
|
+
Rollbar::Delay::Thread.options = options
|
146
285
|
@async_handler = Rollbar::Delay::Thread
|
147
286
|
end
|
148
287
|
|
@@ -152,9 +291,14 @@ module Rollbar
|
|
152
291
|
@async_handler = Rollbar::Delay::SuckerPunch
|
153
292
|
end
|
154
293
|
|
155
|
-
def use_sucker_punch=(
|
156
|
-
deprecation_message =
|
157
|
-
|
294
|
+
def use_sucker_punch=(_value)
|
295
|
+
deprecation_message = '#use_sucker_punch=(value) has been deprecated in ' \
|
296
|
+
'favor of #use_sucker_punch. Please update your rollbar configuration.'
|
297
|
+
if defined?(ActiveSupport)
|
298
|
+
ActiveSupport::Deprecation.warn(deprecation_message)
|
299
|
+
else
|
300
|
+
puts(deprecation_message)
|
301
|
+
end
|
158
302
|
|
159
303
|
use_sucker_punch
|
160
304
|
end
|
@@ -167,11 +311,12 @@ module Rollbar
|
|
167
311
|
def project_gems=(gems)
|
168
312
|
@project_gem_paths = gems.map do |name|
|
169
313
|
found = Gem::Specification.each.select { |spec| name === spec.name }
|
170
|
-
if found.empty?
|
171
|
-
puts "[Rollbar] No gems found matching #{name.inspect}"
|
172
|
-
end
|
314
|
+
puts "[Rollbar] No gems found matching #{name.inspect}" if found.empty?
|
173
315
|
found
|
174
|
-
end
|
316
|
+
end
|
317
|
+
@project_gem_paths.flatten!
|
318
|
+
@project_gem_paths.uniq!
|
319
|
+
@project_gem_paths.map!(&:gem_dir)
|
175
320
|
end
|
176
321
|
|
177
322
|
def before_process=(*handler)
|
@@ -182,13 +327,88 @@ module Rollbar
|
|
182
327
|
@transform = Array(handler)
|
183
328
|
end
|
184
329
|
|
330
|
+
def send_extra_frame_data=(value)
|
331
|
+
unless SEND_EXTRA_FRAME_DATA_OPTIONS.include?(value)
|
332
|
+
logger.warning(
|
333
|
+
"Wrong 'send_extra_frame_data' value, :none, :app or :all is expected"
|
334
|
+
)
|
335
|
+
|
336
|
+
return
|
337
|
+
end
|
338
|
+
|
339
|
+
@send_extra_frame_data = value
|
340
|
+
end
|
341
|
+
|
342
|
+
def enable_rails_error_subscriber=(enable)
|
343
|
+
return if !defined?(::Rails) || ::Rails.gem_version < ::Gem::Version.new('7.1.0')
|
344
|
+
|
345
|
+
if @enable_rails_error_subscriber && !enable
|
346
|
+
::Rails.error.unsubscribe(Rollbar::ErrorSubscriber)
|
347
|
+
end
|
348
|
+
|
349
|
+
if !@enable_rails_error_subscriber && enable
|
350
|
+
::Rails.error.subscribe(Rollbar::ErrorSubscriber.new)
|
351
|
+
end
|
352
|
+
|
353
|
+
@enable_rails_error_subscriber = enable
|
354
|
+
end
|
355
|
+
|
185
356
|
# allow params to be read like a hash
|
186
357
|
def [](option)
|
187
358
|
send(option)
|
188
359
|
end
|
189
360
|
|
361
|
+
def logger_level=(level)
|
362
|
+
@logger_level = if level
|
363
|
+
level.to_sym
|
364
|
+
else
|
365
|
+
level
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
190
369
|
def logger
|
191
370
|
@logger ||= default_logger.call
|
192
371
|
end
|
372
|
+
|
373
|
+
def hook(symbol, &block)
|
374
|
+
unless @hooks.key?(symbol)
|
375
|
+
raise StandardError, "Hook :#{symbol} is not supported by Rollbar SDK."
|
376
|
+
end
|
377
|
+
|
378
|
+
if block_given?
|
379
|
+
@hooks[symbol] = block
|
380
|
+
else
|
381
|
+
@hooks[symbol]
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
385
|
+
def execute_hook(symbol, *args)
|
386
|
+
hook(symbol).call(*args) if hook(symbol).is_a?(Proc)
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
390
|
+
class ConfiguredOptions
|
391
|
+
attr_accessor :configuration, :configured
|
392
|
+
|
393
|
+
def initialize(configuration)
|
394
|
+
@configuration = configuration
|
395
|
+
@configured = {}
|
396
|
+
end
|
397
|
+
|
398
|
+
def method_missing(method, *args, &block)
|
399
|
+
return super unless configuration.respond_to?(method)
|
400
|
+
|
401
|
+
method_string = method.to_s
|
402
|
+
if method_string.end_with?('=')
|
403
|
+
configured[method_string.chomp('=').to_sym] =
|
404
|
+
args.first
|
405
|
+
end
|
406
|
+
|
407
|
+
configuration.send(method, *args, &block)
|
408
|
+
end
|
409
|
+
|
410
|
+
def respond_to_missing?(method)
|
411
|
+
configuration.respond_to?(method) || super
|
412
|
+
end
|
193
413
|
end
|
194
414
|
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
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Rollbar
|
2
|
+
module Delay
|
3
|
+
# This class provides the DelayedJob async handler. Users can
|
4
|
+
# use DelayedJob in order to send the reports to the Rollbar API
|
5
|
+
class DelayedJob
|
6
|
+
class << self
|
7
|
+
attr_accessor :queue
|
8
|
+
|
9
|
+
def call(payload)
|
10
|
+
if queue
|
11
|
+
new.delay(:queue => queue).call(payload)
|
12
|
+
else
|
13
|
+
new.delay.call(payload)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(payload)
|
19
|
+
Rollbar.process_from_async_handler(payload)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Rollbar
|
2
2
|
module Delay
|
3
3
|
class GirlFriday
|
4
|
-
|
5
4
|
class << self
|
6
5
|
def queue_class
|
7
6
|
::GirlFriday::WorkQueue
|
@@ -12,14 +11,10 @@ module Rollbar
|
|
12
11
|
end
|
13
12
|
|
14
13
|
def queue
|
15
|
-
@queue ||=
|
16
|
-
|
17
|
-
|
18
|
-
rescue
|
19
|
-
# According to https://github.com/mperham/girl_friday/wiki#error-handling
|
20
|
-
# we reraise the exception so it can be handled some way
|
21
|
-
raise
|
22
|
-
end
|
14
|
+
@queue ||= queue_class.new(nil, :size => 5) do |payload|
|
15
|
+
Rollbar.process_from_async_handler(payload)
|
16
|
+
|
17
|
+
# Do not rescue. GirlFriday will call the error handler.
|
23
18
|
end
|
24
19
|
end
|
25
20
|
end
|
data/lib/rollbar/delay/resque.rb
CHANGED
@@ -23,12 +23,9 @@ module Rollbar
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def perform(payload)
|
26
|
-
|
27
|
-
|
28
|
-
rescue
|
29
|
-
# Raise the exception so Resque can track the errored job
|
30
|
-
raise
|
31
|
-
end
|
26
|
+
Rollbar.process_from_async_handler(payload)
|
27
|
+
|
28
|
+
# Do not rescue. Resque will call the error handler.
|
32
29
|
end
|
33
30
|
end
|
34
31
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'shoryuken'
|
2
|
+
|
3
|
+
module Rollbar
|
4
|
+
module Delay
|
5
|
+
# Following class allows to send rollbars using Sho-ryu-ken as a background
|
6
|
+
# jobs processor. See the queue_name method which states that your queues
|
7
|
+
# needs to be names as "rollbar_ENVIRONMENT". Retry intervals will be used
|
8
|
+
# to retry sending the same message again if failed before.
|
9
|
+
class Shoryuken
|
10
|
+
include ::Shoryuken::Worker
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr_accessor :queue
|
14
|
+
end
|
15
|
+
|
16
|
+
self.queue = "rollbar_#{Rollbar.configuration.environment}"
|
17
|
+
|
18
|
+
def self.call(payload)
|
19
|
+
new.call(payload, :queue => queue)
|
20
|
+
end
|
21
|
+
|
22
|
+
def call(payload, options = {})
|
23
|
+
self.class.perform_async(payload, options)
|
24
|
+
end
|
25
|
+
|
26
|
+
# not allowing bulk, to not double-report rollbars if one of them failed in bunch.
|
27
|
+
shoryuken_options :auto_delete => true,
|
28
|
+
:body_parser => :json,
|
29
|
+
:retry_intervals => [60, 180, 360, 120_0, 360_0, 186_00]
|
30
|
+
|
31
|
+
def perform(_sqs_message, payload)
|
32
|
+
Rollbar.process_from_async_handler(payload)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -10,19 +10,17 @@ module Rollbar
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def call(payload)
|
13
|
-
::Sidekiq::Client.push
|
13
|
+
return unless ::Sidekiq::Client.push(@options.merge('args' => [payload])).nil?
|
14
|
+
|
15
|
+
raise(StandardError, 'Unable to push the job to Sidekiq')
|
14
16
|
end
|
15
17
|
|
16
18
|
include ::Sidekiq::Worker
|
17
19
|
|
18
20
|
def perform(*args)
|
19
|
-
|
20
|
-
|
21
|
-
rescue
|
22
|
-
# Raise the exception so Sidekiq can track the errored job
|
23
|
-
# and retry it
|
24
|
-
raise
|
25
|
-
end
|
21
|
+
Rollbar.process_from_async_handler(*args)
|
22
|
+
|
23
|
+
# Do not rescue. Sidekiq will call the error handler.
|
26
24
|
end
|
27
25
|
end
|
28
26
|
end
|
@@ -4,12 +4,10 @@ require 'sucker_punch/version'
|
|
4
4
|
module Rollbar
|
5
5
|
module Delay
|
6
6
|
class SuckerPunch
|
7
|
-
|
8
7
|
include ::SuckerPunch::Job
|
9
8
|
|
10
9
|
class << self
|
11
|
-
attr_accessor :perform_proc
|
12
|
-
attr_accessor :ready
|
10
|
+
attr_accessor :perform_proc, :ready
|
13
11
|
end
|
14
12
|
|
15
13
|
self.ready = false
|
@@ -17,11 +15,11 @@ module Rollbar
|
|
17
15
|
def self.setup
|
18
16
|
major_version = ::SuckerPunch::VERSION.split.first.to_i
|
19
17
|
|
20
|
-
if major_version > 1
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
self.perform_proc = if major_version > 1
|
19
|
+
proc { |payload| perform_async(payload) }
|
20
|
+
else
|
21
|
+
proc { |payload| new.async.perform(payload) }
|
22
|
+
end
|
25
23
|
|
26
24
|
self.ready = true
|
27
25
|
end
|
@@ -33,20 +31,17 @@ module Rollbar
|
|
33
31
|
end
|
34
32
|
|
35
33
|
def perform(*args)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
# their own exception handler for SuckerPunch
|
48
|
-
raise
|
49
|
-
end
|
34
|
+
Rollbar.process_from_async_handler(*args)
|
35
|
+
|
36
|
+
# SuckerPunch can configure an exception handler with:
|
37
|
+
#
|
38
|
+
# SuckerPunch.exception_handler { # do something here }
|
39
|
+
#
|
40
|
+
# This is just passed to Celluloid.exception_handler which will
|
41
|
+
# push the reiceved block to an array of handlers, by default empty, [].
|
42
|
+
#
|
43
|
+
|
44
|
+
# Do not rescue. SuckerPunch will call the error handler.
|
50
45
|
end
|
51
46
|
end
|
52
47
|
end
|