scotttam-resque 0.0.1
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/.gitignore +3 -0
- data/.kick +26 -0
- data/CONTRIBUTORS +23 -0
- data/HISTORY.md +80 -0
- data/LICENSE +20 -0
- data/README.markdown +767 -0
- data/Rakefile +66 -0
- data/bin/resque +57 -0
- data/bin/resque-web +18 -0
- data/config.ru +14 -0
- data/deps.rip +6 -0
- data/examples/async_helper.rb +31 -0
- data/examples/demo/README.markdown +71 -0
- data/examples/demo/Rakefile +3 -0
- data/examples/demo/app.rb +38 -0
- data/examples/demo/config.ru +19 -0
- data/examples/demo/job.rb +22 -0
- data/examples/god/resque.god +53 -0
- data/examples/god/stale.god +26 -0
- data/examples/instance.rb +11 -0
- data/examples/simple.rb +30 -0
- data/init.rb +1 -0
- data/lib/resque/errors.rb +7 -0
- data/lib/resque/failure/base.rb +58 -0
- data/lib/resque/failure/hoptoad.rb +121 -0
- data/lib/resque/failure/multiple.rb +44 -0
- data/lib/resque/failure/redis.rb +33 -0
- data/lib/resque/failure.rb +63 -0
- data/lib/resque/helpers.rb +57 -0
- data/lib/resque/job.rb +146 -0
- data/lib/resque/server/public/idle.png +0 -0
- data/lib/resque/server/public/jquery-1.3.2.min.js +19 -0
- data/lib/resque/server/public/jquery.relatize_date.js +95 -0
- data/lib/resque/server/public/poll.png +0 -0
- data/lib/resque/server/public/ranger.js +24 -0
- data/lib/resque/server/public/reset.css +48 -0
- data/lib/resque/server/public/style.css +76 -0
- data/lib/resque/server/public/working.png +0 -0
- data/lib/resque/server/views/error.erb +1 -0
- data/lib/resque/server/views/failed.erb +35 -0
- data/lib/resque/server/views/key.erb +17 -0
- data/lib/resque/server/views/layout.erb +38 -0
- data/lib/resque/server/views/next_more.erb +10 -0
- data/lib/resque/server/views/overview.erb +4 -0
- data/lib/resque/server/views/queues.erb +46 -0
- data/lib/resque/server/views/stats.erb +62 -0
- data/lib/resque/server/views/workers.erb +78 -0
- data/lib/resque/server/views/working.erb +69 -0
- data/lib/resque/server.rb +187 -0
- data/lib/resque/stat.rb +53 -0
- data/lib/resque/tasks.rb +39 -0
- data/lib/resque/version.rb +3 -0
- data/lib/resque/worker.rb +453 -0
- data/lib/resque.rb +246 -0
- data/tasks/redis.rake +135 -0
- data/tasks/resque.rake +2 -0
- data/test/redis-test.conf +132 -0
- data/test/resque_test.rb +220 -0
- data/test/test_helper.rb +96 -0
- data/test/worker_test.rb +260 -0
- metadata +172 -0
data/test/worker_test.rb
ADDED
@@ -0,0 +1,260 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
context "Resque::Worker" do
|
4
|
+
setup do
|
5
|
+
Resque.redis.flush_all
|
6
|
+
|
7
|
+
@worker = Resque::Worker.new(:jobs)
|
8
|
+
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
9
|
+
end
|
10
|
+
|
11
|
+
test "can fail jobs" do
|
12
|
+
Resque::Job.create(:jobs, BadJob)
|
13
|
+
@worker.work(0)
|
14
|
+
assert_equal 1, Resque::Failure.count
|
15
|
+
end
|
16
|
+
|
17
|
+
test "can peek at failed jobs" do
|
18
|
+
10.times { Resque::Job.create(:jobs, BadJob) }
|
19
|
+
@worker.work(0)
|
20
|
+
assert_equal 10, Resque::Failure.count
|
21
|
+
|
22
|
+
assert_equal 10, Resque::Failure.all(0, 20).size
|
23
|
+
end
|
24
|
+
|
25
|
+
test "can clear failed jobs" do
|
26
|
+
Resque::Job.create(:jobs, BadJob)
|
27
|
+
@worker.work(0)
|
28
|
+
assert_equal 1, Resque::Failure.count
|
29
|
+
Resque::Failure.clear
|
30
|
+
assert_equal 0, Resque::Failure.count
|
31
|
+
end
|
32
|
+
|
33
|
+
test "catches exceptional jobs" do
|
34
|
+
Resque::Job.create(:jobs, BadJob)
|
35
|
+
Resque::Job.create(:jobs, BadJob)
|
36
|
+
@worker.process
|
37
|
+
@worker.process
|
38
|
+
@worker.process
|
39
|
+
assert_equal 2, Resque::Failure.count
|
40
|
+
end
|
41
|
+
|
42
|
+
test "can work on multiple queues" do
|
43
|
+
Resque::Job.create(:high, GoodJob)
|
44
|
+
Resque::Job.create(:critical, GoodJob)
|
45
|
+
|
46
|
+
worker = Resque::Worker.new(:critical, :high)
|
47
|
+
|
48
|
+
worker.process
|
49
|
+
assert_equal 1, Resque.size(:high)
|
50
|
+
assert_equal 0, Resque.size(:critical)
|
51
|
+
|
52
|
+
worker.process
|
53
|
+
assert_equal 0, Resque.size(:high)
|
54
|
+
end
|
55
|
+
|
56
|
+
test "can work on all queues" do
|
57
|
+
Resque::Job.create(:high, GoodJob)
|
58
|
+
Resque::Job.create(:critical, GoodJob)
|
59
|
+
Resque::Job.create(:blahblah, GoodJob)
|
60
|
+
|
61
|
+
worker = Resque::Worker.new("*")
|
62
|
+
|
63
|
+
worker.work(0)
|
64
|
+
assert_equal 0, Resque.size(:high)
|
65
|
+
assert_equal 0, Resque.size(:critical)
|
66
|
+
assert_equal 0, Resque.size(:blahblah)
|
67
|
+
end
|
68
|
+
|
69
|
+
test "processes * queues in alphabetical order" do
|
70
|
+
Resque::Job.create(:high, GoodJob)
|
71
|
+
Resque::Job.create(:critical, GoodJob)
|
72
|
+
Resque::Job.create(:blahblah, GoodJob)
|
73
|
+
|
74
|
+
worker = Resque::Worker.new("*")
|
75
|
+
processed_queues = []
|
76
|
+
|
77
|
+
worker.work(0) do |job|
|
78
|
+
processed_queues << job.queue
|
79
|
+
end
|
80
|
+
|
81
|
+
assert_equal %w( jobs high critical blahblah ).sort, processed_queues
|
82
|
+
end
|
83
|
+
|
84
|
+
test "has a unique id" do
|
85
|
+
assert_equal "#{`hostname`.chomp}:#{$$}:jobs", @worker.to_s
|
86
|
+
end
|
87
|
+
|
88
|
+
test "complains if no queues are given" do
|
89
|
+
assert_raise Resque::NoQueueError do
|
90
|
+
Resque::Worker.new
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
test "fails if a job class has no `perform` method" do
|
95
|
+
worker = Resque::Worker.new(:perform_less)
|
96
|
+
Resque::Job.create(:perform_less, Object)
|
97
|
+
|
98
|
+
assert_equal 0, Resque::Failure.count
|
99
|
+
worker.work(0)
|
100
|
+
assert_equal 1, Resque::Failure.count
|
101
|
+
end
|
102
|
+
|
103
|
+
test "inserts itself into the 'workers' list on startup" do
|
104
|
+
@worker.work(0) do
|
105
|
+
assert_equal @worker, Resque.workers[0]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
test "removes itself from the 'workers' list on shutdown" do
|
110
|
+
@worker.work(0) do
|
111
|
+
assert_equal @worker, Resque.workers[0]
|
112
|
+
end
|
113
|
+
|
114
|
+
assert_equal [], Resque.workers
|
115
|
+
end
|
116
|
+
|
117
|
+
test "removes worker with stringified id" do
|
118
|
+
@worker.work(0) do
|
119
|
+
worker_id = Resque.workers[0].to_s
|
120
|
+
Resque.remove_worker(worker_id)
|
121
|
+
assert_equal [], Resque.workers
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
test "records what it is working on" do
|
126
|
+
@worker.work(0) do
|
127
|
+
task = @worker.job
|
128
|
+
assert_equal({"args"=>[20, "/tmp"], "class"=>"SomeJob"}, task['payload'])
|
129
|
+
assert task['run_at']
|
130
|
+
assert_equal 'jobs', task['queue']
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
test "clears its status when not working on anything" do
|
135
|
+
@worker.work(0)
|
136
|
+
assert_equal Hash.new, @worker.job
|
137
|
+
end
|
138
|
+
|
139
|
+
test "knows when it is working" do
|
140
|
+
@worker.work(0) do
|
141
|
+
assert @worker.working?
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
test "knows when it is idle" do
|
146
|
+
@worker.work(0)
|
147
|
+
assert @worker.idle?
|
148
|
+
end
|
149
|
+
|
150
|
+
test "knows who is working" do
|
151
|
+
@worker.work(0) do
|
152
|
+
assert_equal [@worker], Resque.working
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
test "keeps track of how many jobs it has processed" do
|
157
|
+
Resque::Job.create(:jobs, BadJob)
|
158
|
+
Resque::Job.create(:jobs, BadJob)
|
159
|
+
|
160
|
+
3.times do
|
161
|
+
job = @worker.reserve
|
162
|
+
@worker.process job
|
163
|
+
end
|
164
|
+
assert_equal 3, @worker.processed
|
165
|
+
end
|
166
|
+
|
167
|
+
test "keeps track of how many failures it has seen" do
|
168
|
+
Resque::Job.create(:jobs, BadJob)
|
169
|
+
Resque::Job.create(:jobs, BadJob)
|
170
|
+
|
171
|
+
3.times do
|
172
|
+
job = @worker.reserve
|
173
|
+
@worker.process job
|
174
|
+
end
|
175
|
+
assert_equal 2, @worker.failed
|
176
|
+
end
|
177
|
+
|
178
|
+
test "stats are erased when the worker goes away" do
|
179
|
+
@worker.work(0)
|
180
|
+
assert_equal 0, @worker.processed
|
181
|
+
assert_equal 0, @worker.failed
|
182
|
+
end
|
183
|
+
|
184
|
+
test "knows when it started" do
|
185
|
+
time = Time.now
|
186
|
+
@worker.work(0) do
|
187
|
+
assert_equal time.to_s, @worker.started.to_s
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
test "knows whether it exists or not" do
|
192
|
+
@worker.work(0) do
|
193
|
+
assert Resque::Worker.exists?(@worker)
|
194
|
+
assert !Resque::Worker.exists?('blah-blah')
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
test "sets $0 while working" do
|
199
|
+
@worker.work(0) do
|
200
|
+
ver = Resque::Version
|
201
|
+
assert_equal "resque-#{ver}: Processing jobs since #{Time.now.to_i}", $0
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
test "can be found" do
|
206
|
+
@worker.work(0) do
|
207
|
+
found = Resque::Worker.find(@worker.to_s)
|
208
|
+
assert_equal @worker.to_s, found.to_s
|
209
|
+
assert found.working?
|
210
|
+
assert_equal @worker.job, found.job
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
test "doesn't find fakes" do
|
215
|
+
@worker.work(0) do
|
216
|
+
found = Resque::Worker.find('blah-blah')
|
217
|
+
assert_equal nil, found
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
test "cleans up dead worker info on start (crash recovery)" do
|
222
|
+
# first we fake out two dead workers
|
223
|
+
workerA = Resque::Worker.new(:jobs)
|
224
|
+
workerA.instance_variable_set(:@to_s, "#{`hostname`.chomp}:1:jobs")
|
225
|
+
workerA.register_worker
|
226
|
+
|
227
|
+
workerB = Resque::Worker.new(:high, :low)
|
228
|
+
workerB.instance_variable_set(:@to_s, "#{`hostname`.chomp}:2:high,low")
|
229
|
+
workerB.register_worker
|
230
|
+
|
231
|
+
assert_equal 2, Resque.workers.size
|
232
|
+
|
233
|
+
# then we prune them
|
234
|
+
@worker.work(0) do
|
235
|
+
assert_equal 1, Resque.workers.size
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
test "Processed jobs count" do
|
240
|
+
@worker.work(0)
|
241
|
+
assert_equal 1, Resque.info[:processed]
|
242
|
+
end
|
243
|
+
|
244
|
+
test "Will call a pre-fork proc when the worker starts if set in the initializer only once" do
|
245
|
+
$BEFORE_FORK_CALLED = false
|
246
|
+
Resque.before_fork = Proc.new { $BEFORE_FORK_CALLED = true }
|
247
|
+
Resque::Worker.before_fork = Resque.before_fork
|
248
|
+
workerA = Resque::Worker.new(:jobs)
|
249
|
+
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
250
|
+
|
251
|
+
assert !$BEFORE_FORK_CALLED
|
252
|
+
workerA.work(0)
|
253
|
+
assert $BEFORE_FORK_CALLED
|
254
|
+
|
255
|
+
$BEFORE_FORK_CALLED = false
|
256
|
+
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
257
|
+
assert !$BEFORE_FORK_CALLED
|
258
|
+
Resque::Worker.send(:remove_class_variable, :@@before_fork)
|
259
|
+
end
|
260
|
+
end
|
metadata
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: scotttam-resque
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chris Wanstrath, Scott Tamosunas
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-03-02 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: redis
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: redis-namespace
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: vegas
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.1.2
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: sinatra
|
47
|
+
type: :runtime
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.9.2
|
54
|
+
version:
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: jeweler
|
57
|
+
type: :development
|
58
|
+
version_requirement:
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "0"
|
64
|
+
version:
|
65
|
+
description: scotttam-resque is an extension to the resque queue system that has pre-fork hooks and ability to turn off forking. Add more description here.
|
66
|
+
email: tamosunas@gmail.com
|
67
|
+
executables:
|
68
|
+
- resque
|
69
|
+
- resque-web
|
70
|
+
extensions: []
|
71
|
+
|
72
|
+
extra_rdoc_files:
|
73
|
+
- LICENSE
|
74
|
+
- README.markdown
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- .kick
|
78
|
+
- CONTRIBUTORS
|
79
|
+
- HISTORY.md
|
80
|
+
- LICENSE
|
81
|
+
- README.markdown
|
82
|
+
- Rakefile
|
83
|
+
- bin/resque
|
84
|
+
- bin/resque-web
|
85
|
+
- config.ru
|
86
|
+
- deps.rip
|
87
|
+
- examples/async_helper.rb
|
88
|
+
- examples/demo/README.markdown
|
89
|
+
- examples/demo/Rakefile
|
90
|
+
- examples/demo/app.rb
|
91
|
+
- examples/demo/config.ru
|
92
|
+
- examples/demo/job.rb
|
93
|
+
- examples/god/resque.god
|
94
|
+
- examples/god/stale.god
|
95
|
+
- examples/instance.rb
|
96
|
+
- examples/simple.rb
|
97
|
+
- init.rb
|
98
|
+
- lib/resque.rb
|
99
|
+
- lib/resque/errors.rb
|
100
|
+
- lib/resque/failure.rb
|
101
|
+
- lib/resque/failure/base.rb
|
102
|
+
- lib/resque/failure/hoptoad.rb
|
103
|
+
- lib/resque/failure/multiple.rb
|
104
|
+
- lib/resque/failure/redis.rb
|
105
|
+
- lib/resque/helpers.rb
|
106
|
+
- lib/resque/job.rb
|
107
|
+
- lib/resque/server.rb
|
108
|
+
- lib/resque/server/public/idle.png
|
109
|
+
- lib/resque/server/public/jquery-1.3.2.min.js
|
110
|
+
- lib/resque/server/public/jquery.relatize_date.js
|
111
|
+
- lib/resque/server/public/poll.png
|
112
|
+
- lib/resque/server/public/ranger.js
|
113
|
+
- lib/resque/server/public/reset.css
|
114
|
+
- lib/resque/server/public/style.css
|
115
|
+
- lib/resque/server/public/working.png
|
116
|
+
- lib/resque/server/views/error.erb
|
117
|
+
- lib/resque/server/views/failed.erb
|
118
|
+
- lib/resque/server/views/key.erb
|
119
|
+
- lib/resque/server/views/layout.erb
|
120
|
+
- lib/resque/server/views/next_more.erb
|
121
|
+
- lib/resque/server/views/overview.erb
|
122
|
+
- lib/resque/server/views/queues.erb
|
123
|
+
- lib/resque/server/views/stats.erb
|
124
|
+
- lib/resque/server/views/workers.erb
|
125
|
+
- lib/resque/server/views/working.erb
|
126
|
+
- lib/resque/stat.rb
|
127
|
+
- lib/resque/tasks.rb
|
128
|
+
- lib/resque/version.rb
|
129
|
+
- lib/resque/worker.rb
|
130
|
+
- tasks/redis.rake
|
131
|
+
- tasks/resque.rake
|
132
|
+
- test/redis-test.conf
|
133
|
+
- test/resque_test.rb
|
134
|
+
- test/test_helper.rb
|
135
|
+
- test/worker_test.rb
|
136
|
+
has_rdoc: true
|
137
|
+
homepage: http://github.com/scotttam/resque
|
138
|
+
licenses: []
|
139
|
+
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options:
|
142
|
+
- --charset=UTF-8
|
143
|
+
require_paths:
|
144
|
+
- lib
|
145
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: "0"
|
150
|
+
version:
|
151
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: "0"
|
156
|
+
version:
|
157
|
+
requirements: []
|
158
|
+
|
159
|
+
rubyforge_project:
|
160
|
+
rubygems_version: 1.3.5
|
161
|
+
signing_key:
|
162
|
+
specification_version: 3
|
163
|
+
summary: scotttam-resque is an extension to the resque queue system that has pre-fork hooks and ability to turn off forking.
|
164
|
+
test_files:
|
165
|
+
- test/resque_test.rb
|
166
|
+
- test/test_helper.rb
|
167
|
+
- test/worker_test.rb
|
168
|
+
- examples/async_helper.rb
|
169
|
+
- examples/demo/app.rb
|
170
|
+
- examples/demo/job.rb
|
171
|
+
- examples/instance.rb
|
172
|
+
- examples/simple.rb
|