rollbar 3.0.1 → 3.2.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.
@@ -640,7 +640,11 @@ module Rollbar
640
640
  request = Net::HTTP::Post.new(uri.request_uri)
641
641
 
642
642
  request.body = pack_ruby260_bytes(body)
643
- request.add_field('X-Rollbar-Access-Token', access_token)
643
+
644
+ # Ensure the payload token will be used if the option is set.
645
+ unless (configuration.use_payload_access_token)
646
+ request.add_field('X-Rollbar-Access-Token', access_token)
647
+ end
644
648
 
645
649
  handle_net_retries { http.request(request) }
646
650
  end
@@ -9,7 +9,7 @@ Rollbar.plugins.define('sidekiq >= 3') do
9
9
 
10
10
  Sidekiq.configure_server do |config|
11
11
  config.server_middleware do |chain|
12
- chain.add Rollbar::Sidekiq::ClearScope
12
+ chain.add Rollbar::Sidekiq::ResetScope
13
13
  end
14
14
 
15
15
  config.error_handlers << proc do |e, context|
@@ -4,21 +4,39 @@ module Rollbar
4
4
  class Sidekiq
5
5
  PARAM_BLACKLIST = %w[backtrace error_backtrace error_message error_class].freeze
6
6
 
7
- class ClearScope
8
- def call(_worker, _msg, _queue)
9
- Rollbar.reset_notifier!
7
+ class ResetScope
8
+ def call(_worker, msg, _queue)
9
+ Rollbar.reset_notifier! # clears scope
10
10
 
11
- yield
11
+ return yield unless Rollbar.configuration.sidekiq_use_scoped_block
12
+
13
+ Rollbar.scoped(Rollbar::Sidekiq.job_scope(msg)) { yield }
12
14
  end
13
15
  end
14
16
 
15
- def self.handle_exception(ctx_hash, e)
16
- job_hash = ctx_hash && (ctx_hash[:job] || ctx_hash)
17
- return if skip_report?(job_hash, e)
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
18
33
 
34
+ def self.job_scope(msg)
19
35
  scope = {
20
36
  :framework => "Sidekiq: #{::Sidekiq::VERSION}"
21
37
  }
38
+ job_hash = job_hash_from_msg(msg)
39
+
22
40
  unless job_hash.nil?
23
41
  params = job_hash.reject { |k| PARAM_BLACKLIST.include?(k) }
24
42
  scope[:request] = { :params => scrub_params(params) }
@@ -26,7 +44,7 @@ module Rollbar
26
44
  scope[:queue] = params['queue']
27
45
  end
28
46
 
29
- Rollbar.scope(scope).error(e, :use_exception_level_filters => true)
47
+ scope
30
48
  end
31
49
 
32
50
  def self.scrub_params(params)
@@ -38,22 +56,21 @@ module Rollbar
38
56
  Rollbar::Scrubbers::Params.call(options)
39
57
  end
40
58
 
41
- def self.skip_report?(job_hash, _e)
42
- return false if job_hash.nil?
43
-
44
- # when rollbar middleware catches, sidekiq's retry_job processor hasn't set
45
- # the retry_count for the current job yet, so adding 1 gives the actual retry count
46
- actual_retry_count = job_hash.fetch('retry_count', -1) + 1
47
- job_hash['retry'] && actual_retry_count < ::Rollbar.configuration.sidekiq_threshold
48
- end
49
-
59
+ # see https://github.com/mperham/sidekiq/wiki/Middleware#server-middleware
50
60
  def call(_worker, msg, _queue)
51
- Rollbar.reset_notifier!
61
+ Rollbar.reset_notifier! # clears scope
52
62
 
53
- yield
63
+ return yield unless Rollbar.configuration.sidekiq_use_scoped_block
64
+
65
+ Rollbar.scoped(Rollbar::Sidekiq.job_scope(msg)) { yield }
54
66
  rescue Exception => e
55
67
  Rollbar::Sidekiq.handle_exception(msg, e)
56
68
  raise
57
69
  end
70
+
71
+ def self.job_hash_from_msg(msg)
72
+ msg && (msg[:job] || msg)
73
+ end
74
+ private_class_method :job_hash_from_msg
58
75
  end
59
76
  end
@@ -1,13 +1,14 @@
1
1
  Rollbar.plugins.define('thread') do
2
- execute do
3
- Thread.class_eval do
4
- def initialize_with_rollbar(*args, &block)
2
+ module Rollbar
3
+ module ThreadPlugin
4
+ def initialize(*args)
5
5
  self[:_rollbar_notifier] ||= Rollbar.notifier.scope
6
- initialize_without_rollbar(*args, &block)
6
+ super
7
7
  end
8
-
9
- alias_method :initialize_without_rollbar, :initialize
10
- alias_method :initialize, :initialize_with_rollbar
11
8
  end
12
9
  end
10
+
11
+ execute do
12
+ Thread.send(:prepend, Rollbar::ThreadPlugin) # rubocop:disable Lint/SendWithMixinArgument
13
+ end
13
14
  end
@@ -13,7 +13,7 @@ module Rollbar
13
13
  end
14
14
 
15
15
  def call(options = {})
16
- url = options[:url]
16
+ url = ascii_encode(options[:url])
17
17
 
18
18
  filter(url,
19
19
  build_regex(options[:scrub_fields]),
@@ -29,6 +29,20 @@ module Rollbar
29
29
 
30
30
  private
31
31
 
32
+ def ascii_encode(url)
33
+ # In some cases non-ascii characters won't be properly encoded, so we do it here.
34
+ #
35
+ # The standard encoders (the CGI and URI methods) are not reliable when the query string
36
+ # is already embedded in the full URL, but the inconsistencies are limited to issues
37
+ # with characters in the ascii range. (For example, the '#' if it appears in an unexpected place.)
38
+ # For escaping non-ascii, they are all OK, so we'll take care to skip the ascii chars.
39
+
40
+ return url if url.ascii_only?
41
+
42
+ # Iterate each char and only escape non-ascii characters.
43
+ url.each_char.map { |c| c.ascii_only? ? c : CGI.escape(c) }.join
44
+ end
45
+
32
46
  def build_whitelist_regex(whitelist)
33
47
  fields = whitelist.find_all { |f| f.is_a?(String) || f.is_a?(Symbol) }
34
48
  return unless fields.any?
@@ -1,3 +1,3 @@
1
1
  module Rollbar
2
- VERSION = '3.0.1'.freeze
2
+ VERSION = '3.2.0'.freeze
3
3
  end
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: 3.0.1
4
+ version: 3.2.0
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-10-14 00:00:00.000000000 Z
11
+ date: 2021-05-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Easy and powerful exception tracking for Ruby
14
14
  email:
@@ -20,10 +20,10 @@ extra_rdoc_files: []
20
20
  files:
21
21
  - ".codeclimate.yml"
22
22
  - ".github/pull_request_template.md"
23
+ - ".github/workflows/ci.yml"
23
24
  - ".gitignore"
24
25
  - ".gitmodules"
25
26
  - ".rubocop.yml"
26
- - ".travis.yml"
27
27
  - Appraisals
28
28
  - CHANGELOG.md
29
29
  - Gemfile
@@ -47,6 +47,7 @@ files:
47
47
  - gemfiles/rails51.gemfile
48
48
  - gemfiles/rails52.gemfile
49
49
  - gemfiles/rails60.gemfile
50
+ - gemfiles/rails61.gemfile
50
51
  - lib/generators/rollbar/rollbar_generator.rb
51
52
  - lib/generators/rollbar/templates/initializer.rb
52
53
  - lib/rails/rollbar_runner.rb
@@ -160,8 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
161
  - !ruby/object:Gem::Version
161
162
  version: '0'
162
163
  requirements: []
163
- rubyforge_project:
164
- rubygems_version: 2.7.7
164
+ rubygems_version: 3.1.4
165
165
  signing_key:
166
166
  specification_version: 4
167
167
  summary: Reports exceptions to Rollbar
data/.travis.yml DELETED
@@ -1,268 +0,0 @@
1
- sudo: false
2
- dist: trusty
3
- services:
4
- - redis-server
5
- language: ruby
6
-
7
- rvm:
8
- - 2.0.0
9
- - 2.1.0
10
- - 2.2.2
11
- - 2.3.8
12
- - 2.4.5
13
- - 2.5.3
14
- - 2.6.5
15
- - 2.7.0
16
- - rbx
17
- # Travis's own rvm installer is failing on JRuby builds, TODO: reenable when fixed.
18
- # - jruby-9.1.9.0
19
-
20
- #
21
- # # About legacy JRuby
22
- #
23
- # Legacy JRubies (jruby-18mode, jruby-19mode) have been disabled for some time by
24
- # listing all possible targets in either the exclude or allow_failures sections.
25
- # I have taken a look at getting them running, and have found that no valid
26
- # combination of dependencies is possible for Rails 3.0 and higher. It appears
27
- # Rails 2.2 is meant to work, though I haven't tried it.
28
- #
29
- # For Rails 3.0, it is possible to get a working bundle with all gem dependencies,
30
- # but the JDBC adapter gem needs an earlier version of ActiveSupport, and it will
31
- # fail at runtime.
32
- #
33
- # For Rails 3.1 and 3.2, Rack 1.3.x and higher require Ruby 2.x, while Rails 3.x will
34
- # not accept any 1.2.x version of Rack. Even if this could be resolved, one would
35
- # hit the above runtime issue amyway.
36
- #
37
- # # About current JRuby
38
- #
39
- # While current JRuby builds aim to be Ruby 2.5.x compatible, the JDBC adapter
40
- # gem is constrained to only Rails 5.0, 5.1 and 5.2 at this time. (Old versions
41
- # of the gem allow >= Rails 2.2, but in practice it will not work with Rails 3.0
42
- # and higher because of the ActiveSupport issue described above.) For as long as
43
- # the test suite relies on Rails and SqlLite, it is not possible to include
44
- # earlier Rails for JRuby.
45
-
46
- jdk:
47
- # These are the JDKs currently supported on Travis (Trusty - Ubuntu 14.04)
48
- - openjdk7
49
- - openjdk8
50
- - oraclejdk8
51
- - oraclejdk9
52
- gemfile:
53
- - gemfiles/rails30.gemfile
54
- - gemfiles/rails31.gemfile
55
- - gemfiles/rails32.gemfile
56
- - gemfiles/rails40.gemfile
57
- - gemfiles/rails41.gemfile
58
- - gemfiles/rails42.gemfile
59
- - gemfiles/rails50.gemfile
60
- - gemfiles/rails51.gemfile
61
- - gemfiles/rails52.gemfile
62
- - gemfiles/rails60.gemfile
63
- matrix:
64
- include: []
65
-
66
- allow_failures:
67
- - rvm: ruby-head
68
- - rvm: jruby-head
69
- # oraclejdk9 has a dependency issue that needs to be investigated
70
- - jdk: oraclejdk9
71
-
72
- exclude:
73
- # Don't run tests for non-jruby environments with the JDK.
74
- # NOTE: openjdk7 is missing from these exclusions so that Travis will run at least 1 build for the given rvm.
75
- - rvm: 2.0.0
76
- jdk: openjdk8
77
- - rvm: 2.0.0
78
- jdk: oraclejdk8
79
- - rvm: 2.0.0
80
- jdk: oraclejdk9
81
- - rvm: 2.1.0
82
- jdk: openjdk8
83
- - rvm: 2.1.0
84
- jdk: oraclejdk8
85
- - rvm: 2.1.0
86
- jdk: oraclejdk9
87
- - rvm: 2.2.2
88
- jdk: openjdk8
89
- - rvm: 2.2.2
90
- jdk: oraclejdk8
91
- - rvm: 2.2.2
92
- jdk: oraclejdk9
93
- - rvm: 2.3.8
94
- jdk: openjdk8
95
- - rvm: 2.3.8
96
- jdk: oraclejdk8
97
- - rvm: 2.3.8
98
- jdk: oraclejdk9
99
- - rvm: 2.4.5
100
- jdk: openjdk8
101
- - rvm: 2.4.5
102
- jdk: oraclejdk8
103
- - rvm: 2.4.5
104
- jdk: oraclejdk9
105
- - rvm: 2.5.3
106
- jdk: openjdk8
107
- - rvm: 2.5.3
108
- jdk: oraclejdk8
109
- - rvm: 2.5.3
110
- jdk: oraclejdk9
111
- - rvm: 2.6.5
112
- jdk: openjdk8
113
- - rvm: 2.6.5
114
- jdk: oraclejdk8
115
- - rvm: 2.6.5
116
- jdk: oraclejdk9
117
- - rvm: 2.7.0
118
- jdk: openjdk8
119
- - rvm: 2.7.0
120
- jdk: oraclejdk8
121
- - rvm: 2.7.0
122
- jdk: oraclejdk9
123
-
124
- - rvm: ruby-head
125
- jdk: openjdk8
126
- - rvm: ruby-head
127
- jdk: oraclejdk8
128
- - rvm: ruby-head
129
- jdk: oraclejdk9
130
- - rvm: rbx
131
- jdk: openjdk8
132
- - rvm: rbx
133
- jdk: oraclejdk8
134
- - rvm: rbx
135
- jdk: oraclejdk9
136
-
137
- # Rails 6.x requires Ruby 2.5.0 or higher
138
- - rvm: 2.2.2
139
- gemfile: gemfiles/rails60.gemfile
140
- - rvm: 2.3.8
141
- gemfile: gemfiles/rails60.gemfile
142
- - rvm: 2.4.5
143
- gemfile: gemfiles/rails60.gemfile
144
- # Rails 5.x requires Ruby 2.2.2 or higher
145
- - rvm: 2.0.0
146
- gemfile: gemfiles/rails50.gemfile
147
- - rvm: 2.0.0
148
- gemfile: gemfiles/rails51.gemfile
149
- - rvm: 2.0.0
150
- gemfile: gemfiles/rails52.gemfile
151
- - rvm: 2.0.0
152
- gemfile: gemfiles/rails60.gemfile
153
- # Rails 5.x requires Ruby 2.2.2 or higher
154
- - rvm: 2.1.0
155
- gemfile: gemfiles/rails50.gemfile
156
- - rvm: 2.1.0
157
- gemfile: gemfiles/rails51.gemfile
158
- - rvm: 2.1.0
159
- gemfile: gemfiles/rails52.gemfile
160
- - rvm: 2.1.0
161
- gemfile: gemfiles/rails60.gemfile
162
- # MRI 2.2.2 supports Rails 3.2.x and higher, except Rails 5.2.4 and higher*
163
- # * ActionDispatch 5.2.4 uses Ruby 3.x safe navigation operator.
164
- - rvm: 2.2.2
165
- gemfile: gemfiles/rails30.gemfile
166
- - rvm: 2.2.2
167
- gemfile: gemfiles/rails31.gemfile
168
- - rvm: 2.2.2
169
- gemfile: gemfiles/rails52.gemfile
170
- # MRI 2.3.x supports Rails 4.0.x and higher
171
- - rvm: 2.3.8
172
- gemfile: gemfiles/rails30.gemfile
173
- - rvm: 2.3.8
174
- gemfile: gemfiles/rails31.gemfile
175
- - rvm: 2.3.8
176
- gemfile: gemfiles/rails32.gemfile
177
- - rvm: 2.3.8
178
- gemfile: gemfiles/rails40.gemfile
179
- - rvm: 2.3.8
180
- gemfile: gemfiles/rails41.gemfile
181
- # MRI 2.4.x and higher (e.g. 2.5.x, 2.6.x, etc) supports Rails 4.2.8 and higher
182
- # Rails lower than 4.2.8 is incompatible with Ruby 2.4 Integer class
183
- - rvm: 2.4.5
184
- gemfile: gemfiles/rails30.gemfile
185
- - rvm: 2.4.5
186
- gemfile: gemfiles/rails31.gemfile
187
- - rvm: 2.4.5
188
- gemfile: gemfiles/rails32.gemfile
189
- - rvm: 2.4.5
190
- gemfile: gemfiles/rails40.gemfile
191
- - rvm: 2.4.5
192
- gemfile: gemfiles/rails41.gemfile
193
- - rvm: 2.5.3
194
- gemfile: gemfiles/rails30.gemfile
195
- - rvm: 2.5.3
196
- gemfile: gemfiles/rails31.gemfile
197
- - rvm: 2.5.3
198
- gemfile: gemfiles/rails32.gemfile
199
- - rvm: 2.5.3
200
- gemfile: gemfiles/rails40.gemfile
201
- - rvm: 2.5.3
202
- gemfile: gemfiles/rails41.gemfile
203
- - rvm: 2.6.5
204
- gemfile: gemfiles/rails30.gemfile
205
- - rvm: 2.6.5
206
- gemfile: gemfiles/rails31.gemfile
207
- - rvm: 2.6.5
208
- gemfile: gemfiles/rails32.gemfile
209
- - rvm: 2.6.5
210
- gemfile: gemfiles/rails40.gemfile
211
- - rvm: 2.6.5
212
- gemfile: gemfiles/rails41.gemfile
213
- - rvm: 2.6.5
214
- gemfile: gemfiles/rails42.gemfile
215
- # Rails 6.x tries to be compatible with Ruby 2.7, though
216
- # it still throws a lot of warnings. No point testing earlier
217
- # Rails with Ruby 2.7.
218
- - rvm: 2.7.0
219
- gemfile: gemfiles/rails30.gemfile
220
- - rvm: 2.7.0
221
- gemfile: gemfiles/rails31.gemfile
222
- - rvm: 2.7.0
223
- gemfile: gemfiles/rails32.gemfile
224
- - rvm: 2.7.0
225
- gemfile: gemfiles/rails40.gemfile
226
- - rvm: 2.7.0
227
- gemfile: gemfiles/rails41.gemfile
228
- - rvm: 2.7.0
229
- gemfile: gemfiles/rails42.gemfile
230
- - rvm: 2.7.0
231
- gemfile: gemfiles/rails50.gemfile
232
- - rvm: 2.7.0
233
- gemfile: gemfiles/rails51.gemfile
234
- - rvm: 2.7.0
235
- gemfile: gemfiles/rails52.gemfile
236
- # JRuby JDBC Adapter is only compatible with Rails >= 5.x
237
- - rvm: jruby-9.1.9.0
238
- gemfile: gemfiles/rails30.gemfile
239
- - rvm: jruby-9.1.9.0
240
- gemfile: gemfiles/rails31.gemfile
241
- - rvm: jruby-9.1.9.0
242
- gemfile: gemfiles/rails32.gemfile
243
- - rvm: jruby-9.1.9.0
244
- gemfile: gemfiles/rails40.gemfile
245
- - rvm: jruby-9.1.9.0
246
- gemfile: gemfiles/rails41.gemfile
247
- - rvm: jruby-9.1.9.0
248
- gemfile: gemfiles/rails42.gemfile
249
- - rvm: rbx
250
- gemfile: gemfiles/rails30.gemfile
251
- - rvm: rbx
252
- gemfile: gemfiles/rails31.gemfile
253
- - rvm: rbx
254
- gemfile: gemfiles/rails32.gemfile
255
- - rvm: rbx
256
- gemfile: gemfiles/rails40.gemfile
257
- - rvm: rbx
258
- gemfile: gemfiles/rails41.gemfile
259
- - rvm: rbx
260
- gemfile: gemfiles/rails42.gemfile
261
- - rvm: rbx
262
- gemfile: gemfiles/rails50.gemfile
263
- - rvm: rbx
264
- gemfile: gemfiles/rails51.gemfile
265
- - rvm: rbx
266
- gemfile: gemfiles/rails52.gemfile
267
- - rvm: rbx
268
- gemfile: gemfiles/rails60.gemfile