resque-heroku-autoscaler 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/GEMFILE +0 -1
- data/README.md +9 -0
- data/lib/resque/plugins/heroku_autoscaler/config.rb +12 -0
- data/lib/resque/plugins/heroku_autoscaler/version.rb +1 -1
- data/lib/resque/plugins/resque_heroku_autoscaler.rb +12 -0
- data/spec/config_spec.rb +10 -0
- data/spec/resque_heroku_autoscaler_spec.rb +42 -1
- metadata +4 -4
data/GEMFILE
CHANGED
data/README.md
CHANGED
@@ -54,6 +54,15 @@ Per default RHA will only start a single worker, no matter how many jobs are pen
|
|
54
54
|
|
55
55
|
When calculating the new number of required workers the block given to new_worker_count will be called. Thus the example will result in starting one additional worker for every 5 pending jobs.
|
56
56
|
|
57
|
+
You might want to turn off scaling of your workers in development modus. You can do that by setting _scaling_disabled_ to true in your init script:
|
58
|
+
|
59
|
+
if (Rails.env == 'development')
|
60
|
+
Resque::Plugins::HerokuAutoscaler.config do |c|
|
61
|
+
c.scaling_disabled = true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
57
66
|
|
58
67
|
[dh]: http://blog.darkhax.com/2010/07/30/auto-scale-your-resque-workers-on-heroku
|
59
68
|
[rq]: http://github.com/defunkt/resque
|
@@ -4,6 +4,13 @@ module Resque
|
|
4
4
|
module Config
|
5
5
|
extend self
|
6
6
|
|
7
|
+
@scaling_disabled = false
|
8
|
+
|
9
|
+
attr_writer :scaling_disabled
|
10
|
+
def scaling_disabled?
|
11
|
+
@scaling_disabled
|
12
|
+
end
|
13
|
+
|
7
14
|
@new_worker_count = Proc.new {|pending| pending >0 ? 1 : 0}
|
8
15
|
|
9
16
|
attr_writer :heroku_user
|
@@ -28,6 +35,11 @@ module Resque
|
|
28
35
|
@new_worker_count.call(pending, *payload)
|
29
36
|
end
|
30
37
|
end
|
38
|
+
|
39
|
+
def reset
|
40
|
+
@scaling_disabled = false
|
41
|
+
@new_worker_count = Proc.new {|pending| pending >0 ? 1 : 0}
|
42
|
+
end
|
31
43
|
end
|
32
44
|
end
|
33
45
|
end
|
@@ -39,8 +39,20 @@ module Resque
|
|
39
39
|
private
|
40
40
|
|
41
41
|
def calculate_and_set_workers
|
42
|
+
if Resque::Plugins::HerokuAutoscaler::Config.scaling_disabled?
|
43
|
+
log "Scaling workers disabled. Skipping."
|
44
|
+
return
|
45
|
+
end
|
42
46
|
set_workers(Resque::Plugins::HerokuAutoscaler::Config.new_worker_count(Resque.info[:pending]))
|
43
47
|
end
|
48
|
+
|
49
|
+
def log(message)
|
50
|
+
if defined?(Rails)
|
51
|
+
Rails.logger.info(message)
|
52
|
+
else
|
53
|
+
puts message
|
54
|
+
end
|
55
|
+
end
|
44
56
|
end
|
45
57
|
end
|
46
58
|
end
|
data/spec/config_spec.rb
CHANGED
@@ -43,6 +43,16 @@ describe Resque::Plugins::HerokuAutoscaler::Config do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
+
describe ".scaling_disabled?" do
|
47
|
+
|
48
|
+
it{ Resque::Plugins::HerokuAutoscaler::Config.scaling_disabled?.should be_false}
|
49
|
+
|
50
|
+
it "sets scaling to disabled" do
|
51
|
+
subject.scaling_disabled = true
|
52
|
+
subject.scaling_disabled?.should be_true
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
46
56
|
describe ".new_worker_count" do
|
47
57
|
before do
|
48
58
|
@original_method = Resque::Plugins::HerokuAutoscaler::Config.instance_variable_get(:@new_worker_count)
|
@@ -24,6 +24,8 @@ describe Resque::Plugins::HerokuAutoscaler do
|
|
24
24
|
@fake_heroku_client = Object.new
|
25
25
|
stub(@fake_heroku_client).set_workers
|
26
26
|
stub(@fake_heroku_client).info { {:workers => 0} }
|
27
|
+
stub(TestJob).log
|
28
|
+
Resque::Plugins::HerokuAutoscaler::Config.reset
|
27
29
|
end
|
28
30
|
|
29
31
|
it "should be a valid Resque plugin" do
|
@@ -69,6 +71,19 @@ describe Resque::Plugins::HerokuAutoscaler do
|
|
69
71
|
TestJob.after_enqueue_scale_workers_up
|
70
72
|
end
|
71
73
|
end
|
74
|
+
|
75
|
+
context "when scaling workers is disabled" do
|
76
|
+
before do
|
77
|
+
subject.config do |c|
|
78
|
+
c.scaling_disabled = true
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should not use the heroku client" do
|
83
|
+
dont_allow(TestJob).heroku_client
|
84
|
+
TestJob.after_enqueue_scale_workers_up
|
85
|
+
end
|
86
|
+
end
|
72
87
|
end
|
73
88
|
|
74
89
|
describe ".after_perform_scale_workers_down" do
|
@@ -128,6 +143,19 @@ describe Resque::Plugins::HerokuAutoscaler do
|
|
128
143
|
TestJob.after_perform_scale_workers_down
|
129
144
|
end
|
130
145
|
end
|
146
|
+
|
147
|
+
context "when scaling workers is disabled" do
|
148
|
+
before do
|
149
|
+
subject.config do |c|
|
150
|
+
c.scaling_disabled = true
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should not use the heroku client" do
|
155
|
+
dont_allow(TestJob).heroku_client
|
156
|
+
TestJob.after_perform_scale_workers_down
|
157
|
+
end
|
158
|
+
end
|
131
159
|
end
|
132
160
|
|
133
161
|
describe ".on_failure_scale_workers" do
|
@@ -187,6 +215,19 @@ describe Resque::Plugins::HerokuAutoscaler do
|
|
187
215
|
TestJob.on_failure_scale_workers
|
188
216
|
end
|
189
217
|
end
|
218
|
+
|
219
|
+
context "when scaling workers is disabled" do
|
220
|
+
before do
|
221
|
+
subject.config do |c|
|
222
|
+
c.scaling_disabled = true
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
it "should not use the heroku client" do
|
227
|
+
dont_allow(TestJob).heroku_client
|
228
|
+
TestJob.on_failure_scale_workers
|
229
|
+
end
|
230
|
+
end
|
190
231
|
end
|
191
232
|
|
192
233
|
describe ".set_workers" do
|
@@ -196,7 +237,7 @@ describe Resque::Plugins::HerokuAutoscaler do
|
|
196
237
|
end
|
197
238
|
|
198
239
|
stub(TestJob).current_workers {0}
|
199
|
-
mock(TestJob).heroku_client {
|
240
|
+
mock(TestJob).heroku_client { mock(@fake_heroku_client).set_workers('some_app_name', 10) }
|
200
241
|
TestJob.set_workers(10)
|
201
242
|
end
|
202
243
|
end
|
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:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
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-
|
18
|
+
date: 2011-04-16 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|