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.
Files changed (238) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +18 -0
  3. data/.github/pull_request_template.md +34 -0
  4. data/.github/workflows/ci.yml +67 -0
  5. data/.gitignore +3 -1
  6. data/.rubocop.yml +206 -7
  7. data/Appraisals +10 -10
  8. data/CHANGELOG.md +257 -3
  9. data/Gemfile +74 -13
  10. data/README.md +38 -833
  11. data/Rakefile +0 -0
  12. data/THANKS.md +1 -0
  13. data/data/rollbar.snippet.js +1 -1
  14. data/docs/configuration.md +64 -3
  15. data/docs/plugins.md +46 -0
  16. data/gemfiles/rails50.gemfile +56 -0
  17. data/gemfiles/rails51.gemfile +57 -0
  18. data/gemfiles/rails52.gemfile +56 -0
  19. data/gemfiles/rails60.gemfile +52 -0
  20. data/gemfiles/rails61.gemfile +52 -0
  21. data/gemfiles/rails70.gemfile +52 -0
  22. data/gemfiles/rails71.gemfile +52 -0
  23. data/lib/generators/rollbar/rollbar_generator.rb +24 -20
  24. data/lib/generators/rollbar/templates/{initializer.rb → initializer.erb} +19 -5
  25. data/lib/rails/rollbar_runner.rb +26 -22
  26. data/lib/rollbar/capistrano.rb +78 -38
  27. data/lib/rollbar/capistrano3.rb +62 -1
  28. data/lib/rollbar/capistrano_tasks.rb +166 -0
  29. data/lib/rollbar/configuration.rb +291 -71
  30. data/lib/rollbar/delay/active_job.rb +17 -0
  31. data/lib/rollbar/delay/delayed_job.rb +23 -0
  32. data/lib/rollbar/delay/girl_friday.rb +4 -9
  33. data/lib/rollbar/delay/resque.rb +3 -6
  34. data/lib/rollbar/delay/shoryuken.rb +36 -0
  35. data/lib/rollbar/delay/sidekiq.rb +6 -8
  36. data/lib/rollbar/delay/sucker_punch.rb +17 -22
  37. data/lib/rollbar/delay/thread.rb +74 -3
  38. data/lib/rollbar/deploy.rb +91 -0
  39. data/lib/rollbar/encoding/encoder.rb +22 -11
  40. data/lib/rollbar/encoding.rb +2 -7
  41. data/lib/rollbar/exception_reporter.rb +36 -12
  42. data/lib/rollbar/item/backtrace.rb +118 -0
  43. data/lib/rollbar/item/frame.rb +121 -0
  44. data/lib/rollbar/item/locals.rb +103 -0
  45. data/lib/rollbar/item.rb +314 -0
  46. data/lib/rollbar/js.rb +0 -28
  47. data/lib/rollbar/json.rb +7 -55
  48. data/lib/rollbar/language_support.rb +7 -19
  49. data/lib/rollbar/lazy_store.rb +8 -12
  50. data/lib/rollbar/logger.rb +71 -0
  51. data/lib/rollbar/logger_proxy.rb +18 -1
  52. data/lib/rollbar/middleware/js/json_value.rb +36 -0
  53. data/lib/rollbar/middleware/js.rb +297 -0
  54. data/lib/rollbar/middleware/rack/builder.rb +4 -4
  55. data/lib/rollbar/middleware/rack/test_session.rb +4 -4
  56. data/lib/rollbar/middleware/rack.rb +52 -0
  57. data/lib/rollbar/middleware/rails/rollbar.rb +19 -7
  58. data/lib/rollbar/middleware/rails/show_exceptions.rb +21 -9
  59. data/lib/rollbar/middleware/sinatra.rb +2 -40
  60. data/lib/rollbar/notifier/trace_with_bindings.rb +75 -0
  61. data/lib/rollbar/notifier.rb +913 -0
  62. data/lib/rollbar/plugin.rb +126 -0
  63. data/lib/rollbar/plugins/active_job.rb +54 -0
  64. data/lib/rollbar/plugins/basic_socket.rb +31 -0
  65. data/lib/rollbar/plugins/delayed_job/job_data.rb +50 -0
  66. data/lib/rollbar/plugins/delayed_job/plugin.rb +88 -0
  67. data/lib/rollbar/plugins/delayed_job.rb +12 -0
  68. data/lib/rollbar/plugins/error_context.rb +11 -0
  69. data/lib/rollbar/plugins/goalie.rb +65 -0
  70. data/lib/rollbar/plugins/rack.rb +18 -0
  71. data/lib/rollbar/plugins/rails/controller_methods.rb +56 -0
  72. data/lib/rollbar/plugins/rails/error_subscriber.rb +12 -0
  73. data/lib/rollbar/plugins/rails/railtie30.rb +18 -0
  74. data/lib/rollbar/plugins/rails/railtie32.rb +18 -0
  75. data/lib/rollbar/plugins/rails/railtie_mixin.rb +37 -0
  76. data/lib/rollbar/plugins/rails.rb +89 -0
  77. data/lib/rollbar/plugins/rake.rb +73 -0
  78. data/lib/rollbar/plugins/resque/failure.rb +39 -0
  79. data/lib/rollbar/plugins/resque.rb +11 -0
  80. data/lib/rollbar/plugins/sidekiq/plugin.rb +77 -0
  81. data/lib/rollbar/plugins/sidekiq.rb +37 -0
  82. data/lib/rollbar/plugins/thread.rb +14 -0
  83. data/lib/rollbar/plugins/validations.rb +45 -0
  84. data/lib/rollbar/plugins.rb +47 -0
  85. data/lib/rollbar/rails.rb +0 -1
  86. data/lib/rollbar/rake_tasks.rb +4 -66
  87. data/lib/rollbar/request_data_extractor.rb +157 -117
  88. data/lib/rollbar/rollbar_test.rb +38 -0
  89. data/lib/rollbar/scrubbers/params.rb +133 -0
  90. data/lib/rollbar/scrubbers/url.rb +90 -35
  91. data/lib/rollbar/scrubbers.rb +13 -0
  92. data/lib/rollbar/truncation/frames_strategy.rb +2 -1
  93. data/lib/rollbar/truncation/min_body_strategy.rb +3 -4
  94. data/lib/rollbar/truncation/mixin.rb +1 -1
  95. data/lib/rollbar/truncation/remove_any_key_strategy.rb +126 -0
  96. data/lib/rollbar/truncation/remove_extra_strategy.rb +37 -0
  97. data/lib/rollbar/truncation/remove_request_strategy.rb +21 -0
  98. data/lib/rollbar/truncation/strings_strategy.rb +6 -5
  99. data/lib/rollbar/truncation.rb +10 -4
  100. data/lib/rollbar/util/hash.rb +37 -6
  101. data/lib/rollbar/util/ip_anonymizer.rb +33 -0
  102. data/lib/rollbar/util/ip_obfuscator.rb +1 -1
  103. data/lib/rollbar/util.rb +101 -55
  104. data/lib/rollbar/version.rb +1 -1
  105. data/lib/rollbar.rb +91 -879
  106. data/lib/tasks/benchmark.rake +104 -0
  107. data/lib/tasks/tasks.rake +3 -3
  108. data/rollbar.gemspec +21 -32
  109. data/spec/support/rollbar_api.rb +67 -0
  110. metadata +78 -439
  111. data/.travis.yml +0 -155
  112. data/gemfiles/rails30.gemfile +0 -20
  113. data/gemfiles/rails31.gemfile +0 -16
  114. data/gemfiles/rails32.gemfile +0 -17
  115. data/gemfiles/rails40.gemfile +0 -17
  116. data/gemfiles/rails41.gemfile +0 -15
  117. data/gemfiles/rails42.gemfile +0 -15
  118. data/lib/rollbar/active_job.rb +0 -11
  119. data/lib/rollbar/active_record_extension.rb +0 -14
  120. data/lib/rollbar/core_ext/basic_socket.rb +0 -7
  121. data/lib/rollbar/core_ext/thread.rb +0 -9
  122. data/lib/rollbar/delayed_job.rb +0 -78
  123. data/lib/rollbar/encoding/legacy_encoder.rb +0 -20
  124. data/lib/rollbar/goalie.rb +0 -33
  125. data/lib/rollbar/js/frameworks/rails.rb +0 -29
  126. data/lib/rollbar/js/frameworks.rb +0 -6
  127. data/lib/rollbar/js/middleware.rb +0 -129
  128. data/lib/rollbar/js/version.rb +0 -5
  129. data/lib/rollbar/json/default.rb +0 -11
  130. data/lib/rollbar/json/oj.rb +0 -15
  131. data/lib/rollbar/rack.rb +0 -9
  132. data/lib/rollbar/rails/controller_methods.rb +0 -40
  133. data/lib/rollbar/railtie.rb +0 -46
  134. data/lib/rollbar/rake.rb +0 -38
  135. data/lib/rollbar/sidekiq.rb +0 -40
  136. data/lib/rollbar/tasks/rollbar.cap +0 -45
  137. data/spec/cacert.pem +0 -3988
  138. data/spec/controllers/home_controller_spec.rb +0 -455
  139. data/spec/delay/sidekiq_spec.rb +0 -61
  140. data/spec/delay/sucker_punch_spec.rb +0 -25
  141. data/spec/delayed/backend/test.rb +0 -139
  142. data/spec/delayed/serialization/test.rb +0 -0
  143. data/spec/dummyapp/.gitignore +0 -73
  144. data/spec/dummyapp/Rakefile +0 -7
  145. data/spec/dummyapp/app/assets/javascripts/application.js +0 -3
  146. data/spec/dummyapp/app/assets/stylesheets/application.css.scss +0 -37
  147. data/spec/dummyapp/app/controllers/application_controller.rb +0 -3
  148. data/spec/dummyapp/app/controllers/home_controller.rb +0 -60
  149. data/spec/dummyapp/app/controllers/users_controller.rb +0 -17
  150. data/spec/dummyapp/app/helpers/.gitkeep +0 -0
  151. data/spec/dummyapp/app/mailers/.gitkeep +0 -0
  152. data/spec/dummyapp/app/models/.gitkeep +0 -0
  153. data/spec/dummyapp/app/models/user.rb +0 -7
  154. data/spec/dummyapp/app/views/devise/registrations/edit.html.erb +0 -27
  155. data/spec/dummyapp/app/views/devise/registrations/new.html.erb +0 -20
  156. data/spec/dummyapp/app/views/devise/shared/_links.html.erb +0 -25
  157. data/spec/dummyapp/app/views/home/cause_exception.html.erb +0 -1
  158. data/spec/dummyapp/app/views/home/index.html.erb +0 -4
  159. data/spec/dummyapp/app/views/home/report_exception.html.erb +0 -1
  160. data/spec/dummyapp/app/views/js/test.html.erb +0 -1
  161. data/spec/dummyapp/app/views/layouts/_messages.html.erb +0 -5
  162. data/spec/dummyapp/app/views/layouts/_navigation.html.erb +0 -21
  163. data/spec/dummyapp/app/views/layouts/application.html.erb +0 -25
  164. data/spec/dummyapp/app/views/layouts/simple.html.erb +0 -18
  165. data/spec/dummyapp/app/views/users/index.html.erb +0 -8
  166. data/spec/dummyapp/app/views/users/show.html.erb +0 -3
  167. data/spec/dummyapp/config/application.rb +0 -59
  168. data/spec/dummyapp/config/boot.rb +0 -10
  169. data/spec/dummyapp/config/database.yml +0 -25
  170. data/spec/dummyapp/config/environment.rb +0 -5
  171. data/spec/dummyapp/config/environments/development.rb +0 -37
  172. data/spec/dummyapp/config/environments/production.rb +0 -67
  173. data/spec/dummyapp/config/environments/test.rb +0 -37
  174. data/spec/dummyapp/config/initializers/backtrace_silencers.rb +0 -7
  175. data/spec/dummyapp/config/initializers/inflections.rb +0 -15
  176. data/spec/dummyapp/config/initializers/mime_types.rb +0 -5
  177. data/spec/dummyapp/config/initializers/rollbar.rb +0 -23
  178. data/spec/dummyapp/config/initializers/secret_token.rb +0 -7
  179. data/spec/dummyapp/config/initializers/session_store.rb +0 -8
  180. data/spec/dummyapp/config/initializers/wrap_parameters.rb +0 -16
  181. data/spec/dummyapp/config/locales/devise.en.yml +0 -58
  182. data/spec/dummyapp/config/locales/en.yml +0 -5
  183. data/spec/dummyapp/config/routes.rb +0 -17
  184. data/spec/dummyapp/config.ru +0 -4
  185. data/spec/dummyapp/db/migrate/20121121184652_devise_create_users.rb +0 -46
  186. data/spec/dummyapp/db/migrate/20121121184654_add_name_to_users.rb +0 -5
  187. data/spec/dummyapp/db/schema.rb +0 -35
  188. data/spec/dummyapp/db/seeds.rb +0 -12
  189. data/spec/dummyapp/lib/assets/.gitkeep +0 -0
  190. data/spec/dummyapp/public/404.html +0 -26
  191. data/spec/dummyapp/public/422.html +0 -26
  192. data/spec/dummyapp/public/500.html +0 -25
  193. data/spec/dummyapp/public/favicon.ico +0 -0
  194. data/spec/dummyapp/script/rails +0 -6
  195. data/spec/fixtures/file1 +0 -1
  196. data/spec/fixtures/file2 +0 -1
  197. data/spec/fixtures/payloads/message.json +0 -25
  198. data/spec/fixtures/payloads/sample.trace.json +0 -275
  199. data/spec/fixtures/payloads/sample.trace_chain.json +0 -530
  200. data/spec/generators/rollbar/rollbar_generator_spec.rb +0 -24
  201. data/spec/requests/home_spec.rb +0 -49
  202. data/spec/rollbar/active_job_spec.rb +0 -33
  203. data/spec/rollbar/configuration_spec.rb +0 -24
  204. data/spec/rollbar/delay/girl_friday_spec.rb +0 -41
  205. data/spec/rollbar/delay/resque_spec.rb +0 -37
  206. data/spec/rollbar/delay/thread_spec.rb +0 -27
  207. data/spec/rollbar/delayed_job/job_data.rb +0 -35
  208. data/spec/rollbar/delayed_job_spec.rb +0 -90
  209. data/spec/rollbar/encoding/encoder_spec.rb +0 -63
  210. data/spec/rollbar/js/frameworks/rails_spec.rb +0 -19
  211. data/spec/rollbar/js/middleware_spec.rb +0 -162
  212. data/spec/rollbar/json/oj_spec.rb +0 -18
  213. data/spec/rollbar/json_spec.rb +0 -110
  214. data/spec/rollbar/lazy_store_spec.rb +0 -99
  215. data/spec/rollbar/logger_proxy_spec.rb +0 -34
  216. data/spec/rollbar/middleware/rack/builder_spec.rb +0 -151
  217. data/spec/rollbar/middleware/sinatra_spec.rb +0 -197
  218. data/spec/rollbar/rake_spec.rb +0 -34
  219. data/spec/rollbar/request_data_extractor_spec.rb +0 -82
  220. data/spec/rollbar/scrubbers/url_spec.rb +0 -111
  221. data/spec/rollbar/sidekiq_spec.rb +0 -90
  222. data/spec/rollbar/truncation/frames_strategy_spec.rb +0 -70
  223. data/spec/rollbar/truncation/min_body_strategy_spec.rb +0 -57
  224. data/spec/rollbar/truncation/strings_strategy_spec.rb +0 -89
  225. data/spec/rollbar/truncation_spec.rb +0 -27
  226. data/spec/rollbar/util/hash_spec.rb +0 -22
  227. data/spec/rollbar/util_spec.rb +0 -19
  228. data/spec/rollbar_bc_spec.rb +0 -380
  229. data/spec/rollbar_spec.rb +0 -2067
  230. data/spec/spec_helper.rb +0 -49
  231. data/spec/support/cause_exception.rb +0 -1
  232. data/spec/support/encoding_helpers.rb +0 -8
  233. data/spec/support/encodings/iso_8859_9 +0 -1
  234. data/spec/support/fixture_helpers.rb +0 -10
  235. data/spec/support/get_ip_raising.rb +0 -7
  236. data/spec/support/helpers.rb +0 -5
  237. data/spec/support/notifier_helpers.rb +0 -36
  238. data/spec/support/shared_contexts.rb +0 -12
@@ -0,0 +1,73 @@
1
+ Rollbar.plugins.define('rake') do
2
+ require_dependency('rake')
3
+ dependency { !configuration.disable_monkey_patch }
4
+ dependency { defined?(Rake) }
5
+
6
+ module Rollbar
7
+ module Rake
8
+ class << self
9
+ attr_accessor :patched
10
+ end
11
+
12
+ module Handler
13
+ def self.included(base)
14
+ base.class_eval do
15
+ alias_method :orig_display_error_message, :display_error_message
16
+ alias_method :display_error_message, :display_error_message_with_rollbar
17
+ end
18
+ end
19
+
20
+ def display_error_message_with_rollbar(ex)
21
+ Rollbar.error(ex, :use_exception_level_filters => true)
22
+ orig_display_error_message(ex)
23
+ end
24
+ end
25
+
26
+ def self.patch!
27
+ unless patch?
28
+ skip_patch
29
+
30
+ return
31
+ end
32
+
33
+ ::Rake.application.instance_eval do
34
+ class << self
35
+ include ::Rollbar::Rake::Handler
36
+ end
37
+ end
38
+
39
+ self.patched = true
40
+ end
41
+
42
+ def self.skip_patch
43
+ warn('[Rollbar] Rollbar is disabled for Rake tasks since your Rake ' \
44
+ 'version is under 0.9.x. Please upgrade to 0.9.x or higher.')
45
+ end
46
+
47
+ def self.patch?
48
+ return false if patched?
49
+ return false unless rake_version
50
+
51
+ major, minor, = rake_version.split('.').map(&:to_i)
52
+
53
+ major > 0 || major == 0 && minor > 8
54
+ end
55
+
56
+ def self.patched?
57
+ patched
58
+ end
59
+
60
+ def self.rake_version
61
+ if Object.const_defined?('RAKEVERSION')
62
+ RAKEVERSION
63
+ elsif ::Rake.const_defined?('VERSION')
64
+ ::Rake::VERSION
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ execute do
71
+ Rollbar::Rake.patch!
72
+ end
73
+ end
@@ -0,0 +1,39 @@
1
+ require 'rollbar'
2
+
3
+ module Resque
4
+ module Failure
5
+ # Falure class to use in Resque in order to send
6
+ # Resque errors to the Rollbar API
7
+ class Rollbar < Base
8
+ def save
9
+ payload_with_options =
10
+ if use_exception_level_filters?
11
+ payload.merge(:use_exception_level_filters => true)
12
+ else
13
+ payload
14
+ end
15
+
16
+ rollbar.error(exception, payload_with_options)
17
+ end
18
+
19
+ private
20
+
21
+ # We want to disable async reporting since original
22
+ # resque-rollbar implementation disabled it.
23
+ def rollbar
24
+ notifier = ::Rollbar.notifier.scope
25
+ notifier.configuration.use_async = false
26
+
27
+ notifier
28
+ end
29
+
30
+ def use_exception_level_filters?
31
+ Gem::Version.new(rollbar_version) > Gem::Version.new('1.3.0')
32
+ end
33
+
34
+ def rollbar_version
35
+ ::Rollbar::VERSION
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,11 @@
1
+ Rollbar.plugins.define('resque') do
2
+ require_dependency('resque')
3
+
4
+ # We want to have Resque::Failure::Rollbar loaded before
5
+ # possible initializers, so the users can use the class
6
+ # when configuring Rollbar::Failure.backend or
7
+ # Rollbar::Failure::Multiple.classes
8
+ execute! do
9
+ require 'rollbar/plugins/resque/failure'
10
+ end
11
+ end
@@ -0,0 +1,77 @@
1
+ require 'rollbar/scrubbers/params'
2
+
3
+ module Rollbar
4
+ class Sidekiq
5
+ PARAM_BLACKLIST = %w[backtrace error_backtrace error_message error_class].freeze
6
+
7
+ class ResetScope
8
+ def call(_worker, msg, _queue, &block)
9
+ Rollbar.reset_notifier! # clears scope
10
+
11
+ return yield unless Rollbar.configuration.sidekiq_use_scoped_block
12
+
13
+ Rollbar.scoped(Rollbar::Sidekiq.job_scope(msg), &block)
14
+ end
15
+ end
16
+
17
+ def self.handle_exception(msg, e)
18
+ return if skip_report?(msg, e)
19
+
20
+ Rollbar.scope(job_scope(msg)).error(e, :use_exception_level_filters => true)
21
+ end
22
+
23
+ def self.skip_report?(msg, _e)
24
+ job_hash = job_hash_from_msg(msg)
25
+
26
+ return false if job_hash.nil?
27
+
28
+ # when rollbar middleware catches, sidekiq's retry_job processor hasn't set
29
+ # the retry_count for the current job yet, so adding 1 gives the actual retry count
30
+ actual_retry_count = job_hash.fetch('retry_count', -1) + 1
31
+ job_hash['retry'] && actual_retry_count < ::Rollbar.configuration.sidekiq_threshold
32
+ end
33
+
34
+ def self.job_scope(msg)
35
+ scope = {
36
+ :framework => "Sidekiq: #{::Sidekiq::VERSION}"
37
+ }
38
+ job_hash = job_hash_from_msg(msg)
39
+
40
+ unless job_hash.nil?
41
+ params = job_hash.reject { |k| PARAM_BLACKLIST.include?(k) }
42
+ scope[:request] = { :params => scrub_params(params) }
43
+ scope[:context] = params['class']
44
+ scope[:queue] = params['queue']
45
+ end
46
+
47
+ scope
48
+ end
49
+
50
+ def self.scrub_params(params)
51
+ options = {
52
+ :params => params,
53
+ :config => Rollbar.configuration.scrub_fields,
54
+ :whitelist => Rollbar.configuration.scrub_whitelist
55
+ }
56
+
57
+ Rollbar::Scrubbers::Params.call(options)
58
+ end
59
+
60
+ # see https://github.com/mperham/sidekiq/wiki/Middleware#server-middleware
61
+ def call(_worker, msg, _queue, &block)
62
+ Rollbar.reset_notifier! # clears scope
63
+
64
+ return yield unless Rollbar.configuration.sidekiq_use_scoped_block
65
+
66
+ Rollbar.scoped(Rollbar::Sidekiq.job_scope(msg), &block)
67
+ rescue Exception => e # rubocop:disable Lint/RescueException
68
+ Rollbar::Sidekiq.handle_exception(msg, e)
69
+ raise
70
+ end
71
+
72
+ def self.job_hash_from_msg(msg)
73
+ msg && (msg[:job] || msg)
74
+ end
75
+ private_class_method :job_hash_from_msg
76
+ end
77
+ end
@@ -0,0 +1,37 @@
1
+ Rollbar.plugins.define('sidekiq >= 3') do
2
+ require_dependency('sidekiq')
3
+ dependency { !configuration.disable_monkey_patch }
4
+ dependency { defined?(Sidekiq) }
5
+ dependency { Sidekiq::VERSION.split('.')[0].to_i >= 3 }
6
+
7
+ execute do
8
+ require 'rollbar/plugins/sidekiq/plugin'
9
+
10
+ Sidekiq.configure_server do |config|
11
+ config.server_middleware do |chain|
12
+ chain.add Rollbar::Sidekiq::ResetScope
13
+ end
14
+
15
+ config.error_handlers << proc do |e, context, _sidekiq_config = nil|
16
+ Rollbar::Sidekiq.handle_exception(context, e)
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ Rollbar.plugins.define('sidekiq < 3') do
23
+ require_dependency('sidekiq')
24
+ dependency { !configuration.disable_monkey_patch }
25
+ dependency { defined?(Sidekiq) }
26
+ dependency { Sidekiq::VERSION.split('.')[0].to_i < 3 }
27
+
28
+ execute do
29
+ require 'rollbar/plugins/sidekiq/plugin'
30
+
31
+ Sidekiq.configure_server do |config|
32
+ config.server_middleware do |chain|
33
+ chain.add Rollbar::Sidekiq
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,14 @@
1
+ Rollbar.plugins.define('thread') do
2
+ module Rollbar
3
+ module ThreadPlugin
4
+ def initialize(*args)
5
+ self[:_rollbar_notifier] ||= Rollbar.notifier.scope
6
+ super
7
+ end
8
+ end
9
+ end
10
+
11
+ execute do
12
+ Thread.send(:prepend, Rollbar::ThreadPlugin)
13
+ end
14
+ end
@@ -0,0 +1,45 @@
1
+ Rollbar.plugins.define('active_model') do
2
+ dependency { !configuration.disable_monkey_patch }
3
+ dependency { defined?(ActiveModel::Validations) }
4
+ dependency do
5
+ require 'active_model/version'
6
+
7
+ ActiveModel::VERSION::MAJOR >= 3
8
+ end
9
+
10
+ execute! do
11
+ module Rollbar
12
+ # Module that defines methods to be used by instances using
13
+ # ActiveModel::Validations
14
+ # The name is ActiveRecordExtension in order to not break backwards
15
+ # compatibility, although probably it should be named
16
+ # Rollbar::ValidationsExtension or similar
17
+ module ActiveRecordExtension
18
+ def report_validation_errors_to_rollbar
19
+ errors.full_messages.each do |error|
20
+ Rollbar.log_info(
21
+ "[Rollbar] Reporting form validation error: #{error} for #{self}"
22
+ )
23
+ Rollbar.warning("Form Validation Error: #{error} for #{self}")
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ execute! do
31
+ ActiveModel::Validations.module_eval do
32
+ include Rollbar::ActiveRecordExtension
33
+ end
34
+
35
+ active_support_was_defined = defined?(ActiveRecord::Base)
36
+
37
+ ActiveSupport.on_load(:active_record) do
38
+ if active_support_was_defined
39
+ ActiveRecord::Base.class_eval do
40
+ include Rollbar::ActiveRecordExtension
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,47 @@
1
+ require 'rollbar/plugin'
2
+
3
+ module Rollbar
4
+ # Stores the available plugin definitions and loads them
5
+ class Plugins
6
+ attr_reader :collection
7
+
8
+ def initialize
9
+ @collection = []
10
+ end
11
+
12
+ def require_all
13
+ Dir.glob(plugin_files).each do |file|
14
+ require file.to_s
15
+ end
16
+ end
17
+
18
+ def plugin_files
19
+ File.expand_path('../plugins/*.rb', __FILE__)
20
+ end
21
+
22
+ def define(name, &block)
23
+ return if loaded?(name)
24
+
25
+ plugin = Rollbar::Plugin.new(name)
26
+ collection << plugin
27
+
28
+ plugin.instance_eval(&block)
29
+ end
30
+
31
+ def load!
32
+ collection.each do |plugin|
33
+ plugin.load! unless plugin.on_demand
34
+ end
35
+ end
36
+
37
+ def get(name)
38
+ collection.find { |plugin| plugin.name == name }
39
+ end
40
+
41
+ private
42
+
43
+ def loaded?(name)
44
+ collection.any? { |plugin| plugin.name == name }
45
+ end
46
+ end
47
+ end
data/lib/rollbar/rails.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  module Rollbar
2
2
  module Rails
3
-
4
3
  end
5
4
  end
@@ -1,71 +1,9 @@
1
- require 'rollbar'
2
-
3
1
  namespace :rollbar do
4
- desc "Verify your gem installation by sending a test exception to Rollbar"
2
+ desc 'Verify your gem installation by sending a test message to Rollbar'
5
3
  task :test => [:environment] do
6
- Rails.logger = defined?(ActiveSupport::TaggedLogging) ?
7
- ActiveSupport::TaggedLogging.new(Logger.new(STDOUT)) :
8
- Logger.new(STDOUT)
9
-
10
- Rails.logger.level = Logger::DEBUG
11
- Rollbar.preconfigure do |config|
12
- config.logger = Rails.logger
13
- end
14
-
15
- class RollbarTestingException < RuntimeError; end
16
-
17
- unless Rollbar.configuration.access_token
18
- puts "Rollbar needs an access token configured. Check the README for instructions."
19
- exit
20
- end
21
-
22
- Rollbar.error('Test error from rollbar:test')
23
-
24
- begin
25
- require './app/controllers/application_controller'
26
- rescue LoadError
27
- end
28
-
29
- unless defined?(ApplicationController)
30
- puts "No ApplicationController found, using ActionController::Base instead"
31
- class ApplicationController < ActionController::Base; end
32
- end
33
-
34
- puts "Setting up the controller."
35
- class ApplicationController
36
- prepend_before_filter :test_rollbar
37
- def test_rollbar
38
- puts "Raising RollbarTestingException to simulate app failure."
39
- raise RollbarTestingException.new, 'Testing rollbar with "rake rollbar:test". If you can see this, it works.'
40
- end
41
-
42
- def verify
43
- end
44
-
45
- def logger
46
- nil
47
- end
48
- end
49
-
50
- class RollbarTestController < ApplicationController; end
51
-
52
- Rails.application.routes_reloader.execute_if_updated
53
- Rails.application.routes.draw do
54
- get 'verify' => 'application#verify', :as => 'verify'
55
- end
56
-
57
- # from http://stackoverflow.com/questions/5270835/authlogic-activation-problems
58
- if defined? Authlogic
59
- Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
60
- end
61
-
62
- puts "Processing..."
63
- protocol = (defined? Rails.application.config.force_ssl && Rails.application.config.force_ssl) ? 'https' : 'http'
64
- env = Rack::MockRequest.env_for("#{protocol}://www.example.com/verify")
65
- status, headers, response = Rails.application.call(env)
4
+ rollbar_dir = Gem.loaded_specs['rollbar'].full_gem_path
5
+ require "#{rollbar_dir}/lib/rollbar/rollbar_test"
66
6
 
67
- unless status.to_i == 500
68
- puts "Test failed! You may have a configuration issue, or you could be using a gem that's blocking the test. Contact support@rollbar.com if you need help troubleshooting."
69
- end
7
+ RollbarTest.run
70
8
  end
71
9
  end