worker_killer 1.0.1.75538 → 1.0.2.187732

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: 2c6211b790da17ea0b47bad73ee9689a2b5b77e1a5154f9463d9edce4e0afc55
4
- data.tar.gz: 2934e7d52ee80eb1ccf87478666bc57b91c869d042f593f63763287bf1a88c7f
3
+ metadata.gz: a0a5748a9d257aeacb4e2c486fc9272e7596a0eb1209c6e36c0bc28266677006
4
+ data.tar.gz: d64b7e01f1b29bfa09abd1766671c2bf6194a01de0534a5ee1dafb9c5075ca40
5
5
  SHA512:
6
- metadata.gz: 4f64d4a287ec283d6f5adb1411b7bffc6272765c27e7120030597e056a825766bcbbe37746a5c9bd4d4c3e6b0392a6d72ab1984a56f6b6c9b0fbf35683dd2430
7
- data.tar.gz: 8ca469adb753f2e49936eecc8d6b893369921d644af6e04c14a4fdcf908b04ba515c2860f2b8ab10c4e3aae5c003e3fd75a3c5586b7e15a797b885da0fd4ff4f
6
+ metadata.gz: bc1f156405493859b4cf0ddf1cc372eae5dee1ca861e761a4bfcba59bd41702e58edae47c1e813be460183258550b9c5b8cc00eb918c33157af2a57d91ad489d
7
+ data.tar.gz: aa97b6c4cae358769e76f70b553b842bcdf79457f63fefe97c5ec3dea27fa4f5797ba519991efd29a139a35b63baacd3fd861a7ca7fc37affa0a24ff038de97c
@@ -13,16 +13,23 @@ module WorkerKiller
13
13
  k.kill(l.started_at, dj: dj)
14
14
  end
15
15
 
16
- @limiter = klass.new(opts)
16
+ @limiter = klass.new(**opts)
17
+ @time_to_burn = false
17
18
  end
18
19
 
19
- def new(*_args)
20
- configure_lifecycle(Delayed::Worker.lifecycle)
20
+ def new(lifecycle = Delayed::Worker.lifecycle, *_args)
21
+ configure_lifecycle(lifecycle)
21
22
  end
22
23
 
23
24
  def configure_lifecycle(lifecycle)
25
+ # Count condition after every job
24
26
  lifecycle.after(:perform) do |worker, *_args|
25
- reaction.call(limiter, killer, worker) if limiter.check
27
+ @time_to_burn = limiter.check
28
+ end
29
+
30
+ # Stop execution only after whole loop completed
31
+ lifecycle.after(:loop) do |worker, *_args|
32
+ reaction.call(limiter, killer, worker) if @time_to_burn
26
33
  end
27
34
  end
28
35
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module WorkerKiller
4
4
 
5
- VERSION = '1.0.1'
5
+ VERSION = '1.0.2'
6
6
 
7
7
  end
8
8
 
@@ -1,5 +1,5 @@
1
1
  RSpec.describe WorkerKiller::CountLimiter do
2
- subject{ described_class.new(options) }
2
+ subject{ described_class.new(**options) }
3
3
  let(:min){ rand(50..100) }
4
4
  let(:max){ min + rand(100) }
5
5
  let(:options){ { min: min, max: max, verbose: true } }
@@ -0,0 +1,17 @@
1
+ RSpec.describe WorkerKiller::DelayedJobPlugin::JobsLimiter do
2
+
3
+ let(:killer) {double}
4
+ subject(:plugin){ described_class.new(killer: killer) }
5
+
6
+ context 'DelayedJob initialization' do
7
+ let(:lifecycle) { double }
8
+ subject(:instance) { plugin.new(lifecycle) }
9
+
10
+ it do
11
+ expect(lifecycle).to receive(:after).with(:perform).and_yield
12
+ expect(lifecycle).to receive(:after).with(:loop).and_yield
13
+ instance
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,17 @@
1
+ RSpec.describe WorkerKiller::DelayedJobPlugin::OOMLimiter do
2
+
3
+ let(:killer) {double}
4
+ subject(:plugin){ described_class.new(killer: killer) }
5
+
6
+ context 'DelayedJob initialization' do
7
+ let(:lifecycle) { double }
8
+ subject(:instance) { plugin.new(lifecycle) }
9
+
10
+ it do
11
+ expect(lifecycle).to receive(:after).with(:perform).and_yield
12
+ expect(lifecycle).to receive(:after).with(:loop).and_yield
13
+ instance
14
+ end
15
+ end
16
+ end
17
+
@@ -6,8 +6,8 @@ RSpec.describe WorkerKiller::Killer::DelayedJob do
6
6
  end
7
7
  end
8
8
 
9
- let(:killer){ described_class.new() }
10
9
  let(:dj){ double }
10
+ subject(:killer){ described_class.new() }
11
11
 
12
12
  describe '#kill' do
13
13
  context 'with use_quit TRUE' do
@@ -30,5 +30,6 @@ RSpec.describe WorkerKiller::Killer::DelayedJob do
30
30
  end
31
31
  end
32
32
  end
33
+
33
34
  end
34
35
 
data/spec/killer_spec.rb CHANGED
@@ -19,9 +19,15 @@ RSpec.describe WorkerKiller::Killer::Base do
19
19
  end
20
20
 
21
21
  it 'expect right signal order' do
22
- expect(killer).to receive(:do_kill).with(:QUIT, anything, anything, anything).exactly(2).times
23
- expect(killer).to receive(:do_kill).with(:TERM, anything, anything, anything).exactly(2).times
24
- expect(killer).to receive(:do_kill).with(:KILL, anything, anything, anything).exactly(5).times
22
+ if RUBY_VERSION >= "3.0.0"
23
+ expect(killer).to receive(:do_kill).with(:QUIT, anything, anything).exactly(2).times
24
+ expect(killer).to receive(:do_kill).with(:TERM, anything, anything).exactly(2).times
25
+ expect(killer).to receive(:do_kill).with(:KILL, anything, anything).exactly(5).times
26
+ else
27
+ expect(killer).to receive(:do_kill).with(:QUIT, anything, anything, anything).exactly(2).times
28
+ expect(killer).to receive(:do_kill).with(:TERM, anything, anything, anything).exactly(2).times
29
+ expect(killer).to receive(:do_kill).with(:KILL, anything, anything, anything).exactly(5).times
30
+ end
25
31
 
26
32
  2.times { killer.kill(Time.now) } # 2 QUIT
27
33
  2.times { killer.kill(Time.now) } # 2 TERM
@@ -1,7 +1,7 @@
1
1
  RSpec.describe WorkerKiller::MemoryLimiter do
2
2
  let(:logger){ Logger.new(nil) }
3
3
 
4
- subject{ described_class.new(options) }
4
+ subject{ described_class.new(**options) }
5
5
  let(:mb){ 1024 * 1024 }
6
6
  let(:min){ rand(50..100) * mb }
7
7
  let(:max){ min + rand(100) * mb }
@@ -9,7 +9,7 @@ RSpec.describe WorkerKiller::Middleware do
9
9
  describe 'Custom class' do
10
10
  let(:klass){ double }
11
11
  let(:options){ { killer: killer, klass: klass, reaction: reaction, anykey: anykey } }
12
- subject{ described_class.new(app, options) }
12
+ subject{ described_class.new(app, **options) }
13
13
 
14
14
  it 'is expected to be initialized' do
15
15
  expect(klass).to receive(:new).with(anykey: anykey).and_return(99)
@@ -20,7 +20,7 @@ RSpec.describe WorkerKiller::Middleware do
20
20
 
21
21
  describe WorkerKiller::Middleware::RequestsLimiter do
22
22
  let(:options){ { killer: killer, min: 3, max: 3 } }
23
- subject{ described_class.new(app, options) }
23
+ subject{ described_class.new(app, **options) }
24
24
 
25
25
  it 'is expected to be initialized without reaction' do
26
26
  expect(WorkerKiller::CountLimiter).to receive(:new).with(min: 3, max: 3).and_call_original
@@ -51,7 +51,7 @@ RSpec.describe WorkerKiller::Middleware do
51
51
 
52
52
  describe WorkerKiller::Middleware::OOMLimiter do
53
53
  let(:options){ { killer: killer, min: 2222, max: 2223 } }
54
- subject{ described_class.new(app, options) }
54
+ subject{ described_class.new(app, **options) }
55
55
 
56
56
  it 'is expected to be initialized without reaction' do
57
57
  expect(WorkerKiller::MemoryLimiter).to receive(:new).with(min: 2222, max: 2223).and_call_original
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: worker_killer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1.75538
4
+ version: 1.0.2.187732
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samoilenko Yuri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-07 00:00:00.000000000 Z
11
+ date: 2023-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: get_process_mem
@@ -136,6 +136,8 @@ files:
136
136
  - lib/worker_killer/middleware.rb
137
137
  - lib/worker_killer/version.rb
138
138
  - spec/count_limiter_spec.rb
139
+ - spec/delayed_job_plugin/jobs_limiter_spec.rb
140
+ - spec/delayed_job_plugin/oom_limiter_spec.rb
139
141
  - spec/killer/delayed_job_spec.rb
140
142
  - spec/killer/passenger_spec.rb
141
143
  - spec/killer/signal_spec.rb
@@ -178,4 +180,6 @@ test_files:
178
180
  - spec/support/logger.rb
179
181
  - spec/middleware_spec.rb
180
182
  - spec/spec_helper.rb
183
+ - spec/delayed_job_plugin/oom_limiter_spec.rb
184
+ - spec/delayed_job_plugin/jobs_limiter_spec.rb
181
185
  - spec/memory_limiter_spec.rb