resque-director 2.2.1 → 2.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.2.1
1
+ 2.2.2
@@ -26,22 +26,25 @@ module Resque
26
26
  end
27
27
 
28
28
  def scale_within_requirements
29
- number_of_workers = WorkerTracker.new.total_for_requirements
29
+ tracker = WorkerTracker.new
30
+ number_of_workers = tracker.total_for_requirements
30
31
  if number_of_workers > 0
31
- scale_up(number_of_workers)
32
+ set_last_scaled unless start(number_of_workers) == false
32
33
  elsif number_of_workers < 0
33
- scale_down(number_of_workers * -1)
34
+ set_last_scaled unless stop(tracker, number_of_workers * -1) == false
34
35
  end
35
36
  end
36
37
 
37
38
  def scaling(number_of_workers=1)
38
39
  return unless time_to_scale? && number_of_workers > 0
39
- unless yield == false
40
- Resque.redis.set("last_scaled_#{[Config.queue].flatten.join('')}", Time.now.utc.to_i)
41
- end
40
+ set_last_scaled unless yield == false
42
41
  end
43
42
 
44
43
  private
44
+
45
+ def set_last_scaled
46
+ Resque.redis.set("last_scaled_#{[Config.queue].flatten.join('')}", Time.now.utc.to_i)
47
+ end
45
48
 
46
49
  def time_to_scale?
47
50
  last_time = Resque.redis.get("last_scaled_#{[Config.queue].flatten.join('')}")
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{resque-director}
8
- s.version = "2.2.1"
8
+ s.version = "2.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Nolan Frausto}]
12
- s.date = %q{2011-09-07}
12
+ s.date = %q{2011-09-09}
13
13
  s.description = %q{resque plugin for automatically scaling workers based on the amount of time it takes a job to go through the queue and/or the length of the queue }
14
14
  s.email = %q{nrfrausto@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -42,7 +42,7 @@ Gem::Specification.new do |s|
42
42
  s.homepage = %q{http://github.com/frausto/resque-director}
43
43
  s.licenses = [%q{MIT}]
44
44
  s.require_paths = [%q{lib}]
45
- s.rubygems_version = %q{1.8.6}
45
+ s.rubygems_version = %q{1.8.8}
46
46
  s.summary = %q{A resque plugin for automatically scaling workers}
47
47
 
48
48
  if s.respond_to? :specification_version then
@@ -232,32 +232,61 @@ describe Resque::Plugins::Director::Scaler do
232
232
  describe "#scale_within_requirements" do
233
233
  it "should not scale up workers if the minumum number or greater are already running" do
234
234
  Resque::Worker.new(:test).register_worker
235
- subject.should_not_receive(:scale_up)
235
+ subject.should_not_receive(:start)
236
+ subject.should_not_receive(:stop)
236
237
  subject.scale_within_requirements
237
238
  end
238
239
 
239
240
  it "should scale up the minimum number of workers if non are running" do
240
241
  Resque::Plugins::Director::Config.setup :min_workers => 2
241
- subject.should_receive(:scale_up).with(2)
242
+ subject.should_receive(:start).with(2)
242
243
  subject.scale_within_requirements
243
244
  end
244
245
 
246
+ it "should scale workers ignoring the last scaled time" do
247
+ Resque::Plugins::Director::Config.setup :min_workers => 2, :wait_time => 60
248
+ subject.scaling { true }
249
+ subject.should_receive(:start).with(2)
250
+ subject.scale_within_requirements
251
+ end
252
+
253
+ it "should set the last scaled time if scaling up" do
254
+ @now = Time.now
255
+ Time.stub(:now => @now)
256
+ Resque::Plugins::Director::Config.setup :min_workers => 1, :wait_time => 60
257
+ subject.should_receive(:start)
258
+ subject.scale_within_requirements
259
+ Resque.redis.get("last_scaled_test").to_i.should == @now.utc.to_i
260
+ end
261
+
262
+ it "should set the last scaled time if scaling down" do
263
+ @now = Time.now
264
+ Time.stub(:now => @now)
265
+ Resque::Plugins::Director::Config.setup :max_workers => 1, :wait_time => 60
266
+ workers = 2.times.map { Resque::Worker.new(:test) }
267
+ Resque.should_receive(:workers).and_return(workers)
268
+ subject.should_receive(:stop)
269
+
270
+ subject.scale_within_requirements
271
+ Resque.redis.get("last_scaled_test").to_i.should == @now.utc.to_i
272
+ end
273
+
245
274
  it "should ensure at least one worker is running if min_workers is less than zero" do
246
275
  Resque::Plugins::Director::Config.setup :min_workers => -10
247
- subject.should_receive(:scale_up).with(1)
276
+ subject.should_receive(:start).with(1)
248
277
  subject.scale_within_requirements
249
278
  end
250
279
 
251
280
  it "should ensure at least one worker is running if min_workers is zero" do
252
281
  Resque::Plugins::Director::Config.setup :min_workers => 0
253
- subject.should_receive(:scale_up).with(1)
282
+ subject.should_receive(:start).with(1)
254
283
  subject.scale_within_requirements
255
284
  end
256
285
 
257
286
  it "should scale up the minimum number of workers if less than the minimum are running" do
258
287
  Resque::Plugins::Director::Config.setup :min_workers => 2
259
288
  Resque::Worker.new(:test).register_worker
260
- subject.should_receive(:scale_up).with(1)
289
+ subject.should_receive(:start).with(1)
261
290
  subject.scale_within_requirements
262
291
  end
263
292
 
@@ -266,7 +295,7 @@ describe Resque::Plugins::Director::Scaler do
266
295
  workers = 2.times.map { Resque::Worker.new(:test) }
267
296
  Resque.should_receive(:workers).and_return(workers)
268
297
 
269
- subject.should_receive(:scale_down).with(1)
298
+ subject.should_receive(:stop).with(anything, 1)
270
299
  subject.scale_within_requirements
271
300
  end
272
301
 
@@ -275,19 +304,19 @@ describe Resque::Plugins::Director::Scaler do
275
304
  workers = 1.times.map { Resque::Worker.new(:test) }
276
305
  Resque.should_receive(:workers).and_return(workers)
277
306
 
278
- subject.should_not_receive(:scale_down)
307
+ subject.should_not_receive(:stop)
279
308
  subject.scale_within_requirements
280
309
  end
281
310
 
282
311
  it "should ignore workers from other queues" do
283
312
  Resque::Worker.new(:other).register_worker
284
- subject.should_receive(:scale_up).with(1)
313
+ subject.should_receive(:start).with(1)
285
314
  subject.scale_within_requirements
286
315
  end
287
316
 
288
317
  it "should ignore workers on multiple queues" do
289
318
  Resque::Worker.new(:test, :other).register_worker
290
- subject.should_receive(:scale_up).with(1)
319
+ subject.should_receive(:start).with(1)
291
320
  subject.scale_within_requirements
292
321
  end
293
322
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-director
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 2
9
- - 1
10
- version: 2.2.1
9
+ - 2
10
+ version: 2.2.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nolan Frausto
@@ -15,10 +15,9 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-07 00:00:00 Z
18
+ date: 2011-09-09 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- type: :runtime
22
21
  requirement: &id001 !ruby/object:Gem::Requirement
23
22
  none: false
24
23
  requirements:
@@ -32,8 +31,8 @@ dependencies:
32
31
  version_requirements: *id001
33
32
  name: resque
34
33
  prerelease: false
34
+ type: :runtime
35
35
  - !ruby/object:Gem::Dependency
36
- type: :development
37
36
  requirement: &id002 !ruby/object:Gem::Requirement
38
37
  none: false
39
38
  requirements:
@@ -48,8 +47,8 @@ dependencies:
48
47
  version_requirements: *id002
49
48
  name: rspec
50
49
  prerelease: false
51
- - !ruby/object:Gem::Dependency
52
50
  type: :development
51
+ - !ruby/object:Gem::Dependency
53
52
  requirement: &id003 !ruby/object:Gem::Requirement
54
53
  none: false
55
54
  requirements:
@@ -64,8 +63,8 @@ dependencies:
64
63
  version_requirements: *id003
65
64
  name: bundler
66
65
  prerelease: false
67
- - !ruby/object:Gem::Dependency
68
66
  type: :development
67
+ - !ruby/object:Gem::Dependency
69
68
  requirement: &id004 !ruby/object:Gem::Requirement
70
69
  none: false
71
70
  requirements:
@@ -80,8 +79,8 @@ dependencies:
80
79
  version_requirements: *id004
81
80
  name: jeweler
82
81
  prerelease: false
83
- - !ruby/object:Gem::Dependency
84
82
  type: :development
83
+ - !ruby/object:Gem::Dependency
85
84
  requirement: &id005 !ruby/object:Gem::Requirement
86
85
  none: false
87
86
  requirements:
@@ -94,8 +93,8 @@ dependencies:
94
93
  version_requirements: *id005
95
94
  name: rcov
96
95
  prerelease: false
97
- - !ruby/object:Gem::Dependency
98
96
  type: :development
97
+ - !ruby/object:Gem::Dependency
99
98
  requirement: &id006 !ruby/object:Gem::Requirement
100
99
  none: false
101
100
  requirements:
@@ -110,8 +109,8 @@ dependencies:
110
109
  version_requirements: *id006
111
110
  name: yajl-ruby
112
111
  prerelease: false
113
- - !ruby/object:Gem::Dependency
114
112
  type: :development
113
+ - !ruby/object:Gem::Dependency
115
114
  requirement: &id007 !ruby/object:Gem::Requirement
116
115
  none: false
117
116
  requirements:
@@ -126,6 +125,7 @@ dependencies:
126
125
  version_requirements: *id007
127
126
  name: json
128
127
  prerelease: false
128
+ type: :development
129
129
  description: "resque plugin for automatically scaling workers based on the amount of time it takes a job to go through the queue and/or the length of the queue "
130
130
  email: nrfrausto@gmail.com
131
131
  executables: []
@@ -186,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
186
  requirements: []
187
187
 
188
188
  rubyforge_project:
189
- rubygems_version: 1.8.6
189
+ rubygems_version: 1.8.8
190
190
  signing_key:
191
191
  specification_version: 3
192
192
  summary: A resque plugin for automatically scaling workers