resque 1.27.4 → 2.6.0
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.
- checksums.yaml +5 -5
- data/HISTORY.md +122 -3
- data/README.markdown +441 -500
- data/bin/resque-web +10 -26
- data/lib/resque/data_store.rb +52 -58
- data/lib/resque/errors.rb +7 -1
- data/lib/resque/failure/airbrake.rb +19 -7
- data/lib/resque/failure/multiple.rb +6 -2
- data/lib/resque/failure/redis.rb +1 -1
- data/lib/resque/failure/redis_multi_queue.rb +1 -1
- data/lib/resque/failure.rb +7 -0
- data/lib/resque/job.rb +2 -2
- data/lib/resque/logging.rb +1 -1
- data/lib/resque/railtie.rb +10 -0
- data/lib/resque/server/public/jquery-3.6.0.min.js +2 -0
- data/lib/resque/server/public/main.js +3 -0
- data/lib/resque/server/public/ranger.js +7 -4
- data/lib/resque/server/public/style.css +3 -3
- data/lib/resque/server/views/error.erb +1 -1
- data/lib/resque/server/views/failed.erb +9 -3
- data/lib/resque/server/views/failed_job.erb +2 -2
- data/lib/resque/server/views/job_class.erb +3 -1
- data/lib/resque/server/views/key_string.erb +1 -1
- data/lib/resque/server/views/layout.erb +5 -4
- data/lib/resque/server/views/next_more.erb +14 -14
- data/lib/resque/server/views/queues.erb +6 -6
- data/lib/resque/server/views/stats.erb +5 -5
- data/lib/resque/server/views/working.erb +7 -7
- data/lib/resque/server.rb +11 -119
- data/lib/resque/server_helper.rb +185 -0
- data/lib/resque/stat.rb +16 -9
- data/lib/resque/tasks.rb +3 -11
- data/lib/resque/thread_signal.rb +13 -34
- data/lib/resque/vendor/utf8_util.rb +2 -8
- data/lib/resque/version.rb +1 -1
- data/lib/resque/web_runner.rb +374 -0
- data/lib/resque/worker.rb +76 -48
- data/lib/resque.rb +100 -27
- data/lib/tasks/redis.rake +10 -10
- metadata +44 -28
- data/lib/resque/server/helpers.rb +0 -64
- data/lib/resque/server/public/jquery-1.12.4.min.js +0 -5
- data/lib/resque/server/test_helper.rb +0 -19
- data/lib/resque/vendor/utf8_util/utf8_util_18.rb +0 -91
- data/lib/resque/vendor/utf8_util/utf8_util_19.rb +0 -6
data/lib/resque.rb
CHANGED
@@ -23,6 +23,8 @@ require 'resque/thread_signal'
|
|
23
23
|
|
24
24
|
require 'resque/vendor/utf8_util'
|
25
25
|
|
26
|
+
require 'resque/railtie' if defined?(Rails::Railtie)
|
27
|
+
|
26
28
|
module Resque
|
27
29
|
include Helpers
|
28
30
|
extend self
|
@@ -112,13 +114,12 @@ module Resque
|
|
112
114
|
def redis=(server)
|
113
115
|
case server
|
114
116
|
when String
|
115
|
-
if server =~ /
|
116
|
-
redis = Redis.
|
117
|
+
if server =~ /rediss?\:\/\//
|
118
|
+
redis = Redis.new(:url => server)
|
117
119
|
else
|
118
120
|
server, namespace = server.split('/', 2)
|
119
121
|
host, port, db = server.split(':')
|
120
|
-
redis = Redis.new(:host => host, :port => port,
|
121
|
-
:thread_safe => true, :db => db)
|
122
|
+
redis = Redis.new(:host => host, :port => port, :db => db)
|
122
123
|
end
|
123
124
|
namespace ||= :resque
|
124
125
|
|
@@ -147,26 +148,76 @@ module Resque
|
|
147
148
|
data_store.identifier
|
148
149
|
end
|
149
150
|
|
151
|
+
# Set the data store for the processed and failed statistics.
|
152
|
+
#
|
153
|
+
# By default it uses the same as `Resque.redis`, but different stores can be used.
|
154
|
+
#
|
155
|
+
# A custom store needs to obey the following API to work correctly
|
156
|
+
#
|
157
|
+
# class NullDataStore
|
158
|
+
# # Returns the current value for the given stat.
|
159
|
+
# def stat(stat)
|
160
|
+
# end
|
161
|
+
#
|
162
|
+
# # Increments the stat by the given value.
|
163
|
+
# def increment_stat(stat, by)
|
164
|
+
# end
|
165
|
+
#
|
166
|
+
# # Decrements the stat by the given value.
|
167
|
+
# def decrement_stat(stat, by)
|
168
|
+
# end
|
169
|
+
#
|
170
|
+
# # Clear the values for the given stat.
|
171
|
+
# def clear_stat(stat)
|
172
|
+
# end
|
173
|
+
# end
|
174
|
+
def stat_data_store=(stat_data_store)
|
175
|
+
Resque::Stat.data_store = stat_data_store
|
176
|
+
end
|
177
|
+
|
178
|
+
# Returns the data store for the statistics module.
|
179
|
+
def stat_data_store
|
180
|
+
Resque::Stat.data_store
|
181
|
+
end
|
182
|
+
|
150
183
|
# Set or retrieve the current logger object
|
151
184
|
attr_accessor :logger
|
152
185
|
|
153
186
|
DEFAULT_HEARTBEAT_INTERVAL = 60
|
154
187
|
DEFAULT_PRUNE_INTERVAL = DEFAULT_HEARTBEAT_INTERVAL * 5
|
155
188
|
|
189
|
+
# Defines how often a Resque worker updates the heartbeat key. Must be less
|
190
|
+
# than the prune interval.
|
156
191
|
attr_writer :heartbeat_interval
|
157
192
|
def heartbeat_interval
|
158
|
-
@heartbeat_interval
|
193
|
+
if defined? @heartbeat_interval
|
194
|
+
@heartbeat_interval
|
195
|
+
else
|
196
|
+
DEFAULT_HEARTBEAT_INTERVAL
|
197
|
+
end
|
159
198
|
end
|
160
199
|
|
200
|
+
# Defines how often Resque checks for dead workers.
|
161
201
|
attr_writer :prune_interval
|
162
202
|
def prune_interval
|
163
|
-
@prune_interval
|
203
|
+
if defined? @prune_interval
|
204
|
+
@prune_interval
|
205
|
+
else
|
206
|
+
DEFAULT_PRUNE_INTERVAL
|
207
|
+
end
|
164
208
|
end
|
165
209
|
|
210
|
+
# By default, jobs are pushed to the back of the queue and popped from
|
211
|
+
# the front, resulting in "first in, first out" (FIFO) execution order.
|
212
|
+
# Set to true to push jobs to the front of the queue instead, resulting
|
213
|
+
# in "last in, first out" (LIFO) execution order.
|
166
214
|
attr_writer :enqueue_front
|
167
215
|
def enqueue_front
|
168
|
-
|
169
|
-
|
216
|
+
if defined? @enqueue_front
|
217
|
+
@enqueue_front
|
218
|
+
else
|
219
|
+
@enqueue_front = false
|
220
|
+
end
|
170
221
|
end
|
171
222
|
|
172
223
|
# The `before_first_fork` hook will be run in the **parent** process
|
@@ -237,6 +288,34 @@ module Resque
|
|
237
288
|
register_hook(:after_pause, block)
|
238
289
|
end
|
239
290
|
|
291
|
+
# The `queue_empty` hook will be run in the **parent** process when
|
292
|
+
# the worker finds no more jobs in the queue and becomes idle.
|
293
|
+
#
|
294
|
+
# Call with a block to register a hook.
|
295
|
+
# Call with no arguments to return all registered hooks.
|
296
|
+
def queue_empty(&block)
|
297
|
+
block ? register_hook(:queue_empty, block) : hooks(:queue_empty)
|
298
|
+
end
|
299
|
+
|
300
|
+
# Register a queue_empty proc.
|
301
|
+
def queue_empty=(block)
|
302
|
+
register_hook(:queue_empty, block)
|
303
|
+
end
|
304
|
+
|
305
|
+
# The `worker_exit` hook will be run in the **parent** process
|
306
|
+
# after the worker has existed (via SIGQUIT, SIGTERM, SIGINT, etc.).
|
307
|
+
#
|
308
|
+
# Call with a block to register a hook.
|
309
|
+
# Call with no arguments to return all registered hooks.
|
310
|
+
def worker_exit(&block)
|
311
|
+
block ? register_hook(:worker_exit, block) : hooks(:worker_exit)
|
312
|
+
end
|
313
|
+
|
314
|
+
# Register a worker_exit proc.
|
315
|
+
def worker_exit=(block)
|
316
|
+
register_hook(:worker_exit, block)
|
317
|
+
end
|
318
|
+
|
240
319
|
def to_s
|
241
320
|
"Resque Client connected to #{redis_id}"
|
242
321
|
end
|
@@ -284,8 +363,8 @@ module Resque
|
|
284
363
|
data_store.queue_size(queue)
|
285
364
|
end
|
286
365
|
|
287
|
-
# Returns an array of items currently queued
|
288
|
-
# a string.
|
366
|
+
# Returns an array of items currently queued, or the item itself
|
367
|
+
# if count = 1. Queue name should be a string.
|
289
368
|
#
|
290
369
|
# start and count should be integer and can be used for pagination.
|
291
370
|
# start is the item to begin, count is how many items to return.
|
@@ -424,7 +503,7 @@ module Resque
|
|
424
503
|
# Given a class, try to extrapolate an appropriate queue based on a
|
425
504
|
# class instance variable or `queue` method.
|
426
505
|
def queue_from_class(klass)
|
427
|
-
klass.instance_variable_get(:@queue) ||
|
506
|
+
(klass.instance_variable_defined?(:@queue) && klass.instance_variable_get(:@queue)) ||
|
428
507
|
(klass.respond_to?(:queue) and klass.queue)
|
429
508
|
end
|
430
509
|
|
@@ -483,7 +562,7 @@ module Resque
|
|
483
562
|
# Returns a hash, similar to redis-rb's #info, of interesting stats.
|
484
563
|
def info
|
485
564
|
return {
|
486
|
-
:pending => queue_sizes.inject(0) { |sum, (
|
565
|
+
:pending => queue_sizes.inject(0) { |sum, (_queue_name, queue_size)| sum + queue_size },
|
487
566
|
:processed => Stat[:processed],
|
488
567
|
:queues => queues.size,
|
489
568
|
:workers => workers.size.to_i,
|
@@ -504,9 +583,9 @@ module Resque
|
|
504
583
|
def queue_sizes
|
505
584
|
queue_names = queues
|
506
585
|
|
507
|
-
sizes = redis.pipelined do
|
586
|
+
sizes = redis.pipelined do |piped|
|
508
587
|
queue_names.each do |name|
|
509
|
-
|
588
|
+
piped.llen("queue:#{name}")
|
510
589
|
end
|
511
590
|
end
|
512
591
|
|
@@ -517,11 +596,11 @@ module Resque
|
|
517
596
|
def sample_queues(sample_size = 1000)
|
518
597
|
queue_names = queues
|
519
598
|
|
520
|
-
samples = redis.pipelined do
|
599
|
+
samples = redis.pipelined do |piped|
|
521
600
|
queue_names.each do |name|
|
522
601
|
key = "queue:#{name}"
|
523
|
-
|
524
|
-
|
602
|
+
piped.llen(key)
|
603
|
+
piped.lrange(key, 0, sample_size - 1)
|
525
604
|
end
|
526
605
|
end
|
527
606
|
|
@@ -543,6 +622,8 @@ module Resque
|
|
543
622
|
|
544
623
|
private
|
545
624
|
|
625
|
+
@hooks = Hash.new { |h, k| h[k] = [] }
|
626
|
+
|
546
627
|
# Register a new proc as a hook. If the block is nil this is the
|
547
628
|
# equivalent of removing all hooks of the given name.
|
548
629
|
#
|
@@ -550,26 +631,18 @@ module Resque
|
|
550
631
|
def register_hook(name, block)
|
551
632
|
return clear_hooks(name) if block.nil?
|
552
633
|
|
553
|
-
@hooks ||= {}
|
554
|
-
@hooks[name] ||= []
|
555
|
-
|
556
634
|
block = Array(block)
|
557
635
|
@hooks[name].concat(block)
|
558
636
|
end
|
559
637
|
|
560
638
|
# Clear all hooks given a hook name.
|
561
639
|
def clear_hooks(name)
|
562
|
-
@hooks
|
563
|
-
end
|
564
|
-
|
565
|
-
# Retrieve all hooks
|
566
|
-
def hooks
|
567
|
-
@hooks || {}
|
640
|
+
@hooks[name] = []
|
568
641
|
end
|
569
642
|
|
570
643
|
# Retrieve all hooks of a given name.
|
571
644
|
def hooks(name)
|
572
|
-
|
645
|
+
@hooks[name]
|
573
646
|
end
|
574
647
|
end
|
575
648
|
|
data/lib/tasks/redis.rake
CHANGED
@@ -17,7 +17,7 @@ class RedisRunner
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.config
|
20
|
-
@config ||= if File.
|
20
|
+
@config ||= if File.exist?(redis_dir + 'etc/redis.conf')
|
21
21
|
redis_dir + 'etc/redis.conf'
|
22
22
|
else
|
23
23
|
redis_dir + '../etc/redis.conf'
|
@@ -30,7 +30,7 @@ class RedisRunner
|
|
30
30
|
|
31
31
|
# Just check for existance of dtach socket
|
32
32
|
def self.running?
|
33
|
-
File.
|
33
|
+
File.exist? dtach_socket
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.start
|
@@ -90,10 +90,10 @@ namespace :redis do
|
|
90
90
|
|
91
91
|
if ENV['PREFIX']
|
92
92
|
bin_dir = "#{ENV['PREFIX']}/bin"
|
93
|
-
sh "mkdir -p #{bin_dir}" unless File.
|
93
|
+
sh "mkdir -p #{bin_dir}" unless File.exist?("#{bin_dir}")
|
94
94
|
|
95
95
|
conf_dir = "#{ENV['PREFIX']}/etc"
|
96
|
-
sh "mkdir -p #{conf_dir}" unless File.
|
96
|
+
sh "mkdir -p #{conf_dir}" unless File.exist?("#{conf_dir}")
|
97
97
|
end
|
98
98
|
|
99
99
|
%w(redis-benchmark redis-cli redis-server).each do |bin|
|
@@ -102,7 +102,7 @@ namespace :redis do
|
|
102
102
|
|
103
103
|
puts "Installed redis-benchmark, redis-cli and redis-server to #{bin_dir}"
|
104
104
|
|
105
|
-
unless File.
|
105
|
+
unless File.exist?("#{conf_dir}/redis.conf")
|
106
106
|
sh "cp #{INSTALL_DIR}/redis.conf #{conf_dir}/redis.conf"
|
107
107
|
puts "Installed redis.conf to #{conf_dir} \n You should look at this file!"
|
108
108
|
end
|
@@ -115,9 +115,9 @@ namespace :redis do
|
|
115
115
|
|
116
116
|
desc "Download package"
|
117
117
|
task :download do
|
118
|
-
sh "rm -rf #{INSTALL_DIR}/" if File.
|
119
|
-
sh "git clone git://github.com/antirez/redis.git #{INSTALL_DIR}" unless File.
|
120
|
-
sh "cd #{INSTALL_DIR} && git pull" if File.
|
118
|
+
sh "rm -rf #{INSTALL_DIR}/" if File.exist?("#{INSTALL_DIR}/.svn")
|
119
|
+
sh "git clone git://github.com/antirez/redis.git #{INSTALL_DIR}" unless File.exist?(INSTALL_DIR)
|
120
|
+
sh "cd #{INSTALL_DIR} && git pull" if File.exist?("#{INSTALL_DIR}/.git")
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|
@@ -135,7 +135,7 @@ namespace :dtach do
|
|
135
135
|
|
136
136
|
if ENV['PREFIX']
|
137
137
|
bin_dir = "#{ENV['PREFIX']}/bin"
|
138
|
-
sh "mkdir -p #{bin_dir}" unless File.
|
138
|
+
sh "mkdir -p #{bin_dir}" unless File.exist?("#{bin_dir}")
|
139
139
|
end
|
140
140
|
|
141
141
|
sh "cp #{INSTALL_DIR}/dtach-0.8/dtach #{bin_dir}"
|
@@ -147,7 +147,7 @@ namespace :dtach do
|
|
147
147
|
|
148
148
|
desc "Download package"
|
149
149
|
task :download do
|
150
|
-
unless File.
|
150
|
+
unless File.exist?("#{INSTALL_DIR}/dtach-0.8.tar.gz")
|
151
151
|
require 'net/http'
|
152
152
|
|
153
153
|
url = 'http://downloads.sourceforge.net/project/dtach/dtach/0.8/dtach-0.8.tar.gz'
|
metadata
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Wanstrath
|
8
8
|
- Steve Klabnik
|
9
9
|
- Terence Lee
|
10
|
+
- Michael Bianco
|
10
11
|
autorequire:
|
11
12
|
bindir: bin
|
12
13
|
cert_chain: []
|
13
|
-
date:
|
14
|
+
date: 2023-08-19 00:00:00.000000000 Z
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: redis-namespace
|
@@ -18,28 +19,14 @@ dependencies:
|
|
18
19
|
requirements:
|
19
20
|
- - "~>"
|
20
21
|
- !ruby/object:Gem::Version
|
21
|
-
version: '1.
|
22
|
+
version: '1.6'
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
25
|
version_requirements: !ruby/object:Gem::Requirement
|
25
26
|
requirements:
|
26
27
|
- - "~>"
|
27
28
|
- !ruby/object:Gem::Version
|
28
|
-
version: '1.
|
29
|
-
- !ruby/object:Gem::Dependency
|
30
|
-
name: vegas
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - "~>"
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: 0.1.2
|
36
|
-
type: :runtime
|
37
|
-
prerelease: false
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 0.1.2
|
29
|
+
version: '1.6'
|
43
30
|
- !ruby/object:Gem::Dependency
|
44
31
|
name: sinatra
|
45
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,6 +69,34 @@ dependencies:
|
|
82
69
|
- - "~>"
|
83
70
|
- !ruby/object:Gem::Version
|
84
71
|
version: '1.0'
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: thin
|
74
|
+
requirement: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
type: :development
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: webrick
|
88
|
+
requirement: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
type: :development
|
94
|
+
prerelease: false
|
95
|
+
version_requirements: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
85
100
|
description: |2
|
86
101
|
Resque is a Redis-backed Ruby library for creating background jobs,
|
87
102
|
placing those jobs on multiple queues, and processing them later.
|
@@ -128,18 +143,18 @@ files:
|
|
128
143
|
- lib/resque/log_formatters/very_verbose_formatter.rb
|
129
144
|
- lib/resque/logging.rb
|
130
145
|
- lib/resque/plugin.rb
|
146
|
+
- lib/resque/railtie.rb
|
131
147
|
- lib/resque/server.rb
|
132
|
-
- lib/resque/server/helpers.rb
|
133
148
|
- lib/resque/server/public/favicon.ico
|
134
149
|
- lib/resque/server/public/idle.png
|
135
|
-
- lib/resque/server/public/jquery-
|
150
|
+
- lib/resque/server/public/jquery-3.6.0.min.js
|
136
151
|
- lib/resque/server/public/jquery.relatize_date.js
|
152
|
+
- lib/resque/server/public/main.js
|
137
153
|
- lib/resque/server/public/poll.png
|
138
154
|
- lib/resque/server/public/ranger.js
|
139
155
|
- lib/resque/server/public/reset.css
|
140
156
|
- lib/resque/server/public/style.css
|
141
157
|
- lib/resque/server/public/working.png
|
142
|
-
- lib/resque/server/test_helper.rb
|
143
158
|
- lib/resque/server/views/error.erb
|
144
159
|
- lib/resque/server/views/failed.erb
|
145
160
|
- lib/resque/server/views/failed_job.erb
|
@@ -155,20 +170,22 @@ files:
|
|
155
170
|
- lib/resque/server/views/stats.erb
|
156
171
|
- lib/resque/server/views/workers.erb
|
157
172
|
- lib/resque/server/views/working.erb
|
173
|
+
- lib/resque/server_helper.rb
|
158
174
|
- lib/resque/stat.rb
|
159
175
|
- lib/resque/tasks.rb
|
160
176
|
- lib/resque/thread_signal.rb
|
161
177
|
- lib/resque/vendor/utf8_util.rb
|
162
|
-
- lib/resque/vendor/utf8_util/utf8_util_18.rb
|
163
|
-
- lib/resque/vendor/utf8_util/utf8_util_19.rb
|
164
178
|
- lib/resque/version.rb
|
179
|
+
- lib/resque/web_runner.rb
|
165
180
|
- lib/resque/worker.rb
|
166
181
|
- lib/tasks/redis.rake
|
167
182
|
- lib/tasks/resque.rake
|
168
|
-
homepage:
|
183
|
+
homepage: https://github.com/resque/resque
|
169
184
|
licenses:
|
170
185
|
- MIT
|
171
|
-
metadata:
|
186
|
+
metadata:
|
187
|
+
changelog_uri: https://github.com/resque/resque/blob/master/HISTORY.md
|
188
|
+
rubygems_mfa_required: 'true'
|
172
189
|
post_install_message:
|
173
190
|
rdoc_options:
|
174
191
|
- "--charset=UTF-8"
|
@@ -178,15 +195,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
178
195
|
requirements:
|
179
196
|
- - ">="
|
180
197
|
- !ruby/object:Gem::Version
|
181
|
-
version:
|
198
|
+
version: 2.3.0
|
182
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
200
|
requirements:
|
184
201
|
- - ">="
|
185
202
|
- !ruby/object:Gem::Version
|
186
203
|
version: '0'
|
187
204
|
requirements: []
|
188
|
-
|
189
|
-
rubygems_version: 2.6.11
|
205
|
+
rubygems_version: 3.4.10
|
190
206
|
signing_key:
|
191
207
|
specification_version: 4
|
192
208
|
summary: Resque is a Redis-backed queueing system.
|
@@ -1,64 +0,0 @@
|
|
1
|
-
Resque::Server.helpers do
|
2
|
-
####################
|
3
|
-
#failed.erb helpers#
|
4
|
-
####################
|
5
|
-
|
6
|
-
def failed_date_format
|
7
|
-
"%Y/%m/%d %T %z"
|
8
|
-
end
|
9
|
-
|
10
|
-
def failed_multiple_queues?
|
11
|
-
return @multiple_failed_queues if defined?(@multiple_failed_queues)
|
12
|
-
@multiple_failed_queues = Resque::Failure.queues.size > 1
|
13
|
-
end
|
14
|
-
|
15
|
-
def failed_size
|
16
|
-
@failed_size ||= Resque::Failure.count(params[:queue], params[:class])
|
17
|
-
end
|
18
|
-
|
19
|
-
def failed_per_page
|
20
|
-
@failed_per_page = if params[:class]
|
21
|
-
failed_size
|
22
|
-
else
|
23
|
-
20
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def failed_start_at
|
28
|
-
params[:start].to_i
|
29
|
-
end
|
30
|
-
|
31
|
-
def failed_end_at
|
32
|
-
if failed_start_at + failed_per_page > failed_size
|
33
|
-
failed_size
|
34
|
-
else
|
35
|
-
failed_start_at + failed_per_page - 1
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def failed_order
|
40
|
-
params[:order] || 'desc'
|
41
|
-
end
|
42
|
-
|
43
|
-
def failed_class_counts(queue = params[:queue])
|
44
|
-
classes = Hash.new(0)
|
45
|
-
Resque::Failure.each(0, Resque::Failure.count(queue), queue) do |_, item|
|
46
|
-
class_name = item['payload']['class'] if item['payload']
|
47
|
-
class_name ||= "nil"
|
48
|
-
classes[class_name] += 1
|
49
|
-
end
|
50
|
-
classes
|
51
|
-
end
|
52
|
-
|
53
|
-
def page_entries_info(start, stop, size, name = nil)
|
54
|
-
if size == 0
|
55
|
-
name ? "No #{name}s" : '<b>0</b>'
|
56
|
-
elsif size == 1
|
57
|
-
'Showing <b>1</b>' + (name ? " #{name}" : '')
|
58
|
-
elsif size > failed_per_page
|
59
|
-
"Showing #{start}-#{stop} of <b>#{size}</b>" + (name ? " #{name}s" : '')
|
60
|
-
else
|
61
|
-
"Showing #{start} to <b>#{size - 1}</b>" + (name ? " #{name}s" : '')
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|