sshkit-chunky-runner 0.1.0 → 0.2.0

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
  SHA1:
3
- metadata.gz: 49bf7cbfd1a2feb7a1420695a8b3be966ccf4287
4
- data.tar.gz: a294221cde76f2c38de2c280fea367afb646b79c
3
+ metadata.gz: 965046b809835e032c4fe94190e8284c2aadec29
4
+ data.tar.gz: 7402accf87a241ff2b7a7d8280090121320491e1
5
5
  SHA512:
6
- metadata.gz: 39cd8b01bdb72cf2906e8bf48c2b5aac05f5821ae2233b3d5b2c3816af829bb3324e52ac65ae606c352da288da6c7c3f01e0281ab23353d50438428ce5432e44
7
- data.tar.gz: 0d7e8cbc5f933d9a201465c858275adfdea0d075c50b5e0c2aec3425307b59f85240fbed5c6606948174e344803734bfb94c00001b919ac131abe0da93748e46
6
+ metadata.gz: bbcb5db6c6971a21b558eac9639c12c2f5ba57a1790f5733257bad808183eaf06b3994d140bc54cceb971cf0d217bfb2c80a780457171caf7f80fc5a0454a488
7
+ data.tar.gz: 5a194a3d9fd24f4b04b27af49ae5356cab79c5c9f594751eb69f487a699f27aecfaa006ae14489c9ee6fa1331c72095ca075101d74142f25cd3150dd3f16c26d
@@ -1,13 +1,34 @@
1
1
  module SSHKit
2
2
  module Chunky
3
3
  module Runner
4
- class Chunks < SSHKit::Runner::Group
4
+ class Chunks < SSHKit::Runner::Sequential
5
5
  attr_writer :chunks_count
6
6
 
7
+ def execute
8
+ each_chunk(hosts).map do |group_hosts|
9
+ SSHKit::Runner::Parallel.new(group_hosts, &block).execute
10
+ sleep wait_interval
11
+ end.flatten
12
+ end
13
+
7
14
  private
8
15
 
9
- def group_size
10
- (hosts.size.to_f / chunks_count).ceil
16
+ def each_chunk(array)
17
+ return array.map { |item| [item] } if array.size <= chunks_count
18
+
19
+ division = array.size.div chunks_count
20
+ modulo = array.size % chunks_count
21
+
22
+ groups = []
23
+ start = 0
24
+
25
+ chunks_count.times do |index|
26
+ length = division + (modulo > 0 && modulo > index ? 1 : 0)
27
+ groups << array.slice(start, length)
28
+ start += length
29
+ end
30
+
31
+ groups
11
32
  end
12
33
 
13
34
  def chunks_count
@@ -1,7 +1,7 @@
1
1
  module SSHKit
2
2
  module Chunky
3
3
  module Runner
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
6
6
  end
7
7
  end
@@ -1,36 +1,70 @@
1
1
  require 'sshkit/chunky/runner/chunks'
2
2
 
3
3
  describe SSHKit::Chunky::Runner::Chunks do
4
- describe '#group_size' do
5
- let(:options) { { count: 3 } }
4
+ describe '#each_chunk' do
5
+ let(:options) { { count: 4, sleep: 0 } }
6
6
  let(:block_to_run) { ->(host) { execute "echo #{Time.now.to_i}" } }
7
7
  let(:runner) do
8
8
  SSHKit::Chunky::Runner::Chunks.new(hosts, options, &block_to_run)
9
9
  end
10
10
 
11
- subject(:group_size) { runner.send(:group_size) }
11
+ subject(:each_chunk) { runner.send(:each_chunk, hosts) }
12
12
 
13
13
  context 'with one host' do
14
14
  let(:hosts) { ['example.com'] }
15
15
 
16
- it 'returns one' do
17
- expect(group_size).to eq 1
16
+ it 'returns 1 group' do
17
+ expect(each_chunk.size).to eq 1
18
+ end
19
+
20
+ it 'returns 1 item in first group' do
21
+ expect(each_chunk.first.size).to eq 1
18
22
  end
19
23
  end
20
24
 
21
- context 'with 6 hosts' do
22
- let(:hosts) { ['example.com'] * 6 }
25
+ context 'with 3 hosts' do
26
+ let(:hosts) { ['example.com'] * 3 }
27
+
28
+ it 'returns 3 groups' do
29
+ expect(each_chunk.size).to eq 3
30
+ end
23
31
 
24
- it 'returns 2' do
25
- expect(group_size).to eq 2
32
+ it 'returns 1 item in each group' do
33
+ expect(each_chunk[0].size).to eq 1
34
+ expect(each_chunk[1].size).to eq 1
35
+ expect(each_chunk[2].size).to eq 1
26
36
  end
27
37
  end
28
38
 
29
- context 'with 7 hosts' do
30
- let(:hosts) { ['example.com'] * 7 }
39
+ context 'with 8 hosts' do
40
+ let(:hosts) { ['example.com'] * 8 }
41
+
42
+ it 'returns 4 groups' do
43
+ expect(each_chunk.size).to eq 4
44
+ end
45
+ it 'returns 2 items in each group' do
46
+ expect(each_chunk[0].size).to eq 2
47
+ expect(each_chunk[1].size).to eq 2
48
+ expect(each_chunk[2].size).to eq 2
49
+ expect(each_chunk[3].size).to eq 2
50
+ end
51
+ end
52
+
53
+ context 'with 9 hosts' do
54
+ let(:hosts) { ['example.com'] * 9 }
55
+
56
+ it 'returns 4 groups' do
57
+ expect(each_chunk.size).to eq 4
58
+ end
59
+
60
+ it 'returns 3 items in first group' do
61
+ expect(each_chunk[0].size).to eq 3
62
+ end
31
63
 
32
- it 'returns 3' do
33
- expect(group_size).to eq 3
64
+ it 'returns 2 items in other groups' do
65
+ expect(each_chunk[1].size).to eq 2
66
+ expect(each_chunk[2].size).to eq 2
67
+ expect(each_chunk[3].size).to eq 2
34
68
  end
35
69
  end
36
70
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sshkit-chunky-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Brazys
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-28 00:00:00.000000000 Z
11
+ date: 2014-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler