bumbleworks 0.0.89 → 0.0.90

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 20718cc55b3e2049dd69f7772e53842e8986207d
4
- data.tar.gz: c6f332a2969e7c5b42ce2de781194011c5254664
3
+ metadata.gz: 28e8c92dc9de4fb9204a5b2348565a1d47d960b0
4
+ data.tar.gz: 6fb4c218cbe093862c9a61b418aa32b2a4594238
5
5
  SHA512:
6
- metadata.gz: 5441e543b1bc553e948df94b60073bac6377dd748d719b638254c3a19c79c4919370c5d621f8759ea57f8647e2bf667fc77738e973c7dc1176f612db68dce1c2
7
- data.tar.gz: c46e6753af936b3fd24b311b553dbcf57d91b6e59b4d69f98cb54a12454fb5dad0a62d8171741c3c0fd23e5e30062beb0fa26142c93b3b23997d22ff28b8f5ef
6
+ metadata.gz: abb2292ed00b147314a70f633619c62e77a20e5ccd7bd73c4cb91e2131c8e58b5764dc3a38a4bb840079cc51859618a654b1ef5ae32270ea8f58a7429f5a8fce
7
+ data.tar.gz: b5fee4533318cea0829dcb9e691d6ccea143e94157730e89fccae34dbeac3513f1620d39b8f46f876f18230d0361fbb53cd5817c5ed861224b6fc78241019285
@@ -133,12 +133,12 @@ module Bumbleworks
133
133
  subscribed_events.include? event.to_s
134
134
  end
135
135
 
136
- def kill!
137
- Bumbleworks.kill_process!(wfid)
136
+ def kill!(options = {})
137
+ Bumbleworks.kill_process!(wfid, options)
138
138
  end
139
139
 
140
- def cancel!
141
- Bumbleworks.cancel_process!(wfid)
140
+ def cancel!(options = {})
141
+ Bumbleworks.cancel_process!(wfid, options)
142
142
  end
143
143
 
144
144
  def process_status
@@ -1,3 +1,3 @@
1
1
  module Bumbleworks
2
- VERSION = "0.0.89"
2
+ VERSION = "0.0.90"
3
3
  end
@@ -1,9 +1,10 @@
1
1
  require 'securerandom'
2
+ require_relative "worker/info"
2
3
 
3
4
  class Bumbleworks::Worker < Ruote::Worker
4
5
  class WorkerStateNotChanged < StandardError; end
5
6
 
6
- attr_reader :id
7
+ attr_reader :id, :pid, :ip, :hostname, :system, :launched_at
7
8
 
8
9
  class << self
9
10
  def info
@@ -36,29 +37,6 @@ class Bumbleworks::Worker < Ruote::Worker
36
37
  }
37
38
  end
38
39
 
39
- def forget_worker(id_to_delete)
40
- purge_worker_info do |id, info|
41
- id == id_to_delete
42
- end
43
- end
44
-
45
- def purge_stale_worker_info
46
- purge_worker_info do |id, info|
47
- info['state'].nil? || info['state'] == 'stopped'
48
- end
49
- end
50
-
51
- def purge_worker_info(&block)
52
- doc = Bumbleworks.dashboard.storage.get('variables', 'workers')
53
- return unless doc
54
- doc['workers'] = doc['workers'].reject { |id, info|
55
- block.call(id, info)
56
- }
57
- result = Bumbleworks.dashboard.storage.put(doc)
58
- purge_stale_worker_info if result
59
- info
60
- end
61
-
62
40
  def change_worker_state(new_state, options = {})
63
41
  with_worker_state_enabled do
64
42
  Bumbleworks.dashboard.worker_state = new_state
@@ -91,7 +69,14 @@ class Bumbleworks::Worker < Ruote::Worker
91
69
 
92
70
  def initialize(*args, &block)
93
71
  super
72
+ @pid = Process.pid
94
73
  @id = SecureRandom.uuid
74
+ @launched_at = Time.now
75
+
76
+ @ip = Ruote.local_ip
77
+ @hostname = Socket.gethostname
78
+ @system = `uname -a`.strip rescue nil
79
+
95
80
  if @info
96
81
  @info = Info.new(self)
97
82
  save_info
@@ -117,53 +102,4 @@ class Bumbleworks::Worker < Ruote::Worker
117
102
  def info
118
103
  self.class.info[id]
119
104
  end
120
-
121
- class Info < Ruote::Worker::Info
122
- def save
123
- doc = @worker.storage.get('variables', 'workers') || {}
124
-
125
- doc['type'] = 'variables'
126
- doc['_id'] = 'workers'
127
-
128
- now = Time.now
129
-
130
- @msgs = @msgs.drop_while { |msg|
131
- Time.parse(msg['processed_at']) < now - 3600
132
- }
133
- mm = @msgs.drop_while { |msg|
134
- Time.parse(msg['processed_at']) < now - 60
135
- }
136
-
137
- hour_count = @msgs.size < 1 ? 1 : @msgs.size
138
- minute_count = mm.size < 1 ? 1 : mm.size
139
-
140
- (doc['workers'] ||= {})[@worker.id] = {
141
-
142
- 'class' => @worker.class.to_s,
143
- 'name' => @worker.name,
144
- 'ip' => @ip,
145
- 'hostname' => @hostname,
146
- 'pid' => $$,
147
- 'system' => @system,
148
- 'put_at' => Ruote.now_to_utc_s,
149
- 'uptime' => Time.now - @since,
150
- 'state' => @worker.state,
151
-
152
- 'processed_last_minute' =>
153
- mm.size,
154
- 'wait_time_last_minute' =>
155
- mm.inject(0.0) { |s, m| s + m['wait_time'] } / minute_count.to_f,
156
- 'processed_last_hour' =>
157
- @msgs.size,
158
- 'wait_time_last_hour' =>
159
- @msgs.inject(0.0) { |s, m| s + m['wait_time'] } / hour_count.to_f
160
- }
161
-
162
- r = @worker.storage.put(doc)
163
-
164
- @last_save = Time.now
165
-
166
- save if r != nil
167
- end
168
- end
169
105
  end
@@ -0,0 +1,176 @@
1
+ require_relative "proxy"
2
+
3
+ class Bumbleworks::Worker < Ruote::Worker
4
+ class Info < Ruote::Worker::Info
5
+ attr_reader :worker
6
+
7
+ class << self
8
+ def raw_hash
9
+ Bumbleworks.dashboard.worker_info || {}
10
+ end
11
+
12
+ def all
13
+ raw_hash.map { |k, v|
14
+ from_hash(v.merge('id' => k))
15
+ }
16
+ end
17
+
18
+ def where(options)
19
+ filter_proc = proc { |worker|
20
+ options.all? { |k, v|
21
+ worker.send(k.to_sym) == v
22
+ }
23
+ }
24
+ filter(&filter_proc)
25
+ end
26
+
27
+ def filter
28
+ return [] unless block_given?
29
+ all.select { |info| yield info.worker }
30
+ end
31
+
32
+ def [](worker_id)
33
+ from_hash(raw_hash[worker_id].merge('id' => worker_id))
34
+ end
35
+
36
+ def from_hash(hash)
37
+ new(Bumbleworks::Worker::Proxy.new(hash))
38
+ end
39
+
40
+ def forget_worker(id_to_delete)
41
+ purge_worker_info do |id, info|
42
+ id == id_to_delete
43
+ end
44
+ end
45
+
46
+ def purge_stale_worker_info
47
+ purge_worker_info do |id, info|
48
+ info['state'].nil? || info['state'] == 'stopped'
49
+ end
50
+ end
51
+
52
+ def purge_worker_info(&block)
53
+ doc = Bumbleworks.dashboard.storage.get('variables', 'workers')
54
+ return unless doc
55
+ doc['workers'] = doc['workers'].reject { |id, info|
56
+ block.call(id, info)
57
+ }
58
+ result = Bumbleworks.dashboard.storage.put(doc)
59
+ purge_stale_worker_info if result
60
+ all
61
+ end
62
+ end
63
+
64
+ def ==(other)
65
+ other.is_a?(Bumbleworks::Worker::Info) &&
66
+ other.worker == worker
67
+ end
68
+
69
+ def raw_hash
70
+ self.class.raw_hash[worker.id]
71
+ end
72
+
73
+ def updated_at
74
+ Time.parse(raw_hash['put_at'])
75
+ end
76
+
77
+ def updated_since?(latest_time)
78
+ updated_at >= latest_time
79
+ end
80
+
81
+ def updated_recently?(options = {})
82
+ options[:seconds_ago] ||= Bumbleworks.timeout
83
+ latest_time = Time.now - options[:seconds_ago]
84
+ updated_since?(latest_time)
85
+ end
86
+
87
+ def responding?(options = {})
88
+ options[:since] ||= Time.now - Bumbleworks.timeout
89
+ Bumbleworks::Worker.with_worker_state_enabled do
90
+ Bumbleworks::Support.wait_until(options) do
91
+ updated_since?(options[:since])
92
+ end
93
+ end
94
+ true
95
+ rescue Bumbleworks::Support::WaitTimeout
96
+ false
97
+ end
98
+
99
+ def stalling?
100
+ !responding?
101
+ end
102
+
103
+ def storage
104
+ @worker.storage || Bumbleworks.dashboard.storage
105
+ end
106
+
107
+ def initialize(worker)
108
+ @worker = worker
109
+ @last_save = Time.now - 2 * 60
110
+
111
+ @msgs = [] unless worker.is_a?(Bumbleworks::Worker::Proxy)
112
+ end
113
+
114
+ def worker_info_document
115
+ doc = storage.get('variables', 'workers') || {}
116
+
117
+ doc['type'] = 'variables'
118
+ doc['_id'] = 'workers'
119
+ doc['workers'] ||= {}
120
+ doc
121
+ end
122
+
123
+ def save
124
+ doc = worker_info_document
125
+
126
+ worker_info_hash = doc['workers'][@worker.id] || {}
127
+
128
+ worker_info_hash.merge!({
129
+ 'worker_id' => @worker.id,
130
+ 'class' => @worker.class.to_s,
131
+ 'name' => @worker.name,
132
+ 'ip' => @worker.ip,
133
+ 'hostname' => @worker.hostname,
134
+ 'pid' => @worker.pid,
135
+ 'system' => @worker.system,
136
+ 'put_at' => Ruote.now_to_utc_s,
137
+ 'uptime' => Time.now - @worker.launched_at,
138
+ 'launched_at' => @worker.launched_at,
139
+ 'state' => @worker.state
140
+ })
141
+
142
+ if defined?(@msgs)
143
+ now = Time.now
144
+
145
+ @msgs = @msgs.drop_while { |msg|
146
+ Time.parse(msg['processed_at']) < now - 3600
147
+ }
148
+ mm = @msgs.drop_while { |msg|
149
+ Time.parse(msg['processed_at']) < now - 60
150
+ }
151
+
152
+ hour_count = @msgs.size < 1 ? 1 : @msgs.size
153
+ minute_count = mm.size < 1 ? 1 : mm.size
154
+
155
+ worker_info_hash.merge!({
156
+ 'processed_last_minute' =>
157
+ mm.size,
158
+ 'wait_time_last_minute' =>
159
+ mm.inject(0.0) { |s, m| s + m['wait_time'] } / minute_count.to_f,
160
+ 'processed_last_hour' =>
161
+ @msgs.size,
162
+ 'wait_time_last_hour' =>
163
+ @msgs.inject(0.0) { |s, m| s + m['wait_time'] } / hour_count.to_f
164
+ })
165
+ end
166
+
167
+ doc['workers'][@worker.id] = worker_info_hash
168
+
169
+ r = storage.put(doc)
170
+
171
+ @last_save = Time.now
172
+
173
+ save if r != nil
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,25 @@
1
+ class Bumbleworks::Worker < Ruote::Worker
2
+ class Proxy
3
+ ProxiedAttributes = [
4
+ :id, :pid, :ip, :hostname, :system, :launched_at, :state, :name, :class
5
+ ]
6
+
7
+ attr_reader *(ProxiedAttributes - [:launched_at])
8
+ attr_reader :raw_hash
9
+
10
+ def initialize(attributes)
11
+ @raw_hash = attributes
12
+ ProxiedAttributes.each do |key|
13
+ instance_variable_set(:"@#{key}", attributes[key.to_s])
14
+ end
15
+ end
16
+
17
+ def launched_at
18
+ Time.parse(@launched_at)
19
+ end
20
+
21
+ def ==(other)
22
+ raw_hash == other.raw_hash
23
+ end
24
+ end
25
+ end
@@ -342,16 +342,16 @@ describe Bumbleworks::Process do
342
342
  describe '#kill!' do
343
343
  it 'kills process' do
344
344
  bp = described_class.new('frogheads')
345
- expect(Bumbleworks).to receive(:kill_process!).with('frogheads')
346
- bp.kill!
345
+ expect(Bumbleworks).to receive(:kill_process!).with('frogheads', :an => :option)
346
+ bp.kill!(:an => :option)
347
347
  end
348
348
  end
349
349
 
350
350
  describe '#cancel!' do
351
351
  it 'cancels process' do
352
352
  bp = described_class.new('frogheads')
353
- expect(Bumbleworks).to receive(:cancel_process!).with('frogheads')
354
- bp.cancel!
353
+ expect(Bumbleworks).to receive(:cancel_process!).with('frogheads', :an => :option)
354
+ bp.cancel!(:an => :option)
355
355
  end
356
356
  end
357
357
 
@@ -257,7 +257,7 @@ describe Bumbleworks::Task do
257
257
  context 'by params' do
258
258
  before(:each) do
259
259
  Bumbleworks.launch!('emergency_hamster_bullet')
260
- Bumbleworks.dashboard.wait_for(:officer)
260
+ Bumbleworks.dashboard.wait_for(:rhubarb)
261
261
  end
262
262
 
263
263
  describe '.order_by_param' do
@@ -0,0 +1,205 @@
1
+ describe Bumbleworks::Worker::Info do
2
+ let(:context) { Bumbleworks.dashboard.context }
3
+ let(:proxy) {
4
+ Bumbleworks::Worker::Proxy.new(
5
+ 'class' => :f_class,
6
+ 'pid' => :f_pid,
7
+ 'name' => :f_name,
8
+ 'id' => :f_id,
9
+ 'state' => :f_state,
10
+ 'ip' => :f_ip,
11
+ 'hostname' => :f_hostname,
12
+ 'system' => :f_system,
13
+ 'launched_at' => :f_launched_at
14
+ )
15
+ }
16
+ subject { described_class.new(proxy) }
17
+
18
+ describe '.raw_hash' do
19
+ it 'returns Bumbleworks.dashboard.worker_info' do
20
+ allow(Bumbleworks.dashboard).to receive(:worker_info).and_return(:bontron)
21
+ expect(described_class.raw_hash).to eq(:bontron)
22
+ end
23
+
24
+ it 'returns empty hash if worker_info is nil' do
25
+ allow(Bumbleworks.dashboard).to receive(:worker_info).and_return(nil)
26
+ expect(described_class.raw_hash).to eq({})
27
+ end
28
+ end
29
+
30
+ describe '.from_hash' do
31
+ it 'returns an info object using a proxy worker with given attributes' do
32
+ hash = {
33
+ 'class' => :f_class,
34
+ 'pid' => :f_pid,
35
+ 'name' => :f_name,
36
+ 'id' => :f_id,
37
+ 'state' => :f_state,
38
+ 'ip' => :f_ip,
39
+ 'hostname' => :f_hostname,
40
+ 'system' => :f_system,
41
+ 'launched_at' => :f_launched_at
42
+ }
43
+ allow(described_class).to receive(:new).
44
+ with(proxy).
45
+ and_return(:proxy)
46
+ expect(described_class.from_hash(hash)).to eq(:proxy)
47
+ end
48
+ end
49
+
50
+ context 'with fake raw hash' do
51
+ before(:each) do
52
+ raw_hash = {
53
+ 'f_id' => { 'foo' => 1 },
54
+ 'b_id' => { 'bar' => 1 }
55
+ }
56
+ allow(described_class).to receive(:raw_hash).
57
+ and_return(raw_hash)
58
+ end
59
+
60
+ describe '.[]' do
61
+ it 'calls from_hash with raw data for given worker id' do
62
+ allow(described_class).to receive(:from_hash).
63
+ with({ 'foo' => 1, 'id' => 'f_id' }).and_return(:foo_info)
64
+ expect(described_class['f_id']).to eq(:foo_info)
65
+ end
66
+ end
67
+
68
+ describe '.all' do
69
+ it 'converts raw hash into info instances' do
70
+ allow(described_class).to receive(:from_hash).
71
+ with({ 'foo' => 1, 'id' => 'f_id'}).and_return(:foo_info)
72
+ allow(described_class).to receive(:from_hash).
73
+ with({ 'bar' => 1, 'id' => 'b_id'}).and_return(:bar_info)
74
+ expect(described_class.all).to match_array([:foo_info, :bar_info])
75
+ end
76
+ end
77
+ end
78
+
79
+ context 'with multiple workers' do
80
+ let!(:workers) {
81
+ 3.times.map { |i|
82
+ worker = Bumbleworks::Worker.new(context)
83
+ worker.run_in_thread
84
+ worker
85
+ }
86
+ }
87
+
88
+ describe '.filter' do
89
+ it 'returns info objects for workers that pass given block' do
90
+ expect(described_class.filter { |worker|
91
+ worker.id != workers[0].id
92
+ }).to match_array([
93
+ described_class[workers[1].id],
94
+ described_class[workers[2].id]
95
+ ])
96
+ end
97
+ end
98
+
99
+ describe '.where' do
100
+ it 'returns info objects for workers that match given criteria' do
101
+ expect(described_class.where(:id => workers[0].id)).
102
+ to match_array([described_class[workers[0].id]])
103
+ end
104
+ end
105
+
106
+ describe '.forget_worker' do
107
+ it 'deletes worker info for given worker id' do
108
+ described_class.forget_worker(workers[1].id)
109
+ expect(described_class.raw_hash.keys).not_to include(workers[1].id)
110
+ end
111
+ end
112
+
113
+ describe '.purge_stale_worker_info' do
114
+ it 'deletes all worker info where state is stopped or nil' do
115
+ workers[0].shutdown
116
+ workers[1].instance_variable_set(:@state, nil)
117
+ workers[1].instance_variable_get(:@info).save
118
+ remaining_worker_info = described_class[workers[2].id]
119
+ described_class.purge_stale_worker_info
120
+ expect(described_class.all).to eq([remaining_worker_info])
121
+ end
122
+
123
+ it 'returns without issue if no workers' do
124
+ doc = Bumbleworks.dashboard.storage.get('variables', 'workers')
125
+ Bumbleworks.dashboard.storage.delete(doc)
126
+ described_class.purge_stale_worker_info
127
+ end
128
+ end
129
+ end
130
+
131
+ describe "#updated_at" do
132
+ it "returns parsed put_at from raw hash for worker" do
133
+ allow(subject).to receive(:raw_hash).and_return({
134
+ 'put_at' => '2015-10-12 11:15:30'
135
+ })
136
+ expect(subject.updated_at).to eq(Time.parse('2015-10-12 11:15:30'))
137
+ end
138
+ end
139
+
140
+ describe "#updated_since?" do
141
+ let(:frozen_time) { Time.now }
142
+
143
+ it "returns true if updated_at after given time" do
144
+ allow(subject).to receive(:updated_at).and_return(frozen_time - 2)
145
+ expect(subject).to be_updated_since(frozen_time - 3)
146
+ end
147
+
148
+ it "returns false if updated_at before given time" do
149
+ allow(subject).to receive(:updated_at).and_return(frozen_time - 3)
150
+ expect(subject).not_to be_updated_since(frozen_time - 2)
151
+ end
152
+ end
153
+
154
+ describe "#updated_recently?" do
155
+ before(:each) do
156
+ allow(Bumbleworks).to receive(:timeout).and_return(3)
157
+ end
158
+
159
+ it "returns true if updated_at is no more than Bumbleworks.timeout seconds ago" do
160
+ allow(subject).to receive(:updated_at).and_return(Time.now - 2)
161
+ expect(subject).to be_updated_recently
162
+ end
163
+
164
+ it "returns false if updated_at is more than Bumbleworks.timeout seconds ago" do
165
+ allow(subject).to receive(:updated_at).and_return(Time.now - 4)
166
+ expect(subject).not_to be_updated_recently
167
+ end
168
+
169
+ it "allows override of how many seconds ago" do
170
+ allow(subject).to receive(:updated_at).and_return(Time.now - 15)
171
+ expect(subject).to be_updated_recently(seconds_ago: 20)
172
+ end
173
+ end
174
+
175
+ describe "#raw_hash" do
176
+ it "returns value from worker_info hash at key of worker id" do
177
+ allow(described_class).to receive(:raw_hash).and_return({
178
+ :f_id => :foo_hash,
179
+ :b_id => :bar_hash
180
+ })
181
+ expect(subject.raw_hash).to eq(:foo_hash)
182
+ end
183
+ end
184
+
185
+ describe "#responding?" do
186
+ it "returns true if updated_recently? returns true in time" do
187
+ allow(subject).to receive(:updated_since?).and_return(true)
188
+ expect(subject).to be_responding
189
+ end
190
+
191
+ it "returns false if updated_recently? does not return true in time" do
192
+ allow(subject).to receive(:updated_since?).and_raise(Bumbleworks::Support::WaitTimeout)
193
+ expect(subject).not_to be_responding
194
+ end
195
+ end
196
+
197
+ describe "#stalling?" do
198
+ it "returns inverse of #responding?" do
199
+ allow(subject).to receive(:responding?).and_return(true)
200
+ expect(subject).not_to be_stalling
201
+ allow(subject).to receive(:responding?).and_return(false)
202
+ expect(subject).to be_stalling
203
+ end
204
+ end
205
+ end
@@ -0,0 +1,22 @@
1
+ describe Bumbleworks::Worker::Proxy do
2
+ subject {
3
+ described_class.new(
4
+ 'class' => :f_class,
5
+ 'pid' => :f_pid,
6
+ 'name' => :f_name,
7
+ 'id' => :f_id,
8
+ 'state' => :f_state,
9
+ 'ip' => :f_ip,
10
+ 'hostname' => :f_hostname,
11
+ 'system' => :f_system,
12
+ 'launched_at' => :f_launched_at
13
+ )
14
+ }
15
+
16
+ describe "#launched_at" do
17
+ it "returns initialized launched_at string parsed as Time" do
18
+ allow(Time).to receive(:parse).with(:f_launched_at).and_return(:a_time)
19
+ expect(subject.launched_at).to eq(:a_time)
20
+ end
21
+ end
22
+ end
@@ -45,25 +45,6 @@ describe Bumbleworks::Worker do
45
45
  end
46
46
  end
47
47
 
48
- describe '.info' do
49
- it 'returns Bumbleworks.dashboard.worker_info' do
50
- allow(Bumbleworks.dashboard).to receive(:worker_info).and_return(:bontron)
51
- expect(described_class.info).to eq(:bontron)
52
- end
53
-
54
- it 'returns empty hash if worker_info is nil' do
55
- allow(Bumbleworks.dashboard).to receive(:worker_info).and_return(nil)
56
- expect(described_class.info).to eq({})
57
- end
58
- end
59
-
60
- describe '.forget_worker' do
61
- it 'deletes worker info for given worker id' do
62
- described_class.forget_worker(workers[1].id)
63
- expect(described_class.info.keys).not_to include(workers[1].id)
64
- end
65
- end
66
-
67
48
  describe '.refresh_worker_info' do
68
49
  it 'times out if info is not updated in time' do
69
50
  allow(described_class).to receive(:info).and_return({
@@ -91,26 +72,6 @@ describe Bumbleworks::Worker do
91
72
  end
92
73
  end
93
74
 
94
- describe '.purge_stale_worker_info' do
95
- it 'deletes all worker info where state is stopped or nil' do
96
- subject.run_in_thread
97
- workers[0].shutdown
98
- workers[1].instance_variable_set(:@state, nil)
99
- workers[1].instance_variable_get(:@info).save
100
- subject_info = described_class.info[subject.id]
101
- described_class.purge_stale_worker_info
102
- expect(described_class.info).to eq({
103
- subject.id => subject_info
104
- })
105
- end
106
-
107
- it 'returns without issue if no workers' do
108
- doc = Bumbleworks.dashboard.storage.get('variables', 'workers')
109
- Bumbleworks.dashboard.storage.delete(doc)
110
- described_class.purge_stale_worker_info
111
- end
112
- end
113
-
114
75
  describe '.change_worker_state' do
115
76
  it 'changes state of all workers' do
116
77
  expect(workers.map(&:state).uniq).to eq(['running'])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bumbleworks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.89
4
+ version: 0.0.90
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maher Hawash
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-11-07 00:00:00.000000000 Z
14
+ date: 2015-03-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: ruote
@@ -183,6 +183,8 @@ files:
183
183
  - lib/bumbleworks/user.rb
184
184
  - lib/bumbleworks/version.rb
185
185
  - lib/bumbleworks/worker.rb
186
+ - lib/bumbleworks/worker/info.rb
187
+ - lib/bumbleworks/worker/proxy.rb
186
188
  - lib/bumbleworks/workitem.rb
187
189
  - lib/bumbleworks/workitem_entity_storage.rb
188
190
  - lib/tasks/bumbleworks.rake
@@ -236,6 +238,8 @@ files:
236
238
  - spec/lib/bumbleworks/tracker_spec.rb
237
239
  - spec/lib/bumbleworks/tree_builder_spec.rb
238
240
  - spec/lib/bumbleworks/user_spec.rb
241
+ - spec/lib/bumbleworks/worker/info_spec.rb
242
+ - spec/lib/bumbleworks/worker/proxy_spec.rb
239
243
  - spec/lib/bumbleworks/worker_spec.rb
240
244
  - spec/lib/bumbleworks/workitem_entity_storage_spec.rb
241
245
  - spec/lib/bumbleworks/workitem_spec.rb
@@ -320,6 +324,8 @@ test_files:
320
324
  - spec/lib/bumbleworks/tracker_spec.rb
321
325
  - spec/lib/bumbleworks/tree_builder_spec.rb
322
326
  - spec/lib/bumbleworks/user_spec.rb
327
+ - spec/lib/bumbleworks/worker/info_spec.rb
328
+ - spec/lib/bumbleworks/worker/proxy_spec.rb
323
329
  - spec/lib/bumbleworks/worker_spec.rb
324
330
  - spec/lib/bumbleworks/workitem_entity_storage_spec.rb
325
331
  - spec/lib/bumbleworks/workitem_spec.rb