rollbar 2.23.2 → 2.24.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|