berater 0.13.0 → 0.13.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/berater/middleware/load_shedder.rb +7 -6
- data/lib/berater/middleware/trace.rb +2 -4
- data/lib/berater/version.rb +1 -1
- data/spec/limiter_spec.rb +3 -7
- data/spec/middleware/trace_spec.rb +59 -21
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1270edae5d2c019ae92b623ff4c26e588cf8d5413c8f7b6c549d3d3ec4e16766
|
4
|
+
data.tar.gz: a9a659acde5a04263b1ca516a2fb1ecdd760d9133f3603b4fa7ec336c06f59df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07fc3784c2e6d41648f97878e3a0c62e3a089c1ef69315e88141642350180634c65a89deda082ed5933a90666c620111329756d0699d3fde5238b97d0ad37e82
|
7
|
+
data.tar.gz: 6f8dc42b5b694a45c286b1d66a0b8efbf17371b3fd6bfd8936098b4155b85ae6523146fecfc6b7c46e3b0a8df1ddb03158f1fd181c9e6a1e13042232089e1a41
|
@@ -23,13 +23,14 @@ module Berater
|
|
23
23
|
priority = Float(priority) rescue nil
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
if PRIORITY_RANGE.include?(priority)
|
27
|
+
# priority 1 stays at 100%, 2 scales down to 90%, 5 to 60%
|
28
|
+
factor = 1 - (priority - 1) * 0.1
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
(capacity * factor).floor
|
31
|
+
else
|
32
|
+
capacity
|
33
|
+
end
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'ddtrace'
|
2
|
-
|
3
1
|
module Berater
|
4
2
|
module Middleware
|
5
3
|
class Trace
|
@@ -8,7 +6,7 @@ module Berater
|
|
8
6
|
end
|
9
7
|
|
10
8
|
def call(limiter, **)
|
11
|
-
tracer
|
9
|
+
tracer&.trace('Berater') do |span|
|
12
10
|
begin
|
13
11
|
lock = yield
|
14
12
|
rescue Exception => error
|
@@ -34,7 +32,7 @@ module Berater
|
|
34
32
|
private
|
35
33
|
|
36
34
|
def tracer
|
37
|
-
@tracer || Datadog.tracer
|
35
|
+
@tracer || (defined?(Datadog::Tracing) && Datadog::Tracing) || (defined?(Datadog) && Datadog.tracer)
|
38
36
|
end
|
39
37
|
end
|
40
38
|
end
|
data/lib/berater/version.rb
CHANGED
data/spec/limiter_spec.rb
CHANGED
@@ -220,9 +220,7 @@ describe Berater::Limiter do
|
|
220
220
|
end
|
221
221
|
|
222
222
|
context 'with custom limiter' do
|
223
|
-
MyLimiter = Class.new(Berater::Unlimiter)
|
224
|
-
|
225
|
-
let(:klass) { MyLimiter }
|
223
|
+
let(:klass) { MyLimiter = Class.new(Berater::Unlimiter) }
|
226
224
|
|
227
225
|
it 'adds Berater prefix' do
|
228
226
|
is_expected.to eq 'Berater:MyLimiter:key'
|
@@ -242,12 +240,10 @@ describe Berater::Limiter do
|
|
242
240
|
end
|
243
241
|
|
244
242
|
context 'with custom limiter' do
|
245
|
-
|
246
|
-
|
247
|
-
let(:klass) { MyLimiter }
|
243
|
+
let(:klass) { MyOtherLimiter = Class.new(Berater::Unlimiter) }
|
248
244
|
|
249
245
|
it 'adds Berater prefix' do
|
250
|
-
is_expected.to eq 'Berater:
|
246
|
+
is_expected.to eq 'Berater:MyOtherLimiter:key'
|
251
247
|
end
|
252
248
|
end
|
253
249
|
end
|
@@ -1,30 +1,61 @@
|
|
1
|
+
require 'ddtrace'
|
2
|
+
|
1
3
|
describe Berater::Middleware::Trace do
|
2
|
-
before
|
4
|
+
before do
|
5
|
+
allow(tracer).to receive(:trace).and_yield(span)
|
6
|
+
end
|
3
7
|
|
4
8
|
it_behaves_like 'a limiter middleware'
|
5
9
|
|
6
10
|
let(:limiter) { Berater::Unlimiter.new }
|
7
|
-
let(:span) { double(Datadog::Span, set_tag: nil) }
|
8
|
-
let(:tracer) { double(Datadog::Tracer) }
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
+
if defined?(Datadog::Tracing)
|
13
|
+
before { Datadog.configure { |c| c.tracing.enabled = false } }
|
14
|
+
|
15
|
+
let(:span) { double(Datadog::Tracing::SpanOperation, set_tag: nil) }
|
16
|
+
let(:tracer) { double(Datadog::Tracing::Tracer) }
|
17
|
+
let(:ddtracer) { Datadog::Tracing }
|
18
|
+
else
|
19
|
+
before { Datadog.tracer.enabled = false }
|
20
|
+
|
21
|
+
let(:span) { double(Datadog::Span, set_tag: nil) }
|
22
|
+
let(:tracer) { double(Datadog::Tracer) }
|
23
|
+
let(:ddtracer) { Datadog.tracer }
|
12
24
|
end
|
13
25
|
|
14
|
-
|
15
|
-
|
26
|
+
describe '#tracer' do
|
27
|
+
subject { instance.send(:tracer) }
|
16
28
|
|
17
|
-
|
18
|
-
|
19
|
-
|
29
|
+
let(:instance) { described_class.new }
|
30
|
+
|
31
|
+
it 'defaults to Datadog.tracer' do
|
32
|
+
is_expected.to be ddtracer
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when provided a tracer' do
|
36
|
+
let(:instance) { described_class.new(tracer: tracer) }
|
20
37
|
|
21
|
-
|
38
|
+
it { is_expected.to be tracer }
|
22
39
|
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#call' do
|
43
|
+
let(:instance) { described_class.new(tracer: tracer) }
|
23
44
|
|
24
45
|
it 'yields' do
|
25
46
|
expect {|b| instance.call(limiter, &b) }.to yield_control
|
26
47
|
end
|
27
48
|
|
49
|
+
context 'when a Berater::Overloaded exception is raised' do
|
50
|
+
it 'tags the span as overloaded and raises' do
|
51
|
+
expect(span).to receive(:set_tag).with('overloaded', true)
|
52
|
+
|
53
|
+
expect {
|
54
|
+
instance.call(limiter) { raise Berater::Overloaded }
|
55
|
+
}.to be_overloaded
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
28
59
|
context 'when an exception is raised' do
|
29
60
|
it 'tags the span and raises' do
|
30
61
|
expect(span).to receive(:set_tag).with('error', 'IOError')
|
@@ -34,25 +65,32 @@ describe Berater::Middleware::Trace do
|
|
34
65
|
}.to raise_error(IOError)
|
35
66
|
end
|
36
67
|
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'when used as middleware' do
|
71
|
+
before do
|
72
|
+
Berater.middleware.use described_class, tracer: tracer
|
73
|
+
end
|
37
74
|
|
38
|
-
|
75
|
+
it 'traces' do
|
76
|
+
expect(tracer).to receive(:trace).with('Berater')
|
77
|
+
expect(span).to receive(:set_tag).with('key', limiter.key)
|
78
|
+
expect(span).to receive(:set_tag).with('capacity', Numeric)
|
79
|
+
expect(span).to receive(:set_tag).with('contention', Numeric)
|
80
|
+
|
81
|
+
limiter.limit
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'when limiter is overloaded' do
|
39
85
|
let(:limiter) { Berater::Inhibitor.new }
|
40
86
|
|
41
87
|
it 'tags the span as overloaded and raises' do
|
42
88
|
expect(span).to receive(:set_tag).with('overloaded', true)
|
43
89
|
|
44
90
|
expect {
|
45
|
-
|
91
|
+
limiter.limit
|
46
92
|
}.to be_overloaded
|
47
93
|
end
|
48
94
|
end
|
49
95
|
end
|
50
|
-
|
51
|
-
context 'with the default tracer' do
|
52
|
-
it 'uses Datadog.tracer' do
|
53
|
-
expect(Datadog).to receive(:tracer).and_return(tracer)
|
54
|
-
|
55
|
-
described_class.new.call(limiter) {}
|
56
|
-
end
|
57
|
-
end
|
58
96
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berater
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Pepper
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: meddleware
|