rollbar 2.23.2 → 2.24.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 +4 -4
- data/.rubocop.yml +4 -0
- data/docs/configuration.md +1 -0
- data/lib/rails/rollbar_runner.rb +3 -1
- data/lib/rollbar/configuration.rb +13 -3
- data/lib/rollbar/notifier.rb +25 -15
- data/lib/rollbar/plugins/delayed_job/plugin.rb +7 -1
- data/lib/rollbar/request_data_extractor.rb +6 -1
- data/lib/rollbar/version.rb +1 -1
- data/rollbar.gemspec +1 -0
- data/spec/support/rollbar_api.rb +67 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1848033c2fc853846ba902fbe4dc6095ad17a6e27595a3937484a6036154b76
|
4
|
+
data.tar.gz: a42d4a1274624ea5991b66b0df1ce7031d699390c5dcf574b98d8fe03ea5519d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d71b0e452e917b566e48a292368a242404c2d26e91c011f641f1fb7bde2b05ee8bd88a9af6d595bf6581cea17d5d4a996af63104c4ea55a19de564760b4f7f3
|
7
|
+
data.tar.gz: b7ec97dfa2625823709eba27b5252706fce661877b9e4338595228c901e5766ab9752a5103a87f929d7af8ae9c687a978f7630d93d0aee5611ab58e5771ccd2c
|
data/.rubocop.yml
CHANGED
@@ -69,6 +69,10 @@ Style/FrozenStringLiteralComment:
|
|
69
69
|
# throughout the project, in order to prepare for a future Ruby 3.x.
|
70
70
|
Enabled: false
|
71
71
|
|
72
|
+
Style/SafeNavigation:
|
73
|
+
# Not available in Ruby < 2.3.
|
74
|
+
Enabled: false
|
75
|
+
|
72
76
|
#
|
73
77
|
# Performance cops are opt in, and `Enabled: true` is always required.
|
74
78
|
# Full list is here: https://github.com/rubocop-hq/rubocop-performance/tree/master/lib/rubocop/cop/performance
|
data/docs/configuration.md
CHANGED
@@ -129,6 +129,7 @@ An array of backup handlers if the async handlers fails. Each should respond to
|
|
129
129
|
|
130
130
|
For use with `write_to_file`. Indicates location of the rollbar log file being
|
131
131
|
tracked by [rollbar-agent](https://github.com/rollbar/rollbar-agent).
|
132
|
+
Enable `files_with_pid_name_enabled` if you want to have different files for each process(only works if extension `rollbar`)
|
132
133
|
|
133
134
|
### framework
|
134
135
|
|
data/lib/rails/rollbar_runner.rb
CHANGED
@@ -39,7 +39,7 @@ module Rails
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def eval_runner
|
42
|
-
if Rails.version >= '5.1.0'
|
42
|
+
if Gem::Version.new(Rails.version) >= Gem::Version.new('5.1.0')
|
43
43
|
rails5_runner
|
44
44
|
else
|
45
45
|
legacy_runner
|
@@ -55,6 +55,8 @@ module Rails
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def rails5_runner
|
58
|
+
require 'rails/command'
|
59
|
+
|
58
60
|
Rails::Command.invoke 'runner', ARGV
|
59
61
|
end
|
60
62
|
|
@@ -24,7 +24,6 @@ module Rollbar
|
|
24
24
|
attr_accessor :environment
|
25
25
|
attr_accessor :exception_level_filters
|
26
26
|
attr_accessor :failover_handlers
|
27
|
-
attr_accessor :filepath
|
28
27
|
attr_accessor :framework
|
29
28
|
attr_accessor :ignored_person_ids
|
30
29
|
attr_accessor :host
|
@@ -61,7 +60,6 @@ module Rollbar
|
|
61
60
|
attr_accessor :async_json_payload
|
62
61
|
attr_reader :use_eventmachine
|
63
62
|
attr_accessor :web_base
|
64
|
-
attr_accessor :write_to_file
|
65
63
|
attr_reader :send_extra_frame_data
|
66
64
|
attr_accessor :use_exception_level_filters_default
|
67
65
|
attr_accessor :proxy
|
@@ -70,6 +68,13 @@ module Rollbar
|
|
70
68
|
attr_accessor :log_payload
|
71
69
|
attr_accessor :backtrace_cleaner
|
72
70
|
|
71
|
+
attr_accessor :write_to_file
|
72
|
+
attr_accessor :filepath
|
73
|
+
attr_accessor :files_with_pid_name_enabled
|
74
|
+
attr_accessor :files_processed_enabled
|
75
|
+
attr_accessor :files_processed_duration # seconds
|
76
|
+
attr_accessor :files_processed_size # bytes
|
77
|
+
|
73
78
|
attr_reader :project_gem_paths
|
74
79
|
attr_accessor :configured_options
|
75
80
|
|
@@ -134,7 +139,6 @@ module Rollbar
|
|
134
139
|
@use_eventmachine = false
|
135
140
|
@verify_ssl_peer = true
|
136
141
|
@web_base = DEFAULT_WEB_BASE
|
137
|
-
@write_to_file = false
|
138
142
|
@send_extra_frame_data = :none
|
139
143
|
@project_gem_paths = []
|
140
144
|
@use_exception_level_filters_default = false
|
@@ -150,6 +154,12 @@ module Rollbar
|
|
150
154
|
:on_report_internal_error => nil # params: exception
|
151
155
|
}
|
152
156
|
|
157
|
+
@write_to_file = false
|
158
|
+
@files_with_pid_name_enabled = false
|
159
|
+
@files_processed_enabled = false
|
160
|
+
@files_processed_duration = 60
|
161
|
+
@files_processed_size = 5 * 1000 * 1000
|
162
|
+
|
153
163
|
@configured_options = ConfiguredOptions.new(self)
|
154
164
|
end
|
155
165
|
|
data/lib/rollbar/notifier.rb
CHANGED
@@ -19,7 +19,8 @@ module Rollbar
|
|
19
19
|
attr_accessor :last_report
|
20
20
|
attr_accessor :scope_object
|
21
21
|
|
22
|
-
|
22
|
+
MUTEX = Mutex.new
|
23
|
+
EXTENSION_REGEXP = /.rollbar\z/.freeze
|
23
24
|
|
24
25
|
def initialize(parent_notifier = nil, payload_options = nil, scope = nil)
|
25
26
|
if parent_notifier
|
@@ -200,11 +201,11 @@ module Rollbar
|
|
200
201
|
def process_item(item)
|
201
202
|
if configuration.write_to_file
|
202
203
|
if configuration.use_async
|
203
|
-
|
204
|
-
|
204
|
+
MUTEX.synchronize do
|
205
|
+
do_write_item(item)
|
205
206
|
end
|
206
207
|
else
|
207
|
-
|
208
|
+
do_write_item(item)
|
208
209
|
end
|
209
210
|
else
|
210
211
|
send_item(item)
|
@@ -675,27 +676,24 @@ module Rollbar
|
|
675
676
|
end
|
676
677
|
end
|
677
678
|
|
678
|
-
def write_item(item)
|
679
|
-
if configuration.use_async
|
680
|
-
@file_semaphore.synchronize do
|
681
|
-
do_write_item(item)
|
682
|
-
end
|
683
|
-
else
|
684
|
-
do_write_item(item)
|
685
|
-
end
|
686
|
-
end
|
687
|
-
|
688
679
|
def do_write_item(item)
|
689
680
|
log_info '[Rollbar] Writing item to file'
|
690
681
|
|
691
682
|
body = item.dump
|
692
683
|
return unless body
|
693
684
|
|
685
|
+
file_name = if configuration.files_with_pid_name_enabled
|
686
|
+
configuration.filepath.gsub(EXTENSION_REGEXP, "_#{Process.pid}\\0")
|
687
|
+
else
|
688
|
+
configuration.filepath
|
689
|
+
end
|
690
|
+
|
694
691
|
begin
|
695
|
-
@file ||= File.open(
|
692
|
+
@file ||= File.open(file_name, 'a')
|
696
693
|
|
697
694
|
@file.puts(body)
|
698
695
|
@file.flush
|
696
|
+
update_file(@file, file_name)
|
699
697
|
|
700
698
|
log_info '[Rollbar] Success'
|
701
699
|
rescue IOError => e
|
@@ -703,6 +701,18 @@ module Rollbar
|
|
703
701
|
end
|
704
702
|
end
|
705
703
|
|
704
|
+
def update_file(file, file_name)
|
705
|
+
return unless configuration.files_processed_enabled
|
706
|
+
|
707
|
+
time_now = Time.now
|
708
|
+
return if configuration.files_processed_duration > time_now - file.birthtime && file.size < configuration.files_processed_size
|
709
|
+
|
710
|
+
new_file_name = file_name.gsub(EXTENSION_REGEXP, "_processed_#{time_now.to_i}\\0")
|
711
|
+
File.rename(file, new_file_name)
|
712
|
+
file.close
|
713
|
+
@file = File.open(file_name, 'a')
|
714
|
+
end
|
715
|
+
|
706
716
|
def failsafe_reason(message, exception)
|
707
717
|
body = ''
|
708
718
|
|
@@ -12,7 +12,13 @@ module Rollbar
|
|
12
12
|
lifecycle.around(:invoke_job, &Delayed.invoke_job_callback)
|
13
13
|
lifecycle.after(:failure) do |_, job, _, _|
|
14
14
|
data = Rollbar::Delayed.build_job_data(job)
|
15
|
-
|
15
|
+
|
16
|
+
# DelayedJob < 4.1 doesn't provide job#error
|
17
|
+
if job.class.method_defined? :error
|
18
|
+
::Rollbar.scope(:request => data).error(job.error, :use_exception_level_filters => true) if job.error
|
19
|
+
elsif job.last_error
|
20
|
+
::Rollbar.scope(:request => data).error("Job has failed and won't be retried anymore: " + job.last_error, :use_exception_level_filters => true)
|
21
|
+
end
|
16
22
|
end
|
17
23
|
end
|
18
24
|
end
|
@@ -247,7 +247,12 @@ module Rollbar
|
|
247
247
|
end
|
248
248
|
|
249
249
|
def sensitive_headers_list
|
250
|
-
Rollbar.configuration.scrub_headers
|
250
|
+
return [] unless Rollbar.configuration.scrub_headers && Rollbar.configuration.scrub_headers.is_a?(Array)
|
251
|
+
|
252
|
+
# Normalize into the expected matching format
|
253
|
+
Rollbar.configuration.scrub_headers.map do |header|
|
254
|
+
header.split(/[-_]/).map(&:capitalize).join('-').gsub(/^Http-/, '')
|
255
|
+
end
|
251
256
|
end
|
252
257
|
end
|
253
258
|
end
|
data/lib/rollbar/version.rb
CHANGED
data/rollbar.gemspec
CHANGED
@@ -13,6 +13,7 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.homepage = 'https://rollbar.com'
|
14
14
|
gem.license = 'MIT'
|
15
15
|
gem.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
gem.files += ['spec/support/rollbar_api.rb'] # useful helper for app spec/tests.
|
16
17
|
gem.name = 'rollbar'
|
17
18
|
gem.require_paths = ['lib']
|
18
19
|
gem.required_ruby_version = '>= 1.9.3'
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'rack/request'
|
2
|
+
|
3
|
+
class RollbarAPI
|
4
|
+
UNAUTHORIZED_ACCESS_TOKEN = 'unauthorized'.freeze
|
5
|
+
|
6
|
+
def call(env)
|
7
|
+
request = Rack::Request.new(env)
|
8
|
+
json = JSON.parse(request.body.read)
|
9
|
+
|
10
|
+
return unauthorized unless authorized?(json, request)
|
11
|
+
|
12
|
+
return bad_request(json) unless valid_data?(json, request)
|
13
|
+
|
14
|
+
success(json, request)
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def authorized?(json, _request)
|
20
|
+
json['access_token'] != UNAUTHORIZED_ACCESS_TOKEN
|
21
|
+
end
|
22
|
+
|
23
|
+
def response_headers
|
24
|
+
{
|
25
|
+
'Content-Type' => 'application/json'
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def valid_data?(json, _request)
|
30
|
+
!!json['access_token']
|
31
|
+
end
|
32
|
+
|
33
|
+
def unauthorized
|
34
|
+
[401, response_headers, [unauthorized_body]]
|
35
|
+
end
|
36
|
+
|
37
|
+
def bad_request(_json)
|
38
|
+
[400, response_headers, [bad_request_body]]
|
39
|
+
end
|
40
|
+
|
41
|
+
def success(json, request)
|
42
|
+
[200, response_headers, [success_body(json, request)]]
|
43
|
+
end
|
44
|
+
|
45
|
+
def unauthorized_body
|
46
|
+
result(1, nil, 'invalid access token')
|
47
|
+
end
|
48
|
+
|
49
|
+
def bad_request_body
|
50
|
+
result(1, nil, 'bad request')
|
51
|
+
end
|
52
|
+
|
53
|
+
def success_body(json, _request)
|
54
|
+
result(0, {
|
55
|
+
:id => rand(1_000_000),
|
56
|
+
:uuid => json['data']['uuid']
|
57
|
+
}, nil)
|
58
|
+
end
|
59
|
+
|
60
|
+
def result(err, body, message)
|
61
|
+
{
|
62
|
+
:err => err,
|
63
|
+
:result => body,
|
64
|
+
:message => message
|
65
|
+
}.to_json
|
66
|
+
end
|
67
|
+
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: 2.
|
4
|
+
version: 2.24.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-
|
11
|
+
date: 2020-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Easy and powerful exception tracking for Ruby
|
14
14
|
email:
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- lib/tasks/benchmark.rake
|
135
135
|
- lib/tasks/tasks.rake
|
136
136
|
- rollbar.gemspec
|
137
|
+
- spec/support/rollbar_api.rb
|
137
138
|
homepage: https://rollbar.com
|
138
139
|
licenses:
|
139
140
|
- MIT
|
@@ -158,7 +159,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
159
|
- !ruby/object:Gem::Version
|
159
160
|
version: '0'
|
160
161
|
requirements: []
|
161
|
-
|
162
|
+
rubyforge_project:
|
163
|
+
rubygems_version: 2.7.7
|
162
164
|
signing_key:
|
163
165
|
specification_version: 4
|
164
166
|
summary: Reports exceptions to Rollbar
|