resque-heroku-autoscaler 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  module Resque
2
2
  module Plugins
3
3
  module HerokuAutoscaler
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.2"
5
5
  end
6
6
  end
7
7
  end
@@ -6,11 +6,15 @@ module Resque
6
6
  @@heroku_client = nil
7
7
 
8
8
  def after_enqueue_scale_workers_up(*args)
9
- set_workers(Resque::Plugins::HerokuAutoscaler::Config.new_worker_count(Resque.info[:pending]))
9
+ calculate_and_set_workers
10
10
  end
11
11
 
12
12
  def after_perform_scale_workers_down(*args)
13
- set_workers(Resque::Plugins::HerokuAutoscaler::Config.new_worker_count(Resque.info[:pending]))
13
+ calculate_and_set_workers
14
+ end
15
+
16
+ def on_failure_scale_workers(*args)
17
+ calculate_and_set_workers
14
18
  end
15
19
 
16
20
  def set_workers(number_of_workers)
@@ -31,6 +35,12 @@ module Resque
31
35
  def self.config
32
36
  yield Resque::Plugins::HerokuAutoscaler::Config
33
37
  end
38
+
39
+ private
40
+
41
+ def calculate_and_set_workers
42
+ set_workers(Resque::Plugins::HerokuAutoscaler::Config.new_worker_count(Resque.info[:pending]))
43
+ end
34
44
  end
35
45
  end
36
46
  end
@@ -130,6 +130,65 @@ describe Resque::Plugins::HerokuAutoscaler do
130
130
  end
131
131
  end
132
132
 
133
+ describe ".on_failure_scale_workers" do
134
+ before do
135
+ stub(TestJob).heroku_client { @fake_heroku_client }
136
+ end
137
+
138
+ it "should add the hook" do
139
+ Resque::Plugin.failure_hooks(TestJob).should include("on_failure_scale_workers")
140
+ end
141
+
142
+ it "should take whatever args Resque hands in" do
143
+ Resque::Plugins::HerokuAutoscaler.class_eval("@@heroku_client = nil")
144
+ stub(Heroku::Client).new { stub!.set_workers }
145
+
146
+ lambda { TestJob.on_failure_scale_workers("some", "random", "aguments", 42) }.should_not raise_error
147
+ end
148
+
149
+ context "when the queue is empty" do
150
+ before do
151
+ stub(Resque).info { {:pending => 0} }
152
+ end
153
+
154
+ it "should set workers to 0" do
155
+ mock(TestJob).set_workers(0)
156
+ TestJob.on_failure_scale_workers
157
+ end
158
+ end
159
+
160
+ context "when the queue is not empty" do
161
+ before do
162
+ stub(Resque).info { {:pending => 1} }
163
+ end
164
+
165
+ it "should keep workers at 1" do
166
+ mock(TestJob).set_workers(1)
167
+ TestJob.on_failure_scale_workers
168
+ end
169
+ end
170
+
171
+ context "when new_worker_count was changed" do
172
+ before do
173
+ @original_method = Resque::Plugins::HerokuAutoscaler::Config.instance_variable_get(:@new_worker_count)
174
+ subject.config do |c|
175
+ c.new_worker_count do
176
+ 2
177
+ end
178
+ end
179
+ end
180
+
181
+ after do
182
+ Resque::Plugins::HerokuAutoscaler::Config.instance_variable_set(:@new_worker_count, @original_method)
183
+ end
184
+
185
+ it "should use the given block" do
186
+ mock(TestJob).set_workers(2)
187
+ TestJob.on_failure_scale_workers
188
+ end
189
+ end
190
+ end
191
+
133
192
  describe ".set_workers" do
134
193
  it "should use the Heroku client to set the workers" do
135
194
  subject.config do |c|
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-heroku-autoscaler
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 1
10
- version: 0.2.1
9
+ - 2
10
+ version: 0.2.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alexander Murmann
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-11 00:00:00 -08:00
18
+ date: 2011-03-31 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency