resque-director 2.2.3 → 2.2.4
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/Gemfile +4 -3
- data/HISTORY.md +4 -0
- data/VERSION +1 -1
- data/lib/resque-director.rb +2 -6
- data/lib/resque/plugins/director.rb +12 -0
- data/resque-director.gemspec +23 -22
- metadata +40 -71
- data/lib/resque/plugins/director/push_pop.rb +0 -37
- data/spec/resque/plugins/director/push_pop_spec.rb +0 -46
data/Gemfile
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
source "http://rubygems.org"
|
|
2
2
|
|
|
3
3
|
gem 'resque', "~> 1.10"
|
|
4
|
+
gem "resque-remora", "~> 0.1.0"
|
|
4
5
|
|
|
5
6
|
group :development do
|
|
6
|
-
gem "rspec", "~> 2.
|
|
7
|
-
gem "bundler", "~> 1.
|
|
7
|
+
gem "rspec", "~> 2.10.0"
|
|
8
|
+
gem "bundler", "~> 1.1.3"
|
|
8
9
|
gem "jeweler", "~> 1.6.4"
|
|
9
|
-
gem "
|
|
10
|
+
gem "simplecov", ">= 0"
|
|
10
11
|
gem "yajl-ruby", "~>0.8.2", :platforms => :mri
|
|
11
12
|
gem "json", "~>1.5.3", :platforms => :jruby
|
|
12
13
|
end
|
data/HISTORY.md
CHANGED
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.2.
|
|
1
|
+
2.2.4
|
data/lib/resque-director.rb
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
require 'resque'
|
|
2
|
+
require 'resque-remora'
|
|
2
3
|
|
|
3
4
|
require 'resque/plugins/director'
|
|
4
5
|
require 'resque/plugins/director/worker_tracker'
|
|
5
6
|
require 'resque/plugins/director/config'
|
|
6
|
-
require 'resque/plugins/director/scaler'
|
|
7
|
-
require 'resque/plugins/director/push_pop'
|
|
8
|
-
|
|
9
|
-
module Resque
|
|
10
|
-
include Resque::Plugins::Director::PushPop
|
|
11
|
-
end
|
|
7
|
+
require 'resque/plugins/director/scaler'
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
module Resque
|
|
2
2
|
module Plugins
|
|
3
3
|
module Director
|
|
4
|
+
include Resque::Plugins::Remora
|
|
5
|
+
|
|
6
|
+
def attach_remora
|
|
7
|
+
{:created_at => Time.now.utc.to_i}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def process_remora(queue, job)
|
|
11
|
+
timestamp = job['created_at']
|
|
12
|
+
start_time = timestamp.nil? ? Time.now.utc : Time.at(timestamp.to_i).utc
|
|
13
|
+
after_pop_direct_workers(start_time)
|
|
14
|
+
end
|
|
15
|
+
|
|
4
16
|
def direct(options={})
|
|
5
17
|
Config.setup(options)
|
|
6
18
|
Config.queue = options[:queue]
|
data/resque-director.gemspec
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
|
-
s.name =
|
|
8
|
-
s.version = "2.2.
|
|
7
|
+
s.name = "resque-director"
|
|
8
|
+
s.version = "2.2.4"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
|
-
s.authors = [
|
|
12
|
-
s.date =
|
|
13
|
-
s.description =
|
|
14
|
-
s.email =
|
|
11
|
+
s.authors = ["Nolan Frausto"]
|
|
12
|
+
s.date = "2012-05-05"
|
|
13
|
+
s.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 "
|
|
14
|
+
s.email = "nrfrausto@gmail.com"
|
|
15
15
|
s.extra_rdoc_files = [
|
|
16
16
|
"LICENSE.txt",
|
|
17
17
|
"README.rdoc"
|
|
@@ -26,51 +26,52 @@ Gem::Specification.new do |s|
|
|
|
26
26
|
"lib/resque-director.rb",
|
|
27
27
|
"lib/resque/plugins/director.rb",
|
|
28
28
|
"lib/resque/plugins/director/config.rb",
|
|
29
|
-
"lib/resque/plugins/director/push_pop.rb",
|
|
30
29
|
"lib/resque/plugins/director/scaler.rb",
|
|
31
30
|
"lib/resque/plugins/director/worker_tracker.rb",
|
|
32
31
|
"resque-director.gemspec",
|
|
33
32
|
"spec/redis-test.conf",
|
|
34
33
|
"spec/resque/plugins/director/config_spec.rb",
|
|
35
|
-
"spec/resque/plugins/director/push_pop_spec.rb",
|
|
36
34
|
"spec/resque/plugins/director/scaler_spec.rb",
|
|
37
35
|
"spec/resque/plugins/director/worker_tracker_spec.rb",
|
|
38
36
|
"spec/resque/plugins/director_spec.rb",
|
|
39
37
|
"spec/spec_helper.rb",
|
|
40
38
|
"spec/support/jobs.rb"
|
|
41
39
|
]
|
|
42
|
-
s.homepage =
|
|
43
|
-
s.licenses = [
|
|
44
|
-
s.require_paths = [
|
|
45
|
-
s.rubygems_version =
|
|
46
|
-
s.summary =
|
|
40
|
+
s.homepage = "http://github.com/frausto/resque-director"
|
|
41
|
+
s.licenses = ["MIT"]
|
|
42
|
+
s.require_paths = ["lib"]
|
|
43
|
+
s.rubygems_version = "1.8.24"
|
|
44
|
+
s.summary = "A resque plugin for automatically scaling workers"
|
|
47
45
|
|
|
48
46
|
if s.respond_to? :specification_version then
|
|
49
47
|
s.specification_version = 3
|
|
50
48
|
|
|
51
49
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
52
50
|
s.add_runtime_dependency(%q<resque>, ["~> 1.10"])
|
|
53
|
-
s.
|
|
54
|
-
s.add_development_dependency(%q<
|
|
51
|
+
s.add_runtime_dependency(%q<resque-remora>, ["~> 0.1.0"])
|
|
52
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.10.0"])
|
|
53
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.1.3"])
|
|
55
54
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
|
56
|
-
s.add_development_dependency(%q<
|
|
55
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
|
57
56
|
s.add_development_dependency(%q<yajl-ruby>, ["~> 0.8.2"])
|
|
58
57
|
s.add_development_dependency(%q<json>, ["~> 1.5.3"])
|
|
59
58
|
else
|
|
60
59
|
s.add_dependency(%q<resque>, ["~> 1.10"])
|
|
61
|
-
s.add_dependency(%q<
|
|
62
|
-
s.add_dependency(%q<
|
|
60
|
+
s.add_dependency(%q<resque-remora>, ["~> 0.1.0"])
|
|
61
|
+
s.add_dependency(%q<rspec>, ["~> 2.10.0"])
|
|
62
|
+
s.add_dependency(%q<bundler>, ["~> 1.1.3"])
|
|
63
63
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
|
64
|
-
s.add_dependency(%q<
|
|
64
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
|
65
65
|
s.add_dependency(%q<yajl-ruby>, ["~> 0.8.2"])
|
|
66
66
|
s.add_dependency(%q<json>, ["~> 1.5.3"])
|
|
67
67
|
end
|
|
68
68
|
else
|
|
69
69
|
s.add_dependency(%q<resque>, ["~> 1.10"])
|
|
70
|
-
s.add_dependency(%q<
|
|
71
|
-
s.add_dependency(%q<
|
|
70
|
+
s.add_dependency(%q<resque-remora>, ["~> 0.1.0"])
|
|
71
|
+
s.add_dependency(%q<rspec>, ["~> 2.10.0"])
|
|
72
|
+
s.add_dependency(%q<bundler>, ["~> 1.1.3"])
|
|
72
73
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
|
73
|
-
s.add_dependency(%q<
|
|
74
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
|
74
75
|
s.add_dependency(%q<yajl-ruby>, ["~> 0.8.2"])
|
|
75
76
|
s.add_dependency(%q<json>, ["~> 1.5.3"])
|
|
76
77
|
end
|
metadata
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: resque-director
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash: 1
|
|
5
4
|
prerelease:
|
|
6
|
-
|
|
7
|
-
- 2
|
|
8
|
-
- 2
|
|
9
|
-
- 3
|
|
10
|
-
version: 2.2.3
|
|
5
|
+
version: 2.2.4
|
|
11
6
|
platform: ruby
|
|
12
7
|
authors:
|
|
13
8
|
- Nolan Frausto
|
|
@@ -15,117 +10,96 @@ autorequire:
|
|
|
15
10
|
bindir: bin
|
|
16
11
|
cert_chain: []
|
|
17
12
|
|
|
18
|
-
date:
|
|
13
|
+
date: 2012-05-05 00:00:00 Z
|
|
19
14
|
dependencies:
|
|
20
15
|
- !ruby/object:Gem::Dependency
|
|
21
|
-
|
|
16
|
+
name: resque
|
|
22
17
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
23
18
|
none: false
|
|
24
19
|
requirements:
|
|
25
20
|
- - ~>
|
|
26
21
|
- !ruby/object:Gem::Version
|
|
27
|
-
hash: 27
|
|
28
|
-
segments:
|
|
29
|
-
- 1
|
|
30
|
-
- 10
|
|
31
22
|
version: "1.10"
|
|
32
|
-
|
|
33
|
-
name: resque
|
|
23
|
+
type: :runtime
|
|
34
24
|
prerelease: false
|
|
25
|
+
version_requirements: *id001
|
|
35
26
|
- !ruby/object:Gem::Dependency
|
|
36
|
-
|
|
27
|
+
name: resque-remora
|
|
37
28
|
requirement: &id002 !ruby/object:Gem::Requirement
|
|
38
29
|
none: false
|
|
39
30
|
requirements:
|
|
40
31
|
- - ~>
|
|
41
32
|
- !ruby/object:Gem::Version
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
- 2
|
|
45
|
-
- 3
|
|
46
|
-
- 0
|
|
47
|
-
version: 2.3.0
|
|
48
|
-
version_requirements: *id002
|
|
49
|
-
name: rspec
|
|
33
|
+
version: 0.1.0
|
|
34
|
+
type: :runtime
|
|
50
35
|
prerelease: false
|
|
36
|
+
version_requirements: *id002
|
|
51
37
|
- !ruby/object:Gem::Dependency
|
|
52
|
-
|
|
38
|
+
name: rspec
|
|
53
39
|
requirement: &id003 !ruby/object:Gem::Requirement
|
|
54
40
|
none: false
|
|
55
41
|
requirements:
|
|
56
42
|
- - ~>
|
|
57
43
|
- !ruby/object:Gem::Version
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
- 1
|
|
61
|
-
- 0
|
|
62
|
-
- 0
|
|
63
|
-
version: 1.0.0
|
|
64
|
-
version_requirements: *id003
|
|
65
|
-
name: bundler
|
|
44
|
+
version: 2.10.0
|
|
45
|
+
type: :development
|
|
66
46
|
prerelease: false
|
|
47
|
+
version_requirements: *id003
|
|
67
48
|
- !ruby/object:Gem::Dependency
|
|
68
|
-
|
|
49
|
+
name: bundler
|
|
69
50
|
requirement: &id004 !ruby/object:Gem::Requirement
|
|
70
51
|
none: false
|
|
71
52
|
requirements:
|
|
72
53
|
- - ~>
|
|
73
54
|
- !ruby/object:Gem::Version
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
- 6
|
|
78
|
-
- 4
|
|
79
|
-
version: 1.6.4
|
|
55
|
+
version: 1.1.3
|
|
56
|
+
type: :development
|
|
57
|
+
prerelease: false
|
|
80
58
|
version_requirements: *id004
|
|
59
|
+
- !ruby/object:Gem::Dependency
|
|
81
60
|
name: jeweler
|
|
61
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
62
|
+
none: false
|
|
63
|
+
requirements:
|
|
64
|
+
- - ~>
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: 1.6.4
|
|
67
|
+
type: :development
|
|
82
68
|
prerelease: false
|
|
69
|
+
version_requirements: *id005
|
|
83
70
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
|
|
85
|
-
requirement: &
|
|
71
|
+
name: simplecov
|
|
72
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
86
73
|
none: false
|
|
87
74
|
requirements:
|
|
88
75
|
- - ">="
|
|
89
76
|
- !ruby/object:Gem::Version
|
|
90
|
-
hash: 3
|
|
91
|
-
segments:
|
|
92
|
-
- 0
|
|
93
77
|
version: "0"
|
|
94
|
-
|
|
95
|
-
name: rcov
|
|
78
|
+
type: :development
|
|
96
79
|
prerelease: false
|
|
80
|
+
version_requirements: *id006
|
|
97
81
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
|
|
99
|
-
requirement: &
|
|
82
|
+
name: yajl-ruby
|
|
83
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
100
84
|
none: false
|
|
101
85
|
requirements:
|
|
102
86
|
- - ~>
|
|
103
87
|
- !ruby/object:Gem::Version
|
|
104
|
-
hash: 59
|
|
105
|
-
segments:
|
|
106
|
-
- 0
|
|
107
|
-
- 8
|
|
108
|
-
- 2
|
|
109
88
|
version: 0.8.2
|
|
110
|
-
|
|
111
|
-
name: yajl-ruby
|
|
89
|
+
type: :development
|
|
112
90
|
prerelease: false
|
|
91
|
+
version_requirements: *id007
|
|
113
92
|
- !ruby/object:Gem::Dependency
|
|
114
|
-
|
|
115
|
-
requirement: &
|
|
93
|
+
name: json
|
|
94
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
|
116
95
|
none: false
|
|
117
96
|
requirements:
|
|
118
97
|
- - ~>
|
|
119
98
|
- !ruby/object:Gem::Version
|
|
120
|
-
hash: 5
|
|
121
|
-
segments:
|
|
122
|
-
- 1
|
|
123
|
-
- 5
|
|
124
|
-
- 3
|
|
125
99
|
version: 1.5.3
|
|
126
|
-
|
|
127
|
-
name: json
|
|
100
|
+
type: :development
|
|
128
101
|
prerelease: false
|
|
102
|
+
version_requirements: *id008
|
|
129
103
|
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
104
|
email: nrfrausto@gmail.com
|
|
131
105
|
executables: []
|
|
@@ -145,13 +119,11 @@ files:
|
|
|
145
119
|
- lib/resque-director.rb
|
|
146
120
|
- lib/resque/plugins/director.rb
|
|
147
121
|
- lib/resque/plugins/director/config.rb
|
|
148
|
-
- lib/resque/plugins/director/push_pop.rb
|
|
149
122
|
- lib/resque/plugins/director/scaler.rb
|
|
150
123
|
- lib/resque/plugins/director/worker_tracker.rb
|
|
151
124
|
- resque-director.gemspec
|
|
152
125
|
- spec/redis-test.conf
|
|
153
126
|
- spec/resque/plugins/director/config_spec.rb
|
|
154
|
-
- spec/resque/plugins/director/push_pop_spec.rb
|
|
155
127
|
- spec/resque/plugins/director/scaler_spec.rb
|
|
156
128
|
- spec/resque/plugins/director/worker_tracker_spec.rb
|
|
157
129
|
- spec/resque/plugins/director_spec.rb
|
|
@@ -170,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
170
142
|
requirements:
|
|
171
143
|
- - ">="
|
|
172
144
|
- !ruby/object:Gem::Version
|
|
173
|
-
hash:
|
|
145
|
+
hash: -2861306429834219019
|
|
174
146
|
segments:
|
|
175
147
|
- 0
|
|
176
148
|
version: "0"
|
|
@@ -179,14 +151,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
179
151
|
requirements:
|
|
180
152
|
- - ">="
|
|
181
153
|
- !ruby/object:Gem::Version
|
|
182
|
-
hash: 3
|
|
183
|
-
segments:
|
|
184
|
-
- 0
|
|
185
154
|
version: "0"
|
|
186
155
|
requirements: []
|
|
187
156
|
|
|
188
157
|
rubyforge_project:
|
|
189
|
-
rubygems_version: 1.8.
|
|
158
|
+
rubygems_version: 1.8.24
|
|
190
159
|
signing_key:
|
|
191
160
|
specification_version: 3
|
|
192
161
|
summary: A resque plugin for automatically scaling workers
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
module Resque
|
|
2
|
-
module Plugins
|
|
3
|
-
module Director
|
|
4
|
-
module PushPop
|
|
5
|
-
|
|
6
|
-
def self.included(base)
|
|
7
|
-
base.class_eval do
|
|
8
|
-
alias_method :original_pop, :pop
|
|
9
|
-
alias_method :original_push, :push
|
|
10
|
-
extend ClassMethods
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
module ClassMethods
|
|
15
|
-
def push(queue, item)
|
|
16
|
-
item[:created_at] = Time.now.utc.to_i if item.respond_to?(:[]=)
|
|
17
|
-
original_push queue, item
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def pop(queue)
|
|
21
|
-
job = original_pop(queue)
|
|
22
|
-
begin
|
|
23
|
-
timestamp = job['created_at']
|
|
24
|
-
start_time = timestamp.nil? ? Time.now.utc : Time.at(timestamp.to_i).utc
|
|
25
|
-
job_class = constantize(job['class'])
|
|
26
|
-
if job_class && job_class.respond_to?(:after_pop_direct_workers) && job_class.respond_to?(:direct)
|
|
27
|
-
job_class.after_pop_direct_workers(start_time)
|
|
28
|
-
end
|
|
29
|
-
rescue
|
|
30
|
-
end
|
|
31
|
-
job
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Resque::Plugins::Director::PushPop do
|
|
4
|
-
subject { Resque::Plugins::Director::PushPop }
|
|
5
|
-
|
|
6
|
-
before do
|
|
7
|
-
Resque::Plugins::Director::Config.queue = "test"
|
|
8
|
-
@now = Time.now
|
|
9
|
-
Time.stub(:now => @now)
|
|
10
|
-
@timestamp = @now.utc.to_i
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
describe "#push" do
|
|
14
|
-
it "should add the start timestamp to the end of the job" do
|
|
15
|
-
Resque.enqueue(TestJob, "arg1")
|
|
16
|
-
Resque.redis.lindex("queue:test",0).should =~ /^\{.*\"created_at\":#{@timestamp}/
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe "#pop" do
|
|
21
|
-
it "should direct workers using the timestamp" do
|
|
22
|
-
Resque.enqueue(TestJob, "arg1")
|
|
23
|
-
expected_time = Time.at(@timestamp).utc
|
|
24
|
-
TestJob.should_receive(:after_pop_direct_workers).with(expected_time)
|
|
25
|
-
Resque.pop("test").should == {"args"=>["arg1"], "class"=>"TestJob", "created_at"=>@timestamp}
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "should direct workers with current time if no start time" do
|
|
29
|
-
Resque.should_receive(:original_pop).and_return({'args' => [], 'class' => 'TestJob'})
|
|
30
|
-
TestJob.should_receive(:after_pop_direct_workers).with(@now)
|
|
31
|
-
Resque.pop("test").should == {"args"=>[], "class"=>"TestJob"}
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it "should not direct workers if the job is not directed" do
|
|
35
|
-
Resque.enqueue(NonDirectedTestJob, "arg1")
|
|
36
|
-
NonDirectedTestJob.should_not_receive(:after_pop_direct_workers)
|
|
37
|
-
Resque.pop("non_directed").should include({"args"=>["arg1"], "class"=>"NonDirectedTestJob"})
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should return the job properly if an exception is thrown in the direction logic" do
|
|
41
|
-
Resque.enqueue(TestJob, "arg1")
|
|
42
|
-
TestJob.should_receive(:after_pop_direct_workers).and_throw(:Exception)
|
|
43
|
-
Resque.pop("test").should include({"args"=>["arg1"], "class"=>"TestJob"})
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|