resque-director 2.2.1 → 2.2.2

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.
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