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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: defd1ba585ef0f8b5ff8f2f388604c344571fe4fe887f7ca44d03d57c7ce20f8
4
- data.tar.gz: 729865914aa2f72c4b61a16cbcd29f12d86d034a04f9c15f3c48c53a7611c5cf
3
+ metadata.gz: 1270edae5d2c019ae92b623ff4c26e588cf8d5413c8f7b6c549d3d3ec4e16766
4
+ data.tar.gz: a9a659acde5a04263b1ca516a2fb1ecdd760d9133f3603b4fa7ec336c06f59df
5
5
  SHA512:
6
- metadata.gz: 864cc51b0eaf4c1767a36580331a27dfb20a2e0eeaaff805d2d188078cf9500ccfbf0d08e331cd06efb238b0c58dca9f67cde27025d1e87ebec8ef4ae234c683
7
- data.tar.gz: aa303e6a58f1d79b0471d9d31bb5aa8835bd7f253c26f7930c6253e7801e154b9c26ce977529e70a7de647d9967caa6753963608828e721f7d1cfe5523805f41
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
- unless PRIORITY_RANGE.include?(priority)
27
- return capacity
28
- end
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
- # priority 1 stays at 100%, 2 scales down to 90%, 5 to 60%
31
- factor = 1 - (priority - 1) * 0.1
32
- (capacity * factor).floor
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.trace('Berater.limit') do |span|
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
@@ -1,3 +1,3 @@
1
1
  module Berater
2
- VERSION = "0.13.0"
2
+ VERSION = "0.13.1"
3
3
  end
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
- MyLimiter = Class.new(Berater::Unlimiter)
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:MyLimiter:key'
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 { Datadog.tracer.enabled = false }
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
- before do
11
- allow(tracer).to receive(:trace) {|&b| b.call(span) }
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
- context 'with a provided tracer' do
15
- let(:instance) { described_class.new(tracer: tracer) }
26
+ describe '#tracer' do
27
+ subject { instance.send(:tracer) }
16
28
 
17
- it 'traces' do
18
- expect(tracer).to receive(:trace).with(/Berater/)
19
- expect(span).to receive(:set_tag).with(/capacity/, Numeric)
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
- instance.call(limiter) {}
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
- context 'when an Overloaded exception is raised' do
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
- instance.call(limiter) { raise Berater::Overloaded }
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.0
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-03-04 00:00:00.000000000 Z
11
+ date: 2022-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: meddleware