rollbar 0.13.2 → 1.0.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/CHANGELOG.md +5 -0
- data/lib/rollbar.rb +31 -9
- data/lib/rollbar/railtie.rb +2 -2
- data/lib/rollbar/util.rb +16 -1
- data/lib/rollbar/version.rb +1 -1
- data/spec/rollbar_spec.rb +57 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f2c782eb71538b4fa602e2e56c56233559858f7
|
4
|
+
data.tar.gz: 6ad6c0a6b66963dc0b0a2bdb0705df9d95e4f468
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fddd828f6ff42f93a0211e4967baf4a99ff1c93f1b5c1ee1a231004627b80c5b18dfbf6684d94a141144e29bebd17e5d9e6d977844506fb62cd7524272e29ebe
|
7
|
+
data.tar.gz: f6820508de41ddc3fcb9ff89bab83da096a6b778d97bdca10297982561f139d6f1c7591d120bb9165a3bcc3601d7ca5f17c89a137cb49f114b00c8c01273f77c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
**1.0.0**
|
4
|
+
- Clean up some unused requires
|
5
|
+
- Strip out invalid UTF-8 characters from payload keys/values, fixes [#85](https://github.com/rollbar/rollbar-gem/issues/85)
|
6
|
+
- Bumping to 1.0 due to the suggestion in [#119](https://github.com/rollbar/rollbar-gem/issues/119)
|
7
|
+
|
3
8
|
**0.13.2**
|
4
9
|
- Sidekiq payload is no longer mutated when Rollbar reports a Sidekiq job exception
|
5
10
|
- Fix sucker_punch async reporting when using a forking application server such as Unicorn (`preload_app true`). Jobs are now instantiated for every report instead of a reused global job instance
|
data/lib/rollbar.rb
CHANGED
@@ -1,23 +1,26 @@
|
|
1
1
|
require 'net/https'
|
2
|
-
|
3
|
-
require 'securerandom' if defined?(SecureRandom)
|
4
2
|
require 'socket'
|
5
3
|
require 'thread'
|
6
4
|
require 'uri'
|
7
|
-
|
8
|
-
require 'girl_friday' if defined?(GirlFriday)
|
9
|
-
require 'sucker_punch' if defined?(SuckerPunch)
|
10
5
|
require 'multi_json'
|
11
6
|
|
7
|
+
begin
|
8
|
+
require 'securerandom'
|
9
|
+
rescue LoadError
|
10
|
+
end
|
11
|
+
|
12
12
|
require 'rollbar/version'
|
13
13
|
require 'rollbar/configuration'
|
14
14
|
require 'rollbar/request_data_extractor'
|
15
15
|
require 'rollbar/exception_reporter'
|
16
16
|
require 'rollbar/active_record_extension' if defined?(ActiveRecord)
|
17
17
|
require 'rollbar/util'
|
18
|
-
|
19
18
|
require 'rollbar/railtie' if defined?(Rails)
|
20
19
|
|
20
|
+
unless ''.respond_to? :encode
|
21
|
+
require 'iconv'
|
22
|
+
end
|
23
|
+
|
21
24
|
module Rollbar
|
22
25
|
MAX_PAYLOAD_SIZE = 128 * 1024 #128kb
|
23
26
|
|
@@ -30,7 +33,7 @@ module Rollbar
|
|
30
33
|
def preconfigure
|
31
34
|
yield(configuration)
|
32
35
|
end
|
33
|
-
|
36
|
+
|
34
37
|
# Configures the gem.
|
35
38
|
#
|
36
39
|
# Call on app startup to set the `access_token` (required) and other config params.
|
@@ -47,7 +50,7 @@ module Rollbar
|
|
47
50
|
configuration.enabled = true
|
48
51
|
end
|
49
52
|
yield(configuration)
|
50
|
-
|
53
|
+
|
51
54
|
require_hooks
|
52
55
|
end
|
53
56
|
|
@@ -252,7 +255,7 @@ module Rollbar
|
|
252
255
|
require 'rollbar/delayed_job'
|
253
256
|
Rollbar::Delayed::wrap_worker
|
254
257
|
end
|
255
|
-
|
258
|
+
|
256
259
|
require 'rollbar/sidekiq' if defined?(Sidekiq)
|
257
260
|
require 'rollbar/goalie' if defined?(Goalie)
|
258
261
|
require 'rollbar/rack' if defined?(Rack)
|
@@ -444,6 +447,9 @@ module Rollbar
|
|
444
447
|
:access_token => configuration.access_token,
|
445
448
|
:data => data
|
446
449
|
}
|
450
|
+
|
451
|
+
enforce_valid_utf8(payload)
|
452
|
+
|
447
453
|
result = MultiJson.dump(payload)
|
448
454
|
|
449
455
|
# Try to truncate strings in the payload a few times if the payload is too big
|
@@ -602,6 +608,22 @@ module Rollbar
|
|
602
608
|
log_error "[Rollbar] Error sending failsafe : #{e}"
|
603
609
|
end
|
604
610
|
end
|
611
|
+
|
612
|
+
def enforce_valid_utf8(payload)
|
613
|
+
normalizer = Proc.new do |value|
|
614
|
+
if value.is_a?(String)
|
615
|
+
if value.respond_to? :encode
|
616
|
+
value.encode('UTF-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '')
|
617
|
+
else
|
618
|
+
::Iconv.conv('UTF-8//IGNORE', 'UTF-8', value)
|
619
|
+
end
|
620
|
+
else
|
621
|
+
value
|
622
|
+
end
|
623
|
+
end
|
624
|
+
|
625
|
+
Rollbar::Util::iterate_and_update(payload, normalizer)
|
626
|
+
end
|
605
627
|
|
606
628
|
def truncate_payload(payload, byte_threshold)
|
607
629
|
truncator = Proc.new do |value|
|
data/lib/rollbar/railtie.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'rails'
|
1
|
+
require 'rails/railtie'
|
2
2
|
require 'rollbar'
|
3
3
|
|
4
4
|
module Rollbar
|
@@ -6,7 +6,7 @@ module Rollbar
|
|
6
6
|
rake_tasks do
|
7
7
|
require 'rollbar/rake_tasks'
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
if defined? ActiveRecord
|
11
11
|
initializer 'rollbar.middleware.rails' do |app|
|
12
12
|
require 'rollbar/middleware/rails/rollbar_request_store'
|
data/lib/rollbar/util.rb
CHANGED
@@ -12,12 +12,27 @@ module Rollbar
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
else
|
15
|
+
key_updates = []
|
16
|
+
|
15
17
|
obj.each do |k, v|
|
18
|
+
new_key = nil
|
19
|
+
|
16
20
|
if v.is_a?(Hash) || v.is_a?(Array)
|
17
21
|
self.iterate_and_update(v, block)
|
22
|
+
new_key = block.call(k)
|
18
23
|
else
|
24
|
+
new_key = block.call(k)
|
19
25
|
obj[k] = block.call(v)
|
20
26
|
end
|
27
|
+
|
28
|
+
if new_key != k
|
29
|
+
key_updates.push([k, new_key])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
key_updates.each do |old_key, new_key|
|
34
|
+
obj[new_key] = obj[old_key]
|
35
|
+
obj.delete(old_key)
|
21
36
|
end
|
22
37
|
end
|
23
38
|
end
|
@@ -32,4 +47,4 @@ module Rollbar
|
|
32
47
|
str.unpack("U*").slice(0, length - ellipsis.length).pack("U*") + ellipsis
|
33
48
|
end
|
34
49
|
end
|
35
|
-
end
|
50
|
+
end
|
data/lib/rollbar/version.rb
CHANGED
data/spec/rollbar_spec.rb
CHANGED
@@ -666,6 +666,25 @@ describe Rollbar do
|
|
666
666
|
hash = MultiJson.load(json)
|
667
667
|
hash["data"]["foo"]["bar"].should == "baz"
|
668
668
|
end
|
669
|
+
|
670
|
+
it 'should strip out invalid utf-8' do
|
671
|
+
json = Rollbar.send(:build_payload, {
|
672
|
+
:good_key => "\255bad value",
|
673
|
+
"bad\255 key" => "good value",
|
674
|
+
"bad key 2\255" => "bad \255value",
|
675
|
+
:hash => {
|
676
|
+
"bad array \255key" => ["bad\255 array element", "good array element"]
|
677
|
+
}
|
678
|
+
})
|
679
|
+
|
680
|
+
hash = MultiJson.load(json)
|
681
|
+
hash["data"]["good_key"].should == 'bad value'
|
682
|
+
hash["data"]["bad key"].should == 'good value'
|
683
|
+
hash["data"]["bad key 2"].should == 'bad value'
|
684
|
+
hash["data"]["hash"].should == {
|
685
|
+
"bad array key" => ["bad array element", "good array element"]
|
686
|
+
}
|
687
|
+
end
|
669
688
|
|
670
689
|
it 'should truncate large strings if the payload is too big' do
|
671
690
|
json = Rollbar.send(:build_payload, {:foo => {:bar => "baz"}, :large => 'a' * (128 * 1024), :small => 'b' * 1024})
|
@@ -686,6 +705,44 @@ describe Rollbar do
|
|
686
705
|
Rollbar::MAX_PAYLOAD_SIZE = orig_max
|
687
706
|
end
|
688
707
|
end
|
708
|
+
|
709
|
+
context 'enforce_valid_utf8' do
|
710
|
+
it 'should replace invalid utf8 values' do
|
711
|
+
payload = {
|
712
|
+
:bad_value => "bad value 1\255",
|
713
|
+
:bad_value_2 => "bad\255 value 2",
|
714
|
+
"bad\255 key" => "good value",
|
715
|
+
:hash => {
|
716
|
+
:inner_bad_value => "\255\255bad value 3",
|
717
|
+
"inner \255bad key" => 'inner good value',
|
718
|
+
"bad array key\255" => [
|
719
|
+
'good array value 1',
|
720
|
+
"bad\255 array value 1\255",
|
721
|
+
{
|
722
|
+
:inner_inner_bad => "bad inner \255inner value"
|
723
|
+
}
|
724
|
+
]
|
725
|
+
}
|
726
|
+
}
|
727
|
+
|
728
|
+
payload_copy = payload.clone
|
729
|
+
Rollbar.send(:enforce_valid_utf8, payload_copy)
|
730
|
+
|
731
|
+
payload_copy[:bad_value].should == "bad value 1"
|
732
|
+
payload_copy[:bad_value_2].should == "bad value 2"
|
733
|
+
payload_copy["bad key"].should == "good value"
|
734
|
+
payload_copy.keys.should_not include("bad\456 key")
|
735
|
+
payload_copy[:hash][:inner_bad_value].should == "bad value 3"
|
736
|
+
payload_copy[:hash]["inner bad key"].should == 'inner good value'
|
737
|
+
payload_copy[:hash]["bad array key"].should == [
|
738
|
+
'good array value 1',
|
739
|
+
'bad array value 1',
|
740
|
+
{
|
741
|
+
:inner_inner_bad => 'bad inner inner value'
|
742
|
+
}
|
743
|
+
]
|
744
|
+
end
|
745
|
+
end
|
689
746
|
|
690
747
|
context 'truncate_payload' do
|
691
748
|
it 'should truncate all nested strings in the payload' do
|
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: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Rue
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|