airbrake-ruby 1.3.0 → 1.3.1
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/lib/airbrake-ruby/notice.rb +13 -4
- data/lib/airbrake-ruby/sync_sender.rb +8 -0
- data/lib/airbrake-ruby/version.rb +1 -1
- data/spec/notice_spec.rb +21 -0
- data/spec/payload_truncator_spec.rb +2 -2
- data/spec/sync_sender_spec.rb +25 -1
- 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: 14a1f47941cce7fb05a4606b830dad7d5021a808
|
4
|
+
data.tar.gz: 0c3bfcea4c50a6bfe983e15432bab8fe966ed327
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38deadf6ffea07e915398e08258766b86ab8b22a276622326c6ebd66b792da1f97beccaec485da2dc6edef81193b028926c539aac2966f2dffd436721fe6bac0
|
7
|
+
data.tar.gz: 6fa74b32ceb3907eaf1e0173c3d78fca7fefe3b0e94d9cad44b092abfafb7d0d57c2d81ed861d7c833e0b46689c3b81b1de1a74ac54203e80f6e9318b1526f8e
|
data/lib/airbrake-ruby/notice.rb
CHANGED
@@ -75,18 +75,18 @@ module Airbrake
|
|
75
75
|
# notice's payload. Truncates notices, JSON representation of which is
|
76
76
|
# bigger than {MAX_NOTICE_SIZE}.
|
77
77
|
#
|
78
|
-
# @return [Hash{String=>String}]
|
78
|
+
# @return [Hash{String=>String}, nil]
|
79
79
|
def to_json
|
80
80
|
loop do
|
81
81
|
begin
|
82
82
|
json = payload.to_json
|
83
83
|
rescue *JSON_EXCEPTIONS => ex
|
84
|
-
@config.logger.debug("#{LOG_LABEL} `notice.to_json` failed: #{ex.
|
84
|
+
@config.logger.debug("#{LOG_LABEL} `notice.to_json` failed: #{ex.class}: #{ex}")
|
85
85
|
else
|
86
86
|
return json if json && json.bytesize <= MAX_NOTICE_SIZE
|
87
87
|
end
|
88
88
|
|
89
|
-
truncate_payload
|
89
|
+
break if truncate_payload.zero?
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
@@ -188,7 +188,16 @@ module Airbrake
|
|
188
188
|
@truncator.truncate_object(@modifiable_payload[key])
|
189
189
|
end
|
190
190
|
|
191
|
-
@truncator.reduce_max_size
|
191
|
+
new_max_size = @truncator.reduce_max_size
|
192
|
+
if new_max_size.zero?
|
193
|
+
@config.logger.error(
|
194
|
+
"#{LOG_LABEL} truncation failed. File an issue at " \
|
195
|
+
"https://github.com/airbrake/airbrake-ruby " \
|
196
|
+
"and attach the following payload: #{payload}"
|
197
|
+
)
|
198
|
+
end
|
199
|
+
|
200
|
+
new_max_size
|
192
201
|
end
|
193
202
|
end
|
194
203
|
end
|
@@ -23,6 +23,14 @@ module Airbrake
|
|
23
23
|
def send(notice, endpoint = @config.endpoint)
|
24
24
|
response = nil
|
25
25
|
req = build_post_request(endpoint, notice)
|
26
|
+
|
27
|
+
if req.body.nil?
|
28
|
+
@config.logger.error(
|
29
|
+
"#{LOG_LABEL} notice was not sent because of missing body"
|
30
|
+
)
|
31
|
+
return
|
32
|
+
end
|
33
|
+
|
26
34
|
https = build_https(endpoint)
|
27
35
|
|
28
36
|
begin
|
data/spec/notice_spec.rb
CHANGED
@@ -65,6 +65,27 @@ RSpec.describe Airbrake::Notice do
|
|
65
65
|
include_examples 'payloads', 300, small_msg
|
66
66
|
end
|
67
67
|
|
68
|
+
context "when truncation failed" do
|
69
|
+
it "returns nil" do
|
70
|
+
expect_any_instance_of(Airbrake::PayloadTruncator).
|
71
|
+
to receive(:reduce_max_size).and_return(0)
|
72
|
+
|
73
|
+
encoded = Base64.encode64("\xD3\xE6\xBC\x9D\xBA").encode!('ASCII-8BIT')
|
74
|
+
bad_string = Base64.decode64(encoded)
|
75
|
+
|
76
|
+
ex = AirbrakeTestError.new
|
77
|
+
|
78
|
+
backtrace = []
|
79
|
+
10.times { backtrace << "bin/rails:3:in `<#{bad_string}>'" }
|
80
|
+
ex.set_backtrace(backtrace)
|
81
|
+
|
82
|
+
config = Airbrake::Config.new(logger: Logger.new('/dev/null'))
|
83
|
+
notice = described_class.new(config, ex)
|
84
|
+
|
85
|
+
expect(notice.to_json).to be_nil
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
68
89
|
describe "object replacement with its string version" do
|
69
90
|
let(:klass) { Class.new {} }
|
70
91
|
let(:ex) { AirbrakeTestError.new }
|
@@ -10,7 +10,7 @@ RSpec.describe Airbrake::PayloadTruncator do
|
|
10
10
|
@truncator = described_class.new(max_size, Logger.new('/dev/null'))
|
11
11
|
end
|
12
12
|
|
13
|
-
describe "
|
13
|
+
describe "#truncate_error" do
|
14
14
|
let(:error) do
|
15
15
|
{ type: 'AirbrakeTestError', message: 'App crashed!', backtrace: [] }
|
16
16
|
end
|
@@ -89,7 +89,7 @@ RSpec.describe Airbrake::PayloadTruncator do
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
describe "
|
92
|
+
describe "#truncate_object" do
|
93
93
|
describe "given a hash with short values" do
|
94
94
|
let(:params) do
|
95
95
|
{ bingo: 'bango', bongo: 'bish', bash: 'bosh' }
|
data/spec/sync_sender_spec.rb
CHANGED
@@ -15,7 +15,7 @@ RSpec.describe Airbrake::SyncSender do
|
|
15
15
|
it "catches exceptions raised when sending" do
|
16
16
|
stdout = StringIO.new
|
17
17
|
config = Airbrake::Config.new(logger: Logger.new(stdout))
|
18
|
-
sender = described_class.new
|
18
|
+
sender = described_class.new(config)
|
19
19
|
notice = Airbrake::Notice.new(config, AirbrakeTestError.new)
|
20
20
|
https = double("foo")
|
21
21
|
allow(sender).to receive(:build_https).and_return(https)
|
@@ -23,5 +23,29 @@ RSpec.describe Airbrake::SyncSender do
|
|
23
23
|
expect(sender.send(notice)).to be_nil
|
24
24
|
expect(stdout.string).to match(/ERROR -- : .+ HTTP error: foo/)
|
25
25
|
end
|
26
|
+
|
27
|
+
context "when request body is nil" do
|
28
|
+
it "doesn't send a notice" do
|
29
|
+
expect_any_instance_of(Airbrake::PayloadTruncator).
|
30
|
+
to receive(:reduce_max_size).and_return(0)
|
31
|
+
|
32
|
+
encoded = Base64.encode64("\xD3\xE6\xBC\x9D\xBA").encode!('ASCII-8BIT')
|
33
|
+
bad_string = Base64.decode64(encoded)
|
34
|
+
|
35
|
+
ex = AirbrakeTestError.new
|
36
|
+
backtrace = []
|
37
|
+
10.times { backtrace << "bin/rails:3:in `<#{bad_string}>'" }
|
38
|
+
ex.set_backtrace(backtrace)
|
39
|
+
|
40
|
+
stdout = StringIO.new
|
41
|
+
config = Airbrake::Config.new(logger: Logger.new(stdout))
|
42
|
+
|
43
|
+
sender = described_class.new(config)
|
44
|
+
notice = Airbrake::Notice.new(config, ex)
|
45
|
+
|
46
|
+
expect(sender.send(notice)).to be_nil
|
47
|
+
expect(stdout.string).to match(/ERROR -- : .+ notice was not sent/)
|
48
|
+
end
|
49
|
+
end
|
26
50
|
end
|
27
51
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: airbrake-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Airbrake Technologies, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|