nfo-resque-mongo 1.15.1 → 1.17.1
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.md +32 -0
- data/README.markdown +135 -62
- data/Rakefile +6 -2
- data/lib/nfo-resque-mongo.rb +2 -0
- data/lib/resque.rb +20 -6
- data/lib/resque/failure/hoptoad.rb +22 -113
- data/lib/resque/failure/mongo.rb +6 -1
- data/lib/resque/failure/multiple.rb +5 -1
- data/lib/resque/failure/redis.rb +51 -0
- data/lib/resque/helpers.rb +13 -17
- data/lib/resque/plugin.rb +5 -0
- data/lib/resque/server.rb +18 -8
- data/lib/resque/server/public/favicon.ico +0 -0
- data/lib/resque/server/public/style.css +2 -2
- data/lib/resque/server/views/failed.erb +3 -2
- data/lib/resque/server/views/queues.erb +1 -1
- data/lib/resque/server/views/stats.erb +15 -1
- data/lib/resque/server/views/working.erb +10 -6
- data/lib/resque/version.rb +1 -1
- data/lib/resque/worker.rb +9 -4
- data/{tasks → lib/tasks}/redis.rake +0 -0
- data/{tasks → lib/tasks}/resque.rake +0 -0
- data/test/hoptoad_test.rb +25 -0
- data/test/job_hooks_test.rb +40 -0
- data/test/queue_stats_test.rb +1 -1
- data/test/resque_test.rb +1 -1
- data/test/test_helper.rb +5 -2
- metadata +66 -61
@@ -27,8 +27,14 @@
|
|
27
27
|
|
28
28
|
<% else %>
|
29
29
|
|
30
|
-
<%
|
31
|
-
|
30
|
+
<%
|
31
|
+
workers = resque.working
|
32
|
+
jobs = workers.collect {|w| w.job }
|
33
|
+
worker_jobs = workers.zip(jobs)
|
34
|
+
worker_jobs = worker_jobs.reject { |w, j| w.idle? }
|
35
|
+
%>
|
36
|
+
|
37
|
+
<h1 class='wi'><%= worker_jobs.size %> of <%= resque.workers.size %> Workers Working</h1>
|
32
38
|
<p class='intro'>The list below contains all workers which are currently running a job.</p>
|
33
39
|
<table class='workers'>
|
34
40
|
<tr>
|
@@ -37,15 +43,13 @@
|
|
37
43
|
<th>Queue</th>
|
38
44
|
<th>Processing</th>
|
39
45
|
</tr>
|
40
|
-
<% if
|
46
|
+
<% if worker_jobs.empty? %>
|
41
47
|
<tr>
|
42
48
|
<td colspan="4" class='no-data'>Nothing is happening right now...</td>
|
43
49
|
</tr>
|
44
50
|
<% end %>
|
45
51
|
|
46
|
-
<%
|
47
|
-
<% job = worker.job %>
|
48
|
-
|
52
|
+
<% worker_jobs.sort_by {|w, j| j['run_at'] ? j['run_at'] : '' }.each do |worker, job| %>
|
49
53
|
<tr>
|
50
54
|
<td class='icon'><img src="<%=u state = worker.state %>.png" alt="<%= state %>" title="<%= state %>"></td>
|
51
55
|
<% host, pid, queues = worker.to_s.split(':') %>
|
data/lib/resque/version.rb
CHANGED
data/lib/resque/worker.rb
CHANGED
@@ -117,14 +117,14 @@ module Resque
|
|
117
117
|
loop do
|
118
118
|
break if shutdown?
|
119
119
|
|
120
|
-
if not
|
120
|
+
if not paused? and job = reserve
|
121
121
|
log "got: #{job.inspect}"
|
122
122
|
run_hook :before_fork, job
|
123
123
|
working_on job
|
124
124
|
|
125
125
|
if @child = fork
|
126
|
-
|
127
|
-
procline "Forked #{@child} at #{Time.now.
|
126
|
+
srand # Reseeding
|
127
|
+
procline "Forked #{@child} at #{Time.now.to_i}"
|
128
128
|
Process.wait
|
129
129
|
else
|
130
130
|
procline "Processing #{job.queue} since #{Time.now.to_s} (#{job_count} so far)"
|
@@ -138,7 +138,7 @@ module Resque
|
|
138
138
|
else
|
139
139
|
break if interval.zero?
|
140
140
|
log! "Sleeping for #{interval} seconds"
|
141
|
-
procline
|
141
|
+
procline paused? ? "Paused" : "Waiting for #{@queues.join(',')}"
|
142
142
|
sleep interval
|
143
143
|
end
|
144
144
|
end
|
@@ -299,6 +299,11 @@ module Resque
|
|
299
299
|
end
|
300
300
|
end
|
301
301
|
|
302
|
+
# are we paused?
|
303
|
+
def paused?
|
304
|
+
@paused
|
305
|
+
end
|
306
|
+
|
302
307
|
# Stop processing jobs after the current one has completed (if we're
|
303
308
|
# currently running one).
|
304
309
|
def pause_processing
|
File without changes
|
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'hoptoad_notifier'
|
5
|
+
rescue LoadError
|
6
|
+
warn "Install hoptoad_notifier gem to run Hoptoad tests."
|
7
|
+
end
|
8
|
+
|
9
|
+
if defined? HoptoadNotifier
|
10
|
+
context "Hoptoad" do
|
11
|
+
test "should be notified of an error" do
|
12
|
+
exception = StandardError.new("BOOM")
|
13
|
+
worker = Resque::Worker.new(:test)
|
14
|
+
queue = "test"
|
15
|
+
payload = {'class' => Object, 'args' => 66}
|
16
|
+
|
17
|
+
HoptoadNotifier.expects(:notify_or_ignore).with(
|
18
|
+
exception,
|
19
|
+
:parameters => {:payload_class => 'Object', :payload_args => '66'})
|
20
|
+
|
21
|
+
backend = Resque::Failure::Hoptoad.new(exception, worker, queue, payload)
|
22
|
+
backend.save
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/test/job_hooks_test.rb
CHANGED
@@ -250,6 +250,46 @@ context "Resque::Job after_enqueue" do
|
|
250
250
|
end
|
251
251
|
end
|
252
252
|
|
253
|
+
|
254
|
+
context "Resque::Job before_enqueue" do
|
255
|
+
include PerformJob
|
256
|
+
|
257
|
+
class ::BeforeEnqueueJob
|
258
|
+
@queue = :jobs
|
259
|
+
def self.before_enqueue_record_history(history)
|
260
|
+
history << :before_enqueue
|
261
|
+
end
|
262
|
+
|
263
|
+
def self.perform(history)
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
class ::BeforeEnqueueJobAbort
|
268
|
+
@queue = :jobs
|
269
|
+
def self.before_enqueue_abort(history)
|
270
|
+
false
|
271
|
+
end
|
272
|
+
|
273
|
+
def self.perform(history)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
test "the before enqueue hook should run" do
|
278
|
+
history = []
|
279
|
+
@worker = Resque::Worker.new(:jobs)
|
280
|
+
Resque.enqueue(BeforeEnqueueJob, history)
|
281
|
+
@worker.work(0)
|
282
|
+
assert_equal history, [:before_enqueue], "before_enqueue was not run"
|
283
|
+
end
|
284
|
+
|
285
|
+
test "a before enqueue hook that returns false should prevent the job from getting queued" do
|
286
|
+
history = []
|
287
|
+
@worker = Resque::Worker.new(:jobs)
|
288
|
+
Resque.enqueue(BeforeEnqueueJobAbort, history)
|
289
|
+
assert_equal 0, Resque.size(:jobs)
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
253
293
|
context "Resque::Job all hooks" do
|
254
294
|
include PerformJob
|
255
295
|
|
data/test/queue_stats_test.rb
CHANGED
data/test/resque_test.rb
CHANGED
@@ -13,7 +13,7 @@ context "Resque" do
|
|
13
13
|
#STDERR.puts Resque.queues.inspect
|
14
14
|
assert Resque.queues.include? 'people'
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
test "can put jobs on a queue" do
|
18
18
|
assert Resque::Job.create(:jobs, 'SomeJob', 20, '/tmp')
|
19
19
|
assert Resque::Job.create(:jobs, 'SomeJob', 20, '/tmp')
|
data/test/test_helper.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
Bundler.setup(:default, :test)
|
4
|
+
Bundler.require(:default, :test)
|
5
|
+
|
1
6
|
dir = File.dirname(File.expand_path(__FILE__))
|
2
7
|
$LOAD_PATH.unshift dir + '/../lib'
|
3
8
|
$TESTING = true
|
4
9
|
require 'test/unit'
|
5
|
-
require 'rubygems'
|
6
|
-
require 'resque'
|
7
10
|
|
8
11
|
begin
|
9
12
|
require 'leftright'
|
metadata
CHANGED
@@ -1,88 +1,96 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: nfo-resque-mongo
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.17.1
|
4
5
|
prerelease:
|
5
|
-
version: 1.15.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Chris Wanstrath
|
9
9
|
- Christos Trochalakis
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
dependencies:
|
17
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2011-08-12 00:00:00.000000000Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
18
16
|
name: mongo
|
19
|
-
|
20
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: &2151773960 !ruby/object:Gem::Requirement
|
21
18
|
none: false
|
22
|
-
requirements:
|
23
|
-
- -
|
24
|
-
- !ruby/object:Gem::Version
|
25
|
-
version:
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.0'
|
26
23
|
type: :runtime
|
27
|
-
version_requirements: *id001
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: vegas
|
30
24
|
prerelease: false
|
31
|
-
|
25
|
+
version_requirements: *2151773960
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: vegas
|
28
|
+
requirement: &2151772540 !ruby/object:Gem::Requirement
|
32
29
|
none: false
|
33
|
-
requirements:
|
30
|
+
requirements:
|
34
31
|
- - ~>
|
35
|
-
- !ruby/object:Gem::Version
|
32
|
+
- !ruby/object:Gem::Version
|
36
33
|
version: 0.1.2
|
37
34
|
type: :runtime
|
38
|
-
version_requirements: *id002
|
39
|
-
- !ruby/object:Gem::Dependency
|
40
|
-
name: sinatra
|
41
35
|
prerelease: false
|
42
|
-
|
36
|
+
version_requirements: *2151772540
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: sinatra
|
39
|
+
requirement: &2151771120 !ruby/object:Gem::Requirement
|
43
40
|
none: false
|
44
|
-
requirements:
|
45
|
-
- -
|
46
|
-
- !ruby/object:Gem::Version
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
47
44
|
version: 0.9.2
|
48
45
|
type: :runtime
|
49
|
-
version_requirements: *id003
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: json
|
52
46
|
prerelease: false
|
53
|
-
|
47
|
+
version_requirements: *2151771120
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: multi_json
|
50
|
+
requirement: &2151770140 !ruby/object:Gem::Requirement
|
54
51
|
none: false
|
55
|
-
requirements:
|
52
|
+
requirements:
|
56
53
|
- - ~>
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
version: 1.
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '1.0'
|
59
56
|
type: :runtime
|
60
|
-
|
61
|
-
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *2151770140
|
59
|
+
description: ! " Resque-mongo is a MongoDB-backed Ruby library for creating background
|
60
|
+
jobs,\n placing those jobs on multiple queues, and processing them later.\n\n
|
61
|
+
\ Background jobs can be any Ruby class or module that responds to\n perform.
|
62
|
+
Your existing classes can easily be converted to background\n jobs or you can
|
63
|
+
create new classes specifically to do work. Or, you\n can do both.\n\n Resque
|
64
|
+
is heavily inspired by DelayedJob (which rocks) and is\n comprised of three parts:\n\n
|
65
|
+
\ * A Ruby library for creating, querying, and processing jobs\n * A Rake task
|
66
|
+
for starting a worker which processes jobs\n * A Sinatra app for monitoring queues,
|
67
|
+
jobs, and workers.\n"
|
62
68
|
email: chris@ozmm.org
|
63
|
-
executables:
|
69
|
+
executables:
|
64
70
|
- resque
|
65
71
|
- resque-web
|
66
72
|
extensions: []
|
67
|
-
|
68
|
-
extra_rdoc_files:
|
73
|
+
extra_rdoc_files:
|
69
74
|
- LICENSE
|
70
75
|
- README.markdown
|
71
|
-
files:
|
76
|
+
files:
|
72
77
|
- README.markdown
|
73
78
|
- Rakefile
|
74
79
|
- LICENSE
|
75
80
|
- HISTORY.md
|
81
|
+
- lib/nfo-resque-mongo.rb
|
76
82
|
- lib/resque/errors.rb
|
77
83
|
- lib/resque/failure/base.rb
|
78
84
|
- lib/resque/failure/hoptoad.rb
|
79
85
|
- lib/resque/failure/mongo.rb
|
80
86
|
- lib/resque/failure/multiple.rb
|
87
|
+
- lib/resque/failure/redis.rb
|
81
88
|
- lib/resque/failure.rb
|
82
89
|
- lib/resque/helpers.rb
|
83
90
|
- lib/resque/job.rb
|
84
91
|
- lib/resque/plugin.rb
|
85
92
|
- lib/resque/queue_stats.rb
|
93
|
+
- lib/resque/server/public/favicon.ico
|
86
94
|
- lib/resque/server/public/idle.png
|
87
95
|
- lib/resque/server/public/jquery-1.3.2.min.js
|
88
96
|
- lib/resque/server/public/jquery.relatize_date.js
|
@@ -109,9 +117,12 @@ files:
|
|
109
117
|
- lib/resque/version.rb
|
110
118
|
- lib/resque/worker.rb
|
111
119
|
- lib/resque.rb
|
120
|
+
- lib/tasks/redis.rake
|
121
|
+
- lib/tasks/resque.rake
|
112
122
|
- bin/resque
|
113
123
|
- bin/resque-web
|
114
124
|
- test/dump.rdb
|
125
|
+
- test/hoptoad_test.rb
|
115
126
|
- test/job_hooks_test.rb
|
116
127
|
- test/job_plugins_test.rb
|
117
128
|
- test/plugin_test.rb
|
@@ -121,35 +132,29 @@ files:
|
|
121
132
|
- test/resque_test.rb
|
122
133
|
- test/test_helper.rb
|
123
134
|
- test/worker_test.rb
|
124
|
-
|
125
|
-
- tasks/resque.rake
|
126
|
-
has_rdoc: true
|
127
|
-
homepage: http://github.com/defunkt/resque
|
135
|
+
homepage: http://github.com/nfo/resque-mongo
|
128
136
|
licenses: []
|
129
|
-
|
130
137
|
post_install_message:
|
131
|
-
rdoc_options:
|
138
|
+
rdoc_options:
|
132
139
|
- --charset=UTF-8
|
133
|
-
require_paths:
|
140
|
+
require_paths:
|
134
141
|
- lib
|
135
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
143
|
none: false
|
137
|
-
requirements:
|
138
|
-
- -
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
version:
|
141
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - ! '>='
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: '0'
|
148
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
149
|
none: false
|
143
|
-
requirements:
|
144
|
-
- -
|
145
|
-
- !ruby/object:Gem::Version
|
146
|
-
version:
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
147
154
|
requirements: []
|
148
|
-
|
149
155
|
rubyforge_project:
|
150
|
-
rubygems_version: 1.
|
156
|
+
rubygems_version: 1.8.7
|
151
157
|
signing_key:
|
152
158
|
specification_version: 3
|
153
159
|
summary: Resque is a Redis-backed queueing system.
|
154
160
|
test_files: []
|
155
|
-
|