resque-admin-scheduler 1.0.2 → 1.3.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 +4 -4
- data/bin/migrate_to_timestamps_set.rb +16 -0
- data/exe/resque-scheduler +2 -2
- data/lib/resque/scheduler/cli.rb +6 -6
- data/lib/resque/scheduler/delaying_extensions.rb +14 -14
- data/lib/resque/scheduler/env.rb +7 -7
- data/lib/resque/scheduler/lock.rb +1 -1
- data/lib/resque/scheduler/locking.rb +7 -7
- data/lib/resque/scheduler/logger_builder.rb +4 -4
- data/lib/resque/scheduler/scheduling_extensions.rb +4 -4
- data/lib/resque/scheduler/server/views/delayed.erb +4 -4
- data/lib/resque/scheduler/server/views/search.erb +1 -1
- data/lib/resque/scheduler/server.rb +37 -37
- data/lib/resque/scheduler/signal_handling.rb +1 -1
- data/lib/resque/scheduler/tasks.rb +6 -6
- data/lib/resque/scheduler/util.rb +4 -4
- data/lib/resque/scheduler_admin/cli.rb +147 -0
- data/lib/resque/scheduler_admin/delaying_extensions.rb +324 -0
- data/lib/resque/scheduler_admin/env.rb +89 -0
- data/lib/resque/scheduler_admin/lock.rb +4 -0
- data/lib/resque/scheduler_admin/locking.rb +104 -0
- data/lib/resque/scheduler_admin/logger_builder.rb +72 -0
- data/lib/resque/scheduler_admin/scheduling_extensions.rb +141 -0
- data/lib/resque/scheduler_admin/server/views/delayed.erb +63 -0
- data/lib/resque/scheduler_admin/server/views/search.erb +72 -0
- data/lib/resque/scheduler_admin/signal_handling.rb +40 -0
- data/lib/resque/scheduler_admin/tasks.rb +25 -0
- data/lib/resque/scheduler_admin/util.rb +39 -0
- data/lib/resque-admin-scheduler.rb +4 -0
- data/lib/resque_admin/scheduler/cli.rb +147 -0
- data/lib/{resque → resque_admin}/scheduler/configuration.rb +1 -1
- data/lib/resque_admin/scheduler/delaying_extensions.rb +324 -0
- data/lib/resque_admin/scheduler/env.rb +89 -0
- data/lib/{resque → resque_admin}/scheduler/extension.rb +1 -1
- data/lib/{resque → resque_admin}/scheduler/failure_handler.rb +2 -2
- data/lib/{resque → resque_admin}/scheduler/lock/base.rb +3 -3
- data/lib/{resque → resque_admin}/scheduler/lock/basic.rb +4 -4
- data/lib/{resque → resque_admin}/scheduler/lock/resilient.rb +4 -4
- data/lib/resque_admin/scheduler/lock.rb +4 -0
- data/lib/resque_admin/scheduler/locking.rb +104 -0
- data/lib/resque_admin/scheduler/logger_builder.rb +72 -0
- data/lib/{resque → resque_admin}/scheduler/plugin.rb +1 -1
- data/lib/resque_admin/scheduler/scheduling_extensions.rb +141 -0
- data/lib/resque_admin/scheduler/server/views/delayed.erb +63 -0
- data/lib/{resque → resque_admin}/scheduler/server/views/delayed_schedules.erb +0 -0
- data/lib/{resque → resque_admin}/scheduler/server/views/delayed_timestamp.erb +2 -2
- data/lib/{resque → resque_admin}/scheduler/server/views/requeue-params.erb +0 -0
- data/lib/{resque → resque_admin}/scheduler/server/views/scheduler.erb +7 -7
- data/lib/resque_admin/scheduler/server/views/search.erb +72 -0
- data/lib/{resque → resque_admin}/scheduler/server/views/search_form.erb +0 -0
- data/lib/resque_admin/scheduler/server.rb +268 -0
- data/lib/resque_admin/scheduler/signal_handling.rb +40 -0
- data/lib/resque_admin/scheduler/tasks.rb +25 -0
- data/lib/resque_admin/scheduler/util.rb +39 -0
- data/lib/{resque → resque_admin}/scheduler/version.rb +2 -2
- data/lib/{resque → resque_admin}/scheduler.rb +44 -44
- data/tasks/resque_admin_scheduler.rake +2 -0
- metadata +47 -85
- data/AUTHORS.md +0 -81
- data/CHANGELOG.md +0 -456
- data/CODE_OF_CONDUCT.md +0 -74
- data/CONTRIBUTING.md +0 -6
- data/Gemfile +0 -4
- data/LICENSE +0 -23
- data/README.md +0 -691
- data/Rakefile +0 -21
- data/lib/resque-scheduler.rb +0 -4
- data/resque-scheduler.gemspec +0 -60
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 480fe9565b4e589d1af66f650d235c2cb1d17db5
|
4
|
+
data.tar.gz: 4ec0e5445bcb1b6cbb404ed1fe0d4e17c132cd4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46cc8ebbab4bae754421bd24b5a5e02e5b9762b3851ba38c9f2f543203907739c28fc0730d28e558f326c05a150f3c584cfd421116a6975274aabf0d5b1040cd
|
7
|
+
data.tar.gz: bd36ba04d100a60dea2599222b5a937aabe8dcc4c59351193ac8f0bcff3e0b74406d03f8b4eee35f5c67e18e4fdbbb4709480ca7c86c544b008b0eb48c528cf6
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# vim:fileencoding=utf-8
|
2
|
+
|
3
|
+
require 'redis'
|
4
|
+
require 'resque_admin'
|
5
|
+
|
6
|
+
if ARGV.size != 1
|
7
|
+
puts 'migrate_to_timestamps_set.rb <redis-host:redis-port>'
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
ResqueAdmin.redis = ARGV[0]
|
12
|
+
redis = ResqueAdmin.redis
|
13
|
+
Array(redis.keys('delayed:*')).each do |key|
|
14
|
+
jobs = redis.lrange(key, 0, -1)
|
15
|
+
jobs.each { |job| redis.sadd("timestamps:#{job}", key) }
|
16
|
+
end
|
data/exe/resque-scheduler
CHANGED
data/lib/resque/scheduler/cli.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'optparse'
|
4
4
|
|
5
|
-
module
|
5
|
+
module ResqueAdmin
|
6
6
|
module Scheduler
|
7
7
|
CLI_OPTIONS_ENV_MAPPING = {
|
8
8
|
app_name: 'APP_NAME',
|
@@ -20,9 +20,9 @@ module Resque
|
|
20
20
|
|
21
21
|
class Cli
|
22
22
|
BANNER = <<-EOF.gsub(/ {6}/, '')
|
23
|
-
Usage:
|
23
|
+
Usage: resque_admin-scheduler [options]
|
24
24
|
|
25
|
-
Runs a
|
25
|
+
Runs a resque_admin scheduler process directly (rather than via rake).
|
26
26
|
|
27
27
|
EOF
|
28
28
|
OPTIONS = [
|
@@ -114,7 +114,7 @@ module Resque
|
|
114
114
|
end
|
115
115
|
|
116
116
|
def run_forever
|
117
|
-
|
117
|
+
ResqueAdmin::Scheduler.run
|
118
118
|
end
|
119
119
|
|
120
120
|
private
|
@@ -122,13 +122,13 @@ module Resque
|
|
122
122
|
attr_reader :argv, :env
|
123
123
|
|
124
124
|
def runtime_env
|
125
|
-
@runtime_env ||=
|
125
|
+
@runtime_env ||= ResqueAdmin::Scheduler::Env.new(options)
|
126
126
|
end
|
127
127
|
|
128
128
|
def option_parser
|
129
129
|
OptionParser.new do |opts|
|
130
130
|
opts.banner = BANNER
|
131
|
-
opts.version =
|
131
|
+
opts.version = ResqueAdmin::Scheduler::VERSION
|
132
132
|
OPTIONS.each do |opt|
|
133
133
|
opts.on(*opt[:args], &opt[:callback].call(options))
|
134
134
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# vim:fileencoding=utf-8
|
2
|
-
require '
|
2
|
+
require 'resque_admin'
|
3
3
|
require_relative 'plugin'
|
4
4
|
require_relative '../scheduler'
|
5
5
|
|
6
|
-
module
|
6
|
+
module ResqueAdmin
|
7
7
|
module Scheduler
|
8
8
|
module DelayingExtensions
|
9
9
|
# This method is nearly identical to +enqueue+ only it also
|
@@ -19,21 +19,21 @@ module Resque
|
|
19
19
|
|
20
20
|
# Identical to +enqueue_at+, except you can also specify
|
21
21
|
# a queue in which the job will be placed after the
|
22
|
-
# timestamp has passed. It respects
|
22
|
+
# timestamp has passed. It respects ResqueAdmin.inline option, by
|
23
23
|
# creating the job right away instead of adding to the queue.
|
24
24
|
def enqueue_at_with_queue(queue, timestamp, klass, *args)
|
25
25
|
return false unless plugin.run_before_schedule_hooks(klass, *args)
|
26
26
|
|
27
|
-
if
|
28
|
-
# Just create the job and let
|
27
|
+
if ResqueAdmin.inline? || timestamp.to_i < Time.now.to_i
|
28
|
+
# Just create the job and let resque_admin perform it right away with
|
29
29
|
# inline. If the class is a custom job class, call self#scheduled
|
30
30
|
# on it. This allows you to do things like
|
31
|
-
#
|
32
|
-
# Otherwise, pass off to
|
31
|
+
# ResqueAdmin.enqueue_at(timestamp, CustomJobClass, :opt1 => val1).
|
32
|
+
# Otherwise, pass off to ResqueAdmin.
|
33
33
|
if klass.respond_to?(:scheduled)
|
34
34
|
klass.scheduled(queue, klass.to_s, *args)
|
35
35
|
else
|
36
|
-
|
36
|
+
ResqueAdmin::Job.create(queue, klass, *args)
|
37
37
|
end
|
38
38
|
else
|
39
39
|
delayed_push(timestamp, job_to_hash_with_queue(queue, klass, args))
|
@@ -147,7 +147,7 @@ module Resque
|
|
147
147
|
def enqueue_delayed(klass, *args)
|
148
148
|
hash = job_to_hash(klass, args)
|
149
149
|
remove_delayed(klass, *args).times do
|
150
|
-
|
150
|
+
ResqueAdmin::Scheduler.enqueue_from_config(hash)
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
@@ -210,7 +210,7 @@ module Resque
|
|
210
210
|
# O(N) where N is the number of jobs scheduled to fire at the given
|
211
211
|
# timestamp
|
212
212
|
def remove_delayed_job_from_timestamp(timestamp, klass, *args)
|
213
|
-
return 0 if
|
213
|
+
return 0 if ResqueAdmin.inline?
|
214
214
|
|
215
215
|
key = "delayed:#{timestamp.to_i}"
|
216
216
|
encoded_job = encode(job_to_hash(klass, args))
|
@@ -232,8 +232,8 @@ module Resque
|
|
232
232
|
|
233
233
|
# Discover if a job has been delayed.
|
234
234
|
# Examples
|
235
|
-
#
|
236
|
-
#
|
235
|
+
# ResqueAdmin.delayed?(MyJob)
|
236
|
+
# ResqueAdmin.delayed?(MyJob, id: 1)
|
237
237
|
# Returns true if the job has been delayed
|
238
238
|
def delayed?(klass, *args)
|
239
239
|
!scheduled_at(klass, *args).empty?
|
@@ -266,7 +266,7 @@ module Resque
|
|
266
266
|
end
|
267
267
|
|
268
268
|
def remove_delayed_job(encoded_job)
|
269
|
-
return 0 if
|
269
|
+
return 0 if ResqueAdmin.inline?
|
270
270
|
|
271
271
|
timestamps = redis.smembers("timestamps:#{encoded_job}")
|
272
272
|
|
@@ -317,7 +317,7 @@ module Resque
|
|
317
317
|
end
|
318
318
|
|
319
319
|
def plugin
|
320
|
-
|
320
|
+
ResqueAdmin::Scheduler::Plugin
|
321
321
|
end
|
322
322
|
end
|
323
323
|
end
|
data/lib/resque/scheduler/env.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'English' # $PROCESS_ID
|
4
4
|
|
5
|
-
module
|
5
|
+
module ResqueAdmin
|
6
6
|
module Scheduler
|
7
7
|
class Env
|
8
8
|
def initialize(options)
|
@@ -11,8 +11,8 @@ module Resque
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def setup
|
14
|
-
require '
|
15
|
-
require '
|
14
|
+
require 'resque_admin'
|
15
|
+
require 'resque_admin/scheduler'
|
16
16
|
|
17
17
|
setup_backgrounding
|
18
18
|
setup_pid_file
|
@@ -32,7 +32,7 @@ module Resque
|
|
32
32
|
|
33
33
|
# Need to set this here for conditional Process.daemon redirect of
|
34
34
|
# stderr/stdout to /dev/null
|
35
|
-
|
35
|
+
ResqueAdmin::Scheduler.quiet = if options.key?(:quiet)
|
36
36
|
!!options[:quiet]
|
37
37
|
else
|
38
38
|
true
|
@@ -42,8 +42,8 @@ module Resque
|
|
42
42
|
abort 'background option is set, which requires ruby >= 1.9'
|
43
43
|
end
|
44
44
|
|
45
|
-
Process.daemon(true, !
|
46
|
-
|
45
|
+
Process.daemon(true, !ResqueAdmin::Scheduler.quiet)
|
46
|
+
ResqueAdmin.redis.client.reconnect
|
47
47
|
end
|
48
48
|
|
49
49
|
def setup_pid_file
|
@@ -59,7 +59,7 @@ module Resque
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def setup_scheduler_configuration
|
62
|
-
|
62
|
+
ResqueAdmin::Scheduler.configure do |c|
|
63
63
|
c.app_name = options[:app_name] if options.key?(:app_name)
|
64
64
|
|
65
65
|
c.dynamic = !!options[:dynamic] if options.key?(:dynamic)
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# ### Locking the scheduler process
|
4
4
|
#
|
5
|
-
# There are two places in
|
5
|
+
# There are two places in resque_admin-scheduler that need to be synchonized in order
|
6
6
|
# to be able to run redundant scheduler processes while ensuring jobs don't get
|
7
7
|
# queued multiple times when the master process changes.
|
8
8
|
#
|
@@ -23,7 +23,7 @@
|
|
23
23
|
# should remain the master as long as it can rather than a simple SETNX which
|
24
24
|
# would result in the master roll being passed around frequently.
|
25
25
|
#
|
26
|
-
# Locking Scheme: Each
|
26
|
+
# Locking Scheme: Each resque_admin-scheduler process attempts to get the master lock
|
27
27
|
# via SETNX. Once obtained, it sets the expiration for 3 minutes
|
28
28
|
# (configurable). The master process continually updates the timeout on the
|
29
29
|
# lock key to be 3 minutes in the future in it's loop(s) (see `run`) and when
|
@@ -51,7 +51,7 @@
|
|
51
51
|
|
52
52
|
require_relative 'lock'
|
53
53
|
|
54
|
-
module
|
54
|
+
module ResqueAdmin
|
55
55
|
module Scheduler
|
56
56
|
module Locking
|
57
57
|
def master_lock
|
@@ -84,20 +84,20 @@ module Resque
|
|
84
84
|
|
85
85
|
def build_master_lock
|
86
86
|
if supports_lua?
|
87
|
-
|
87
|
+
ResqueAdmin::Scheduler::Lock::Resilient.new(master_lock_key)
|
88
88
|
else
|
89
|
-
|
89
|
+
ResqueAdmin::Scheduler::Lock::Basic.new(master_lock_key)
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
93
|
def master_lock_key
|
94
94
|
lock_prefix = ENV['RESQUE_SCHEDULER_MASTER_LOCK_PREFIX'] || ''
|
95
95
|
lock_prefix += ':' if lock_prefix != ''
|
96
|
-
"#{
|
96
|
+
"#{ResqueAdmin.redis.namespace}:#{lock_prefix}resque_scheduler_master_lock"
|
97
97
|
end
|
98
98
|
|
99
99
|
def redis_master_version
|
100
|
-
|
100
|
+
ResqueAdmin.redis.info['redis_version'].to_f
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'mono_logger'
|
4
4
|
|
5
|
-
module
|
5
|
+
module ResqueAdmin
|
6
6
|
module Scheduler
|
7
7
|
# Just builds a logger, with specified verbosity and destination.
|
8
8
|
# The simplest example:
|
9
9
|
#
|
10
|
-
#
|
10
|
+
# ResqueAdmin::Scheduler::LoggerBuilder.new.build
|
11
11
|
class LoggerBuilder
|
12
12
|
# Initializes new instance of the builder
|
13
13
|
#
|
@@ -51,7 +51,7 @@ module Resque
|
|
51
51
|
|
52
52
|
def text_formatter
|
53
53
|
proc do |severity, datetime, _progname, msg|
|
54
|
-
"
|
54
|
+
"resque_admin-scheduler: [#{severity}] #{datetime.iso8601}: #{msg}\n"
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -59,7 +59,7 @@ module Resque
|
|
59
59
|
proc do |severity, datetime, progname, msg|
|
60
60
|
require 'json'
|
61
61
|
JSON.dump(
|
62
|
-
name: '
|
62
|
+
name: 'resque_admin-scheduler',
|
63
63
|
progname: progname,
|
64
64
|
level: severity,
|
65
65
|
timestamp: datetime.iso8601,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# vim:fileencoding=utf-8
|
2
2
|
|
3
|
-
module
|
3
|
+
module ResqueAdmin
|
4
4
|
module Scheduler
|
5
5
|
module SchedulingExtensions
|
6
6
|
# Accepts a new schedule configuration of the form:
|
@@ -19,7 +19,7 @@ module Resque
|
|
19
19
|
# Hash keys can be anything and are used to describe and reference
|
20
20
|
# the scheduled job. If the "class" argument is missing, the key
|
21
21
|
# is used implicitly as "class" argument - in the "MakeTea" example,
|
22
|
-
# "MakeTea" is used both as job name and
|
22
|
+
# "MakeTea" is used both as job name and resque_admin worker class.
|
23
23
|
#
|
24
24
|
# Any jobs that were in the old schedule, but are not
|
25
25
|
# present in the new schedule, will be removed.
|
@@ -30,7 +30,7 @@ module Resque
|
|
30
30
|
# usage for valid syntax. If :cron is present it will take precedence
|
31
31
|
# over :every.
|
32
32
|
#
|
33
|
-
# :class must be a
|
33
|
+
# :class must be a resque_admin worker class. If it is missing, the job name
|
34
34
|
# (hash key) will be used as :class.
|
35
35
|
#
|
36
36
|
# :args can be any yaml which will be converted to a ruby literal and
|
@@ -76,7 +76,7 @@ module Resque
|
|
76
76
|
# Note: values for class and custom_job_class need to be strings,
|
77
77
|
# not constants.
|
78
78
|
#
|
79
|
-
#
|
79
|
+
# ResqueAdmin.set_schedule('some_job', {:class => 'SomeJob',
|
80
80
|
# :every => '15mins',
|
81
81
|
# :queue => 'high',
|
82
82
|
# :args => '/tmp/poop'})
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<h1>Delayed Jobs</h1>
|
2
|
-
<%- size =
|
2
|
+
<%- size = resque_admin.delayed_queue_schedule_size %>
|
3
3
|
|
4
4
|
<%= scheduler_view :search_form, layout: false %>
|
5
5
|
|
@@ -25,7 +25,7 @@
|
|
25
25
|
<th>Args</th>
|
26
26
|
<th>All schedules</th>
|
27
27
|
</tr>
|
28
|
-
<%
|
28
|
+
<% resque_admin.delayed_queue_peek(start, 20).each do |timestamp| %>
|
29
29
|
<tr>
|
30
30
|
<td>
|
31
31
|
<form action="<%= u "/delayed/queue_now" %>" method="post">
|
@@ -34,8 +34,8 @@
|
|
34
34
|
</form>
|
35
35
|
</td>
|
36
36
|
<td><a href="<%= u "delayed/#{timestamp}" %>"><%= format_time(Time.at(timestamp)) %></a></td>
|
37
|
-
<td><%= delayed_timestamp_size =
|
38
|
-
<% job =
|
37
|
+
<td><%= delayed_timestamp_size = resque_admin.delayed_timestamp_size(timestamp) %></td>
|
38
|
+
<% job = resque_admin.delayed_timestamp_peek(timestamp, 0, 1).first %>
|
39
39
|
<td>
|
40
40
|
<% if job && delayed_timestamp_size == 1 %>
|
41
41
|
<%= h(job['class']) %>
|
@@ -23,7 +23,7 @@
|
|
23
23
|
<form action="<%= u "/delayed/cancel_now" %>" method="post">
|
24
24
|
<input type="hidden" name="timestamp" value="<%= job['timestamp'].to_i %>">
|
25
25
|
<input type="hidden" name="klass" value="<%= job['class'] %>">
|
26
|
-
<input type="hidden" name="args" value="<%= h(
|
26
|
+
<input type="hidden" name="args" value="<%= h(ResqueAdmin.encode job['args']) %>">
|
27
27
|
<input type="submit" value="Cancel Job">
|
28
28
|
</form>
|
29
29
|
</td>
|
@@ -1,16 +1,16 @@
|
|
1
1
|
# vim:fileencoding=utf-8
|
2
|
-
require '
|
3
|
-
require '
|
2
|
+
require 'resque_admin-scheduler'
|
3
|
+
require 'resque_admin/server'
|
4
4
|
require 'tilt/erb'
|
5
5
|
require 'json'
|
6
6
|
|
7
|
-
# Extend
|
8
|
-
module
|
7
|
+
# Extend ResqueAdmin::Server to add tabs
|
8
|
+
module ResqueAdmin
|
9
9
|
module Scheduler
|
10
10
|
module Server
|
11
11
|
TIMESTAMP_FORMAT = '%Y-%m-%d %H:%M:%S %z'.freeze
|
12
12
|
|
13
|
-
unless defined?(::
|
13
|
+
unless defined?(::ResqueAdmin::Scheduler::Server::VIEW_PATH)
|
14
14
|
VIEW_PATH = File.join(File.dirname(__FILE__), 'server', 'views')
|
15
15
|
end
|
16
16
|
|
@@ -37,25 +37,25 @@ module Resque
|
|
37
37
|
|
38
38
|
module ServerMethods
|
39
39
|
def schedule
|
40
|
-
|
40
|
+
ResqueAdmin.reload_schedule! if ResqueAdmin::Scheduler.dynamic
|
41
41
|
erb scheduler_template('scheduler')
|
42
42
|
end
|
43
43
|
|
44
44
|
def schedule_requeue
|
45
45
|
@job_name = params['job_name'] || params[:job_name]
|
46
|
-
config =
|
46
|
+
config = ResqueAdmin.schedule[@job_name]
|
47
47
|
@parameters = config['parameters'] || config[:parameters]
|
48
48
|
if @parameters
|
49
49
|
erb scheduler_template('requeue-params')
|
50
50
|
else
|
51
|
-
|
51
|
+
ResqueAdmin::Scheduler.enqueue_from_config(config)
|
52
52
|
redirect u('/overview')
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
def schedule_requeue_with_params
|
57
57
|
job_name = params['job_name'] || params[:job_name]
|
58
|
-
config =
|
58
|
+
config = ResqueAdmin.schedule[job_name]
|
59
59
|
# Build args hash from post data (removing the job name)
|
60
60
|
submitted_args = params.reject do |key, _value|
|
61
61
|
key == 'job_name' || key == :job_name
|
@@ -66,16 +66,16 @@ module Resque
|
|
66
66
|
config_args = config['args'] || config[:args] || {}
|
67
67
|
config_args = config_args.merge(submitted_args)
|
68
68
|
|
69
|
-
# Insert the args hash into config and queue the
|
69
|
+
# Insert the args hash into config and queue the resque_admin job
|
70
70
|
config = config.merge('args' => config_args)
|
71
|
-
|
71
|
+
ResqueAdmin::Scheduler.enqueue_from_config(config)
|
72
72
|
redirect u('/overview')
|
73
73
|
end
|
74
74
|
|
75
75
|
def delete_schedule
|
76
|
-
if
|
76
|
+
if ResqueAdmin::Scheduler.dynamic
|
77
77
|
job_name = params['job_name'] || params[:job_name]
|
78
|
-
|
78
|
+
ResqueAdmin.remove_schedule(job_name)
|
79
79
|
end
|
80
80
|
redirect u('/schedule')
|
81
81
|
end
|
@@ -86,9 +86,9 @@ module Resque
|
|
86
86
|
|
87
87
|
def delayed_jobs_klass
|
88
88
|
begin
|
89
|
-
klass =
|
89
|
+
klass = ResqueAdmin::Scheduler::Util.constantize(params[:klass])
|
90
90
|
@args = JSON.load(URI.decode(params[:args]))
|
91
|
-
@timestamps =
|
91
|
+
@timestamps = ResqueAdmin.scheduled_at(klass, *@args)
|
92
92
|
rescue
|
93
93
|
@timestamps = []
|
94
94
|
end
|
@@ -108,11 +108,11 @@ module Resque
|
|
108
108
|
def delayed_queue_now
|
109
109
|
timestamp = params['timestamp'].to_i
|
110
110
|
formatted_time = Time.at(timestamp).strftime(
|
111
|
-
::
|
111
|
+
::ResqueAdmin::Scheduler::Server::TIMESTAMP_FORMAT
|
112
112
|
)
|
113
113
|
|
114
114
|
if timestamp > 0
|
115
|
-
unless
|
115
|
+
unless ResqueAdmin::Scheduler.enqueue_next_item(timestamp)
|
116
116
|
@error_message = "Unable to remove item at #{formatted_time}"
|
117
117
|
end
|
118
118
|
else
|
@@ -123,22 +123,22 @@ module Resque
|
|
123
123
|
end
|
124
124
|
|
125
125
|
def delayed_cancel_now
|
126
|
-
klass =
|
126
|
+
klass = ResqueAdmin::Scheduler::Util.constantize(params['klass'])
|
127
127
|
timestamp = params['timestamp']
|
128
|
-
args =
|
129
|
-
|
128
|
+
args = ResqueAdmin.decode params['args']
|
129
|
+
ResqueAdmin.remove_delayed_job_from_timestamp(timestamp, klass, *args)
|
130
130
|
redirect u('/delayed')
|
131
131
|
end
|
132
132
|
|
133
133
|
def delayed_clear
|
134
|
-
|
134
|
+
ResqueAdmin.reset_delayed_queue
|
135
135
|
redirect u('delayed')
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
139
139
|
module HelperMethods
|
140
140
|
def format_time(t)
|
141
|
-
t.strftime(::
|
141
|
+
t.strftime(::ResqueAdmin::Scheduler::Server::TIMESTAMP_FORMAT)
|
142
142
|
end
|
143
143
|
|
144
144
|
def show_job_arguments(args)
|
@@ -146,8 +146,8 @@ module Resque
|
|
146
146
|
end
|
147
147
|
|
148
148
|
def queue_from_class_name(class_name)
|
149
|
-
|
150
|
-
|
149
|
+
ResqueAdmin.queue_from_class(
|
150
|
+
ResqueAdmin::Scheduler::Util.constantize(class_name)
|
151
151
|
)
|
152
152
|
end
|
153
153
|
|
@@ -161,8 +161,8 @@ module Resque
|
|
161
161
|
j.merge!('where_at' => 'delayed')
|
162
162
|
end
|
163
163
|
|
164
|
-
|
165
|
-
queued =
|
164
|
+
ResqueAdmin.queues.each do |queue|
|
165
|
+
queued = ResqueAdmin.peek(queue, 0, ResqueAdmin.size(queue))
|
166
166
|
queued = [queued] unless queued.is_a?(Array)
|
167
167
|
results += queued.select do |j|
|
168
168
|
j['class'].downcase.include?(worker) &&
|
@@ -212,11 +212,11 @@ module Resque
|
|
212
212
|
|
213
213
|
def scheduled_in_this_env?(name)
|
214
214
|
return true if rails_env(name).nil?
|
215
|
-
rails_env(name).split(/[\s,]+/).include?(
|
215
|
+
rails_env(name).split(/[\s,]+/).include?(ResqueAdmin::Scheduler.env)
|
216
216
|
end
|
217
217
|
|
218
218
|
def rails_env(name)
|
219
|
-
|
219
|
+
ResqueAdmin.schedule[name]['rails_env'] || ResqueAdmin.schedule[name]['env']
|
220
220
|
end
|
221
221
|
|
222
222
|
def scheduler_view(filename, options = {}, locals = {})
|
@@ -228,7 +228,7 @@ module Resque
|
|
228
228
|
|
229
229
|
def working_jobs_for_worker(worker)
|
230
230
|
[].tap do |results|
|
231
|
-
working = [*
|
231
|
+
working = [*ResqueAdmin.working]
|
232
232
|
work = working.select do |w|
|
233
233
|
w.job && w.job['payload'] &&
|
234
234
|
w.job['payload']['class'].downcase.include?(worker)
|
@@ -245,10 +245,10 @@ module Resque
|
|
245
245
|
|
246
246
|
def delayed_jobs_for_worker(_worker)
|
247
247
|
[].tap do |dels|
|
248
|
-
schedule_size =
|
249
|
-
|
250
|
-
|
251
|
-
d, 0,
|
248
|
+
schedule_size = ResqueAdmin.delayed_queue_schedule_size
|
249
|
+
ResqueAdmin.delayed_queue_peek(0, schedule_size).each do |d|
|
250
|
+
ResqueAdmin.delayed_timestamp_peek(
|
251
|
+
d, 0, ResqueAdmin.delayed_timestamp_size(d)
|
252
252
|
).each do |j|
|
253
253
|
dels << j.merge!('timestamp' => d)
|
254
254
|
end
|
@@ -260,9 +260,9 @@ module Resque
|
|
260
260
|
end
|
261
261
|
end
|
262
262
|
|
263
|
-
|
264
|
-
|
263
|
+
ResqueAdmin::Server.tabs << 'Schedule'
|
264
|
+
ResqueAdmin::Server.tabs << 'Delayed'
|
265
265
|
|
266
|
-
|
267
|
-
include
|
266
|
+
ResqueAdmin::Server.class_eval do
|
267
|
+
include ResqueAdmin::Scheduler::Server
|
268
268
|
end
|
@@ -1,18 +1,18 @@
|
|
1
1
|
# vim:fileencoding=utf-8
|
2
2
|
|
3
|
-
require '
|
4
|
-
require '
|
3
|
+
require 'resque_admin/tasks'
|
4
|
+
require 'resque_admin-scheduler'
|
5
5
|
|
6
|
-
namespace :
|
6
|
+
namespace :resque_admin do
|
7
7
|
task :setup
|
8
8
|
|
9
9
|
def scheduler_cli
|
10
|
-
@scheduler_cli ||=
|
10
|
+
@scheduler_cli ||= ResqueAdmin::Scheduler::Cli.new(
|
11
11
|
%W(#{ENV['RESQUE_SCHEDULER_OPTIONS']})
|
12
12
|
)
|
13
13
|
end
|
14
14
|
|
15
|
-
desc 'Start
|
15
|
+
desc 'Start ResqueAdmin Scheduler'
|
16
16
|
task scheduler: :scheduler_setup do
|
17
17
|
scheduler_cli.setup_env
|
18
18
|
scheduler_cli.run_forever
|
@@ -20,6 +20,6 @@ namespace :resque do
|
|
20
20
|
|
21
21
|
task :scheduler_setup do
|
22
22
|
scheduler_cli.parse_options
|
23
|
-
Rake::Task['
|
23
|
+
Rake::Task['resque_admin:setup'].invoke unless scheduler_cli.pre_setup
|
24
24
|
end
|
25
25
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# vim:fileencoding=utf-8
|
2
2
|
|
3
|
-
module
|
3
|
+
module ResqueAdmin
|
4
4
|
module Scheduler
|
5
5
|
class Util
|
6
|
-
# In order to upgrade to
|
7
|
-
# methods, we just added these usefull helpers back to use in
|
6
|
+
# In order to upgrade to resque_admin(1.25) which has deprecated following
|
7
|
+
# methods, we just added these usefull helpers back to use in ResqueAdmin
|
8
8
|
# Scheduler. refer to:
|
9
|
-
# https://github.com/
|
9
|
+
# https://github.com/resque_admin/resque_admin-scheduler/pull/273
|
10
10
|
|
11
11
|
def self.constantize(camel_cased_word)
|
12
12
|
camel_cased_word = camel_cased_word.to_s
|