resque-mongo 1.4.0 → 1.8.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/CONTRIBUTORS +24 -6
- data/HISTORY.md +65 -0
- data/README.markdown +34 -5
- data/Rakefile +1 -1
- data/bin/resque +2 -2
- data/bin/resque-web +6 -1
- data/deps.rip +2 -2
- data/docs/HOOKS.md +121 -0
- data/docs/PLUGINS.md +93 -0
- data/examples/demo/Rakefile +5 -0
- data/examples/monit/resque.monit +6 -0
- data/lib/resque.rb +94 -7
- data/lib/resque/errors.rb +3 -0
- data/lib/resque/failure.rb +3 -0
- data/lib/resque/failure/base.rb +3 -0
- data/lib/resque/failure/hoptoad.rb +29 -19
- data/lib/resque/failure/mongo.rb +10 -1
- data/lib/resque/helpers.rb +8 -2
- data/lib/resque/job.rb +107 -2
- data/lib/resque/plugin.rb +46 -0
- data/lib/resque/server.rb +30 -11
- data/lib/resque/server/public/ranger.js +50 -7
- data/lib/resque/server/public/style.css +8 -1
- data/lib/resque/server/test_helper.rb +19 -0
- data/lib/resque/server/views/failed.erb +17 -3
- data/lib/resque/server/views/key_sets.erb +20 -0
- data/lib/resque/server/views/{key.erb → key_string.erb} +2 -8
- data/lib/resque/server/views/queues.erb +5 -2
- data/lib/resque/server/views/stats.erb +2 -2
- data/lib/resque/server/views/workers.erb +1 -1
- data/lib/resque/server/views/working.erb +2 -0
- data/lib/resque/tasks.rb +1 -1
- data/lib/resque/version.rb +1 -1
- data/lib/resque/worker.rb +54 -15
- data/tasks/redis.rake +53 -29
- data/test/job_hooks_test.rb +302 -0
- data/test/job_plugins_test.rb +209 -0
- data/test/plugin_test.rb +116 -0
- data/test/resque-mongo_benchmark.rb +62 -0
- data/test/resque-web_test.rb +54 -0
- data/test/resque_test.rb +34 -0
- data/test/test_helper.rb +15 -0
- data/test/worker_test.rb +62 -2
- metadata +58 -23
data/test/test_helper.rb
CHANGED
@@ -54,6 +54,15 @@ def context(*args, &block)
|
|
54
54
|
klass.class_eval &block
|
55
55
|
end
|
56
56
|
|
57
|
+
##
|
58
|
+
# Helper to perform job classes
|
59
|
+
#
|
60
|
+
module PerformJob
|
61
|
+
def perform_job(klass, *args)
|
62
|
+
resque_job = Resque::Job.new(:testqueue, 'class' => klass, 'args' => args)
|
63
|
+
resque_job.perform
|
64
|
+
end
|
65
|
+
end
|
57
66
|
|
58
67
|
#
|
59
68
|
# fixture classes
|
@@ -85,3 +94,9 @@ class GoodJob
|
|
85
94
|
"Good job, #{name}"
|
86
95
|
end
|
87
96
|
end
|
97
|
+
|
98
|
+
class BadJobWithSyntaxError
|
99
|
+
def self.perform
|
100
|
+
raise SyntaxError, "Extra Bad job!"
|
101
|
+
end
|
102
|
+
end
|
data/test/worker_test.rb
CHANGED
@@ -4,6 +4,10 @@ context "Resque::Worker" do
|
|
4
4
|
setup do
|
5
5
|
Resque.drop
|
6
6
|
|
7
|
+
Resque.before_first_fork = nil
|
8
|
+
Resque.before_fork = nil
|
9
|
+
Resque.after_fork = nil
|
10
|
+
|
7
11
|
@worker = Resque::Worker.new(:jobs)
|
8
12
|
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
9
13
|
end
|
@@ -14,6 +18,20 @@ context "Resque::Worker" do
|
|
14
18
|
assert_equal 1, Resque::Failure.count
|
15
19
|
end
|
16
20
|
|
21
|
+
test "failed jobs report exception and message" do
|
22
|
+
Resque::Job.create(:jobs, BadJobWithSyntaxError)
|
23
|
+
@worker.work(0)
|
24
|
+
assert_equal('SyntaxError', Resque::Failure.all['exception'])
|
25
|
+
assert_equal('Extra Bad job!', Resque::Failure.all['error'])
|
26
|
+
end
|
27
|
+
|
28
|
+
test "fails uncompleted jobs on exit" do
|
29
|
+
job = Resque::Job.new(:jobs, [GoodJob, "blah"])
|
30
|
+
@worker.working_on(job)
|
31
|
+
@worker.unregister_worker
|
32
|
+
assert_equal 1, Resque::Failure.count
|
33
|
+
end
|
34
|
+
|
17
35
|
test "can peek at failed jobs" do
|
18
36
|
10.times { Resque::Job.create(:jobs, BadJob) }
|
19
37
|
@worker.work(0)
|
@@ -119,7 +137,7 @@ context "Resque::Worker" do
|
|
119
137
|
worker_id = Resque.workers[0].to_s
|
120
138
|
Resque.remove_worker(worker_id)
|
121
139
|
assert_equal [], Resque.workers
|
122
|
-
|
140
|
+
end
|
123
141
|
end
|
124
142
|
|
125
143
|
test "records what it is working on" do
|
@@ -197,7 +215,8 @@ context "Resque::Worker" do
|
|
197
215
|
|
198
216
|
test "sets $0 while working" do
|
199
217
|
@worker.work(0) do
|
200
|
-
|
218
|
+
ver = Resque::Version
|
219
|
+
assert_equal "resque-#{ver}: Processing jobs since #{Time.now.to_i}", $0
|
201
220
|
end
|
202
221
|
end
|
203
222
|
|
@@ -239,4 +258,45 @@ context "Resque::Worker" do
|
|
239
258
|
@worker.work(0)
|
240
259
|
assert_equal 1, Resque.info[:processed]
|
241
260
|
end
|
261
|
+
|
262
|
+
test "Will call a before_first_fork hook only once" do
|
263
|
+
Resque.drop
|
264
|
+
$BEFORE_FORK_CALLED = 0
|
265
|
+
Resque.before_first_fork = Proc.new { $BEFORE_FORK_CALLED += 1 }
|
266
|
+
workerA = Resque::Worker.new(:jobs)
|
267
|
+
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
268
|
+
|
269
|
+
assert_equal 0, $BEFORE_FORK_CALLED
|
270
|
+
|
271
|
+
workerA.work(0)
|
272
|
+
assert_equal 1, $BEFORE_FORK_CALLED
|
273
|
+
|
274
|
+
# TODO: Verify it's only run once. Not easy.
|
275
|
+
# workerA.work(0)
|
276
|
+
# assert_equal 1, $BEFORE_FORK_CALLED
|
277
|
+
end
|
278
|
+
|
279
|
+
test "Will call a before_fork hook before forking" do
|
280
|
+
Resque.drop
|
281
|
+
$BEFORE_FORK_CALLED = false
|
282
|
+
Resque.before_fork = Proc.new { $BEFORE_FORK_CALLED = true }
|
283
|
+
workerA = Resque::Worker.new(:jobs)
|
284
|
+
|
285
|
+
assert !$BEFORE_FORK_CALLED
|
286
|
+
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
287
|
+
workerA.work(0)
|
288
|
+
assert $BEFORE_FORK_CALLED
|
289
|
+
end
|
290
|
+
|
291
|
+
test "Will call an after_fork hook after forking" do
|
292
|
+
Resque.drop
|
293
|
+
$AFTER_FORK_CALLED = false
|
294
|
+
Resque.after_fork = Proc.new { $AFTER_FORK_CALLED = true }
|
295
|
+
workerA = Resque::Worker.new(:jobs)
|
296
|
+
|
297
|
+
assert !$AFTER_FORK_CALLED
|
298
|
+
Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
|
299
|
+
workerA.work(0)
|
300
|
+
assert $AFTER_FORK_CALLED
|
301
|
+
end
|
242
302
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque-mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 8
|
8
|
+
- 1
|
9
|
+
version: 1.8.1
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Christos Trochalakis
|
@@ -9,49 +14,62 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-04-08 00:00:00 +03:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: mongo
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
23
|
-
|
24
|
-
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 20
|
30
|
+
version: "0.20"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
25
33
|
- !ruby/object:Gem::Dependency
|
26
34
|
name: vegas
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
37
|
requirements:
|
31
38
|
- - ">="
|
32
39
|
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 0
|
42
|
+
- 1
|
43
|
+
- 2
|
33
44
|
version: 0.1.2
|
34
|
-
|
45
|
+
type: :runtime
|
46
|
+
version_requirements: *id002
|
35
47
|
- !ruby/object:Gem::Dependency
|
36
48
|
name: sinatra
|
37
|
-
|
38
|
-
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
prerelease: false
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
51
|
requirements:
|
41
52
|
- - ">="
|
42
53
|
- !ruby/object:Gem::Version
|
54
|
+
segments:
|
55
|
+
- 0
|
56
|
+
- 9
|
57
|
+
- 2
|
43
58
|
version: 0.9.2
|
44
|
-
|
59
|
+
type: :runtime
|
60
|
+
version_requirements: *id003
|
45
61
|
- !ruby/object:Gem::Dependency
|
46
62
|
name: jeweler
|
47
|
-
|
48
|
-
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
prerelease: false
|
64
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
65
|
requirements:
|
51
66
|
- - ">="
|
52
67
|
- !ruby/object:Gem::Version
|
68
|
+
segments:
|
69
|
+
- 0
|
53
70
|
version: "0"
|
54
|
-
|
71
|
+
type: :development
|
72
|
+
version_requirements: *id004
|
55
73
|
description: ""
|
56
74
|
email: yatiohi@ideopolis.gr
|
57
75
|
executables:
|
@@ -74,6 +92,8 @@ files:
|
|
74
92
|
- bin/resque-web
|
75
93
|
- config.ru
|
76
94
|
- deps.rip
|
95
|
+
- docs/HOOKS.md
|
96
|
+
- docs/PLUGINS.md
|
77
97
|
- examples/async_helper.rb
|
78
98
|
- examples/demo/README.markdown
|
79
99
|
- examples/demo/Rakefile
|
@@ -83,6 +103,7 @@ files:
|
|
83
103
|
- examples/god/resque.god
|
84
104
|
- examples/god/stale.god
|
85
105
|
- examples/instance.rb
|
106
|
+
- examples/monit/resque.monit
|
86
107
|
- examples/simple.rb
|
87
108
|
- init.rb
|
88
109
|
- lib/resque.rb
|
@@ -94,6 +115,7 @@ files:
|
|
94
115
|
- lib/resque/failure/multiple.rb
|
95
116
|
- lib/resque/helpers.rb
|
96
117
|
- lib/resque/job.rb
|
118
|
+
- lib/resque/plugin.rb
|
97
119
|
- lib/resque/server.rb
|
98
120
|
- lib/resque/server/public/idle.png
|
99
121
|
- lib/resque/server/public/jquery-1.3.2.min.js
|
@@ -103,9 +125,11 @@ files:
|
|
103
125
|
- lib/resque/server/public/reset.css
|
104
126
|
- lib/resque/server/public/style.css
|
105
127
|
- lib/resque/server/public/working.png
|
128
|
+
- lib/resque/server/test_helper.rb
|
106
129
|
- lib/resque/server/views/error.erb
|
107
130
|
- lib/resque/server/views/failed.erb
|
108
|
-
- lib/resque/server/views/
|
131
|
+
- lib/resque/server/views/key_sets.erb
|
132
|
+
- lib/resque/server/views/key_string.erb
|
109
133
|
- lib/resque/server/views/layout.erb
|
110
134
|
- lib/resque/server/views/next_more.erb
|
111
135
|
- lib/resque/server/views/overview.erb
|
@@ -120,7 +144,11 @@ files:
|
|
120
144
|
- tasks/redis.rake
|
121
145
|
- tasks/resque.rake
|
122
146
|
- test/dump.rdb
|
147
|
+
- test/job_hooks_test.rb
|
148
|
+
- test/job_plugins_test.rb
|
149
|
+
- test/plugin_test.rb
|
123
150
|
- test/redis-test.conf
|
151
|
+
- test/resque-web_test.rb
|
124
152
|
- test/resque_test.rb
|
125
153
|
- test/test_helper.rb
|
126
154
|
- test/worker_test.rb
|
@@ -137,23 +165,30 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
165
|
requirements:
|
138
166
|
- - ">="
|
139
167
|
- !ruby/object:Gem::Version
|
168
|
+
segments:
|
169
|
+
- 0
|
140
170
|
version: "0"
|
141
|
-
version:
|
142
171
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
172
|
requirements:
|
144
173
|
- - ">="
|
145
174
|
- !ruby/object:Gem::Version
|
175
|
+
segments:
|
176
|
+
- 0
|
146
177
|
version: "0"
|
147
|
-
version:
|
148
178
|
requirements: []
|
149
179
|
|
150
180
|
rubyforge_project:
|
151
|
-
rubygems_version: 1.3.
|
181
|
+
rubygems_version: 1.3.6
|
152
182
|
signing_key:
|
153
183
|
specification_version: 3
|
154
184
|
summary: ""
|
155
185
|
test_files:
|
156
186
|
- test/test_helper.rb
|
187
|
+
- test/job_plugins_test.rb
|
188
|
+
- test/resque-web_test.rb
|
189
|
+
- test/job_hooks_test.rb
|
190
|
+
- test/plugin_test.rb
|
191
|
+
- test/resque-mongo_benchmark.rb
|
157
192
|
- test/worker_test.rb
|
158
193
|
- test/resque_test.rb
|
159
194
|
- examples/demo/app.rb
|