resque_admin-scheduler 1.1.6 → 1.1.7
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/lib/resque_admin-scheduler.rb +4 -0
- data/lib/resque_admin/scheduler.rb +447 -0
- data/lib/resque_admin/scheduler/cli.rb +147 -0
- data/lib/resque_admin/scheduler/configuration.rb +73 -0
- data/lib/resque_admin/scheduler/delaying_extensions.rb +324 -0
- data/lib/resque_admin/scheduler/env.rb +89 -0
- data/lib/resque_admin/scheduler/extension.rb +13 -0
- data/lib/resque_admin/scheduler/failure_handler.rb +11 -0
- data/lib/resque_admin/scheduler/lock.rb +4 -0
- data/lib/resque_admin/scheduler/lock/base.rb +61 -0
- data/lib/resque_admin/scheduler/lock/basic.rb +27 -0
- data/lib/resque_admin/scheduler/lock/resilient.rb +78 -0
- data/lib/resque_admin/scheduler/locking.rb +104 -0
- data/lib/resque_admin/scheduler/logger_builder.rb +72 -0
- data/lib/resque_admin/scheduler/plugin.rb +31 -0
- data/lib/resque_admin/scheduler/scheduling_extensions.rb +141 -0
- data/lib/resque_admin/scheduler/server.rb +268 -0
- data/lib/resque_admin/scheduler/server/views/delayed.erb +63 -0
- data/lib/resque_admin/scheduler/server/views/delayed_schedules.erb +20 -0
- data/lib/resque_admin/scheduler/server/views/delayed_timestamp.erb +26 -0
- data/lib/resque_admin/scheduler/server/views/requeue-params.erb +23 -0
- data/lib/resque_admin/scheduler/server/views/scheduler.erb +58 -0
- data/lib/resque_admin/scheduler/server/views/search.erb +72 -0
- data/lib/resque_admin/scheduler/server/views/search_form.erb +8 -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_admin/scheduler/version.rb +7 -0
- data/tasks/resque_admin_scheduler.rake +2 -0
- metadata +84 -146
@@ -0,0 +1,20 @@
|
|
1
|
+
<h1>Delayed jobs scheduled for <%= params[:klass] %> (<%= show_job_arguments(@args) %>)</h1>
|
2
|
+
|
3
|
+
<table class='jobs'>
|
4
|
+
<tr>
|
5
|
+
<th>Timestamp</th>
|
6
|
+
</tr>
|
7
|
+
|
8
|
+
<% @timestamps.each do |t| %>
|
9
|
+
<tr>
|
10
|
+
<td>
|
11
|
+
<%= Time.at(t) %>
|
12
|
+
</td>
|
13
|
+
</tr>
|
14
|
+
<% end %>
|
15
|
+
<% if @timestamps.empty? %>
|
16
|
+
<tr>
|
17
|
+
<td class='no-data'>There are no such jobs scheduled.</td>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
</table>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<% timestamp = params[:timestamp].to_i %>
|
2
|
+
|
3
|
+
<h1>Delayed jobs scheduled for <%= format_time(Time.at(timestamp)) %></h1>
|
4
|
+
|
5
|
+
<p class='sub'>Showing <%= start = params[:start].to_i %> to <%= start + 20 %> of <b><%=size = resque_admin.delayed_timestamp_size(timestamp)%></b> jobs</p>
|
6
|
+
|
7
|
+
<table class='jobs'>
|
8
|
+
<tr>
|
9
|
+
<th>Class</th>
|
10
|
+
<th>Args</th>
|
11
|
+
</tr>
|
12
|
+
<% jobs = resque_admin.delayed_timestamp_peek(timestamp, start, 20) %>
|
13
|
+
<% jobs.each do |job| %>
|
14
|
+
<tr>
|
15
|
+
<td class='class'><%= job['class'] %></td>
|
16
|
+
<td class='args'><%=h show_job_arguments(job['args']) %></td>
|
17
|
+
</tr>
|
18
|
+
<% end %>
|
19
|
+
<% if jobs.empty? %>
|
20
|
+
<tr>
|
21
|
+
<td class='no-data' colspan='2'>There are no pending jobs scheduled for this time.</td>
|
22
|
+
</tr>
|
23
|
+
<% end %>
|
24
|
+
</table>
|
25
|
+
|
26
|
+
<%= partial :next_more, :start => start, :size => size %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<h1><%= @job_name %></h1>
|
2
|
+
|
3
|
+
<p class='intro'>
|
4
|
+
This job requires parameters:
|
5
|
+
</p>
|
6
|
+
|
7
|
+
<form style="float:left" action="<%= u "/schedule/requeue_with_params" %>" method="post">
|
8
|
+
<table>
|
9
|
+
<% @parameters.each do |key, value| %>
|
10
|
+
<% value ||= {} %>
|
11
|
+
<tr>
|
12
|
+
<td>
|
13
|
+
<%= key %>
|
14
|
+
<% if value['description'] || value[:description] %>
|
15
|
+
<span style="border-bottom:1px dotted;" title="<%=value ['description'] || value[:description] %>">(?)</span>
|
16
|
+
<% end %>:
|
17
|
+
</td>
|
18
|
+
<td><input type="text" name="<%= key %>" value="<%= value['default'] || value[:default] %>"></td>
|
19
|
+
<% end %>
|
20
|
+
</table>
|
21
|
+
<input type="hidden" name="job_name" value="<%= @job_name %>">
|
22
|
+
<input type="submit" value="Queue now">
|
23
|
+
</form>
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<h1>Schedule</h1>
|
2
|
+
|
3
|
+
<p class='intro'>
|
4
|
+
The list below contains all scheduled jobs. Click "Queue now" to queue
|
5
|
+
a job immediately.
|
6
|
+
<br/> Server local time: <%= Time.now %>
|
7
|
+
<br/> Server Environment: <%= ResqueAdmin::Scheduler.env %>
|
8
|
+
<br/> Current master: <%= ResqueAdmin.redis.get(ResqueAdmin::Scheduler.master_lock.key) %>
|
9
|
+
</p>
|
10
|
+
<p class='intro'>
|
11
|
+
The highlighted jobs are skipped for current environment.
|
12
|
+
</p>
|
13
|
+
<div style="overflow-y: auto; width:100%; padding: 0px 5px;">
|
14
|
+
<table>
|
15
|
+
<tr>
|
16
|
+
<th>Index</th>
|
17
|
+
<% if ResqueAdmin::Scheduler.dynamic %>
|
18
|
+
<th></th>
|
19
|
+
<% end %>
|
20
|
+
<th></th>
|
21
|
+
<th>Name</th>
|
22
|
+
<th>Description</th>
|
23
|
+
<th>Interval</th>
|
24
|
+
<th>Class</th>
|
25
|
+
<th>Queue</th>
|
26
|
+
<th>Arguments</th>
|
27
|
+
<th>Last Enqueued</th>
|
28
|
+
</tr>
|
29
|
+
<% ResqueAdmin.schedule.keys.sort.each_with_index do |name, index| %>
|
30
|
+
<% config = ResqueAdmin.schedule[name] %>
|
31
|
+
<tr style="<%= scheduled_in_this_env?(name) ? '' : 'color: #9F6000;background: #FEEFB3;' %>">
|
32
|
+
<td style="padding-left: 15px;"><%= index+ 1 %>.</td>
|
33
|
+
<% if ResqueAdmin::Scheduler.dynamic %>
|
34
|
+
<td style="padding-top: 12px; padding-bottom: 2px; width: 10px">
|
35
|
+
<form action="<%= u "/schedule" %>" method="post" style="margin-left: 0">
|
36
|
+
<input type="hidden" name="job_name" value="<%= h name %>">
|
37
|
+
<input type="hidden" name="_method" value="delete">
|
38
|
+
<input type="submit" value="Delete">
|
39
|
+
</form>
|
40
|
+
</td>
|
41
|
+
<% end %>
|
42
|
+
<td style="padding-top: 12px; padding-bottom: 2px; width: 10px">
|
43
|
+
<form action="<%= u "/schedule/requeue" %>" method="post" style="margin-left: 0">
|
44
|
+
<input type="hidden" name="job_name" value="<%= h name %>">
|
45
|
+
<input type="submit" value="Queue now">
|
46
|
+
</form>
|
47
|
+
</td>
|
48
|
+
<td><%= h name %></td>
|
49
|
+
<td><%= h config['description'] %></td>
|
50
|
+
<td style="white-space:nowrap"><%= h schedule_interval(config) %></td>
|
51
|
+
<td><%= h schedule_class(config) %></td>
|
52
|
+
<td><%= h config['queue'] || queue_from_class_name(config['class']) %></td>
|
53
|
+
<td><%= h show_job_arguments(config['args']) %></td>
|
54
|
+
<td><%= h ResqueAdmin.get_last_enqueued_at(name) || 'Never' %></td>
|
55
|
+
</tr>
|
56
|
+
<% end %>
|
57
|
+
</table>
|
58
|
+
</div>
|
@@ -0,0 +1,72 @@
|
|
1
|
+
<h1>Search Results</h1>
|
2
|
+
<%= scheduler_view :search_form, layout: false %>
|
3
|
+
<hr>
|
4
|
+
<% delayed = @jobs.select { |j| j['where_at'] == 'delayed' } %>
|
5
|
+
<h1>Delayed jobs</h1>
|
6
|
+
<table class='jobs'>
|
7
|
+
<tr>
|
8
|
+
<th></th>
|
9
|
+
<th></th>
|
10
|
+
<th>Timestamp</th>
|
11
|
+
<th>Class</th>
|
12
|
+
<th>Args</th>
|
13
|
+
</tr>
|
14
|
+
<% delayed.each do |job| %>
|
15
|
+
<tr>
|
16
|
+
<td>
|
17
|
+
<form action="<%= u "/delayed/queue_now" %>" method="post">
|
18
|
+
<input type="hidden" name="timestamp" value="<%= job['timestamp'].to_i %>">
|
19
|
+
<input type="submit" value="Queue now">
|
20
|
+
</form>
|
21
|
+
</td>
|
22
|
+
<td>
|
23
|
+
<form action="<%= u "/delayed/cancel_now" %>" method="post">
|
24
|
+
<input type="hidden" name="timestamp" value="<%= job['timestamp'].to_i %>">
|
25
|
+
<input type="hidden" name="klass" value="<%= job['class'] %>">
|
26
|
+
<input type="hidden" name="args" value="<%= h(ResqueAdmin.encode job['args']) %>">
|
27
|
+
<input type="submit" value="Cancel Job">
|
28
|
+
</form>
|
29
|
+
</td>
|
30
|
+
<td class='args'><%= format_time(Time.at(job['timestamp'])) %></td>
|
31
|
+
<td class='class'><%= job['class'] %></td>
|
32
|
+
<td class='args'><%= h job['args'].inspect %></td>
|
33
|
+
</tr>
|
34
|
+
<% end %>
|
35
|
+
</table>
|
36
|
+
</h1>
|
37
|
+
|
38
|
+
<% queued = @jobs.select { |j| j['where_at'] == 'queued' } %>
|
39
|
+
<h1>Queued jobs</h1>
|
40
|
+
<table class='jobs'>
|
41
|
+
<tr>
|
42
|
+
<th>Queue</th>
|
43
|
+
<th>Class</th>
|
44
|
+
<th>Args</th>
|
45
|
+
</tr>
|
46
|
+
<% queued.each do |job| %>
|
47
|
+
<tr>
|
48
|
+
<td class='class'><%= job['queue'] %></td>
|
49
|
+
<td class='class'><%= job['class'] %></td>
|
50
|
+
<td class='args'><%= h job['args'].inspect %></td>
|
51
|
+
</tr>
|
52
|
+
<% end %>
|
53
|
+
</table>
|
54
|
+
|
55
|
+
<% working = @jobs.select { |j| j['where_at'] == 'working' } %>
|
56
|
+
<h1>Working jobs</h1>
|
57
|
+
<table class='jobs'>
|
58
|
+
<tr>
|
59
|
+
<th>Queue</th>
|
60
|
+
<th>Class</th>
|
61
|
+
<th>Args</th>
|
62
|
+
</tr>
|
63
|
+
<% working.each do |job| %>
|
64
|
+
<tr>
|
65
|
+
<td class='class'><%= job['queue'] %></td>
|
66
|
+
<td class='class'><%= job['class'] %></td>
|
67
|
+
<td class='args'><%= h job['args'].inspect %></td>
|
68
|
+
</tr>
|
69
|
+
<% end %>
|
70
|
+
</table>
|
71
|
+
|
72
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# vim:fileencoding=utf-8
|
2
|
+
|
3
|
+
module ResqueAdmin
|
4
|
+
module Scheduler
|
5
|
+
module SignalHandling
|
6
|
+
attr_writer :signal_queue
|
7
|
+
|
8
|
+
def signal_queue
|
9
|
+
@signal_queue ||= []
|
10
|
+
end
|
11
|
+
|
12
|
+
# For all signals, set the shutdown flag and wait for current
|
13
|
+
# poll/enqueing to finish (should be almost instant). In the
|
14
|
+
# case of sleeping, exit immediately.
|
15
|
+
def register_signal_handlers
|
16
|
+
(Signal.list.keys & %w(INT TERM USR1 USR2 QUIT)).each do |sig|
|
17
|
+
trap(sig) do
|
18
|
+
signal_queue << sig
|
19
|
+
# break sleep in the primary scheduler thread, alowing
|
20
|
+
# the signal queue to get processed as soon as possible.
|
21
|
+
@th.wakeup if @th && @th.alive?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def handle_signals
|
27
|
+
loop do
|
28
|
+
sig = signal_queue.shift
|
29
|
+
break unless sig
|
30
|
+
log! "Got #{sig} signal"
|
31
|
+
case sig
|
32
|
+
when 'INT', 'TERM', 'QUIT' then shutdown
|
33
|
+
when 'USR1' then print_schedule
|
34
|
+
when 'USR2' then reload_schedule!
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# vim:fileencoding=utf-8
|
2
|
+
|
3
|
+
require 'resque_admin/tasks'
|
4
|
+
require 'resque_admin-scheduler'
|
5
|
+
|
6
|
+
namespace :resque_admin do
|
7
|
+
task :setup
|
8
|
+
|
9
|
+
def scheduler_cli
|
10
|
+
@scheduler_cli ||= ResqueAdmin::Scheduler::Cli.new(
|
11
|
+
%W(#{ENV['RESQUE_SCHEDULER_OPTIONS']})
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'Start ResqueAdmin Scheduler'
|
16
|
+
task scheduler: :scheduler_setup do
|
17
|
+
scheduler_cli.setup_env
|
18
|
+
scheduler_cli.run_forever
|
19
|
+
end
|
20
|
+
|
21
|
+
task :scheduler_setup do
|
22
|
+
scheduler_cli.parse_options
|
23
|
+
Rake::Task['resque_admin:setup'].invoke unless scheduler_cli.pre_setup
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# vim:fileencoding=utf-8
|
2
|
+
|
3
|
+
module ResqueAdmin
|
4
|
+
module Scheduler
|
5
|
+
class Util
|
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
|
+
# Scheduler. refer to:
|
9
|
+
# https://github.com/resque_admin/resque_admin-scheduler/pull/273
|
10
|
+
|
11
|
+
def self.constantize(camel_cased_word)
|
12
|
+
camel_cased_word = camel_cased_word.to_s
|
13
|
+
|
14
|
+
if camel_cased_word.include?('-')
|
15
|
+
camel_cased_word = classify(camel_cased_word)
|
16
|
+
end
|
17
|
+
|
18
|
+
names = camel_cased_word.split('::')
|
19
|
+
names.shift if names.empty? || names.first.empty?
|
20
|
+
|
21
|
+
constant = Object
|
22
|
+
names.each do |name|
|
23
|
+
args = Module.method(:const_get).arity != 1 ? [false] : []
|
24
|
+
|
25
|
+
constant = if constant.const_defined?(name, *args)
|
26
|
+
constant.const_get(name)
|
27
|
+
else
|
28
|
+
constant.const_missing(name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
constant
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.classify(dashed_word)
|
35
|
+
dashed_word.split('-').map(&:capitalize).join
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
metadata
CHANGED
@@ -1,202 +1,140 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque_admin-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
-
|
9
|
-
-
|
10
|
-
- Dan Buch
|
7
|
+
- Chris Wanstrath
|
8
|
+
- Steve Klabnik
|
9
|
+
- Terence Lee
|
11
10
|
autorequire:
|
12
|
-
bindir:
|
11
|
+
bindir: bin
|
13
12
|
cert_chain: []
|
14
13
|
date: 2017-10-17 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
16
|
+
name: redis-namespace
|
18
17
|
requirement: !ruby/object:Gem::Requirement
|
19
18
|
requirements:
|
20
|
-
- - "
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: '0'
|
23
|
-
type: :development
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: json
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
requirements:
|
34
|
-
- - ">="
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: '0'
|
37
|
-
type: :development
|
38
|
-
prerelease: false
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
40
|
-
requirements:
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '0'
|
44
|
-
- !ruby/object:Gem::Dependency
|
45
|
-
name: kramdown
|
46
|
-
requirement: !ruby/object:Gem::Requirement
|
47
|
-
requirements:
|
48
|
-
- - ">="
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: '0'
|
51
|
-
type: :development
|
52
|
-
prerelease: false
|
53
|
-
version_requirements: !ruby/object:Gem::Requirement
|
54
|
-
requirements:
|
55
|
-
- - ">="
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '0'
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: minitest
|
60
|
-
requirement: !ruby/object:Gem::Requirement
|
61
|
-
requirements:
|
62
|
-
- - ">="
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: '0'
|
65
|
-
type: :development
|
66
|
-
prerelease: false
|
67
|
-
version_requirements: !ruby/object:Gem::Requirement
|
68
|
-
requirements:
|
69
|
-
- - ">="
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version: '0'
|
72
|
-
- !ruby/object:Gem::Dependency
|
73
|
-
name: mocha
|
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: pry
|
88
|
-
requirement: !ruby/object:Gem::Requirement
|
89
|
-
requirements:
|
90
|
-
- - ">="
|
19
|
+
- - "~>"
|
91
20
|
- !ruby/object:Gem::Version
|
92
|
-
version: '
|
93
|
-
type: :
|
21
|
+
version: '1.3'
|
22
|
+
type: :runtime
|
94
23
|
prerelease: false
|
95
24
|
version_requirements: !ruby/object:Gem::Requirement
|
96
25
|
requirements:
|
97
|
-
- - "
|
26
|
+
- - "~>"
|
98
27
|
- !ruby/object:Gem::Version
|
99
|
-
version: '
|
28
|
+
version: '1.3'
|
100
29
|
- !ruby/object:Gem::Dependency
|
101
|
-
name:
|
30
|
+
name: vegas
|
102
31
|
requirement: !ruby/object:Gem::Requirement
|
103
32
|
requirements:
|
104
|
-
- - "
|
33
|
+
- - "~>"
|
105
34
|
- !ruby/object:Gem::Version
|
106
|
-
version:
|
107
|
-
type: :
|
35
|
+
version: 0.1.2
|
36
|
+
type: :runtime
|
108
37
|
prerelease: false
|
109
38
|
version_requirements: !ruby/object:Gem::Requirement
|
110
39
|
requirements:
|
111
|
-
- - "
|
40
|
+
- - "~>"
|
112
41
|
- !ruby/object:Gem::Version
|
113
|
-
version:
|
42
|
+
version: 0.1.2
|
114
43
|
- !ruby/object:Gem::Dependency
|
115
|
-
name:
|
44
|
+
name: sinatra
|
116
45
|
requirement: !ruby/object:Gem::Requirement
|
117
46
|
requirements:
|
118
47
|
- - ">="
|
119
48
|
- !ruby/object:Gem::Version
|
120
|
-
version:
|
121
|
-
type: :
|
49
|
+
version: 0.9.2
|
50
|
+
type: :runtime
|
122
51
|
prerelease: false
|
123
52
|
version_requirements: !ruby/object:Gem::Requirement
|
124
53
|
requirements:
|
125
54
|
- - ">="
|
126
55
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
56
|
+
version: 0.9.2
|
128
57
|
- !ruby/object:Gem::Dependency
|
129
|
-
name:
|
58
|
+
name: multi_json
|
130
59
|
requirement: !ruby/object:Gem::Requirement
|
131
60
|
requirements:
|
132
|
-
- - "
|
61
|
+
- - "~>"
|
133
62
|
- !ruby/object:Gem::Version
|
134
|
-
version: '0'
|
135
|
-
type: :
|
63
|
+
version: '1.0'
|
64
|
+
type: :runtime
|
136
65
|
prerelease: false
|
137
66
|
version_requirements: !ruby/object:Gem::Requirement
|
138
67
|
requirements:
|
139
|
-
- - "
|
68
|
+
- - "~>"
|
140
69
|
- !ruby/object:Gem::Version
|
141
|
-
version: '0'
|
70
|
+
version: '1.0'
|
142
71
|
- !ruby/object:Gem::Dependency
|
143
|
-
name:
|
72
|
+
name: mono_logger
|
144
73
|
requirement: !ruby/object:Gem::Requirement
|
145
74
|
requirements:
|
146
|
-
- - "
|
75
|
+
- - "~>"
|
147
76
|
- !ruby/object:Gem::Version
|
148
|
-
version: '0'
|
149
|
-
type: :
|
77
|
+
version: '1.0'
|
78
|
+
type: :runtime
|
150
79
|
prerelease: false
|
151
80
|
version_requirements: !ruby/object:Gem::Requirement
|
152
81
|
requirements:
|
153
|
-
- - "
|
154
|
-
- !ruby/object:Gem::Version
|
155
|
-
version: '0'
|
156
|
-
- !ruby/object:Gem::Dependency
|
157
|
-
name: yard
|
158
|
-
requirement: !ruby/object:Gem::Requirement
|
159
|
-
requirements:
|
160
|
-
- - ">="
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
version: '0'
|
163
|
-
type: :development
|
164
|
-
prerelease: false
|
165
|
-
version_requirements: !ruby/object:Gem::Requirement
|
166
|
-
requirements:
|
167
|
-
- - ">="
|
168
|
-
- !ruby/object:Gem::Version
|
169
|
-
version: '0'
|
170
|
-
- !ruby/object:Gem::Dependency
|
171
|
-
name: tzinfo-data
|
172
|
-
requirement: !ruby/object:Gem::Requirement
|
173
|
-
requirements:
|
174
|
-
- - ">="
|
175
|
-
- !ruby/object:Gem::Version
|
176
|
-
version: '0'
|
177
|
-
type: :development
|
178
|
-
prerelease: false
|
179
|
-
version_requirements: !ruby/object:Gem::Requirement
|
180
|
-
requirements:
|
181
|
-
- - ">="
|
82
|
+
- - "~>"
|
182
83
|
- !ruby/object:Gem::Version
|
183
|
-
version: '0'
|
84
|
+
version: '1.0'
|
184
85
|
description: |2
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
86
|
+
ResqueAdmin is a Redis-backed Ruby library for creating background jobs,
|
87
|
+
placing those jobs on multiple queues, and processing them later.
|
88
|
+
|
89
|
+
Background jobs can be any Ruby class or module that responds to
|
90
|
+
perform. Your existing classes can easily be converted to background
|
91
|
+
jobs or you can create new classes specifically to do work. Or, you
|
92
|
+
can do both.
|
93
|
+
|
94
|
+
ResqueAdmin is heavily inspired by DelayedJob (which rocks) and is
|
95
|
+
comprised of three parts:
|
96
|
+
|
97
|
+
* A Ruby library for creating, querying, and processing jobs
|
98
|
+
* A Rake task for starting a worker which processes jobs
|
99
|
+
* A Sinatra app for monitoring queues, jobs, and workers.
|
100
|
+
email: steve@steveklabnik.com
|
101
|
+
executables:
|
102
|
+
- migrate_to_timestamps_set.rb
|
194
103
|
extensions: []
|
195
104
|
extra_rdoc_files: []
|
196
|
-
files:
|
197
|
-
|
198
|
-
|
199
|
-
-
|
105
|
+
files:
|
106
|
+
- bin/migrate_to_timestamps_set.rb
|
107
|
+
- lib/resque_admin-scheduler.rb
|
108
|
+
- lib/resque_admin/scheduler.rb
|
109
|
+
- lib/resque_admin/scheduler/cli.rb
|
110
|
+
- lib/resque_admin/scheduler/configuration.rb
|
111
|
+
- lib/resque_admin/scheduler/delaying_extensions.rb
|
112
|
+
- lib/resque_admin/scheduler/env.rb
|
113
|
+
- lib/resque_admin/scheduler/extension.rb
|
114
|
+
- lib/resque_admin/scheduler/failure_handler.rb
|
115
|
+
- lib/resque_admin/scheduler/lock.rb
|
116
|
+
- lib/resque_admin/scheduler/lock/base.rb
|
117
|
+
- lib/resque_admin/scheduler/lock/basic.rb
|
118
|
+
- lib/resque_admin/scheduler/lock/resilient.rb
|
119
|
+
- lib/resque_admin/scheduler/locking.rb
|
120
|
+
- lib/resque_admin/scheduler/logger_builder.rb
|
121
|
+
- lib/resque_admin/scheduler/plugin.rb
|
122
|
+
- lib/resque_admin/scheduler/scheduling_extensions.rb
|
123
|
+
- lib/resque_admin/scheduler/server.rb
|
124
|
+
- lib/resque_admin/scheduler/server/views/delayed.erb
|
125
|
+
- lib/resque_admin/scheduler/server/views/delayed_schedules.erb
|
126
|
+
- lib/resque_admin/scheduler/server/views/delayed_timestamp.erb
|
127
|
+
- lib/resque_admin/scheduler/server/views/requeue-params.erb
|
128
|
+
- lib/resque_admin/scheduler/server/views/scheduler.erb
|
129
|
+
- lib/resque_admin/scheduler/server/views/search.erb
|
130
|
+
- lib/resque_admin/scheduler/server/views/search_form.erb
|
131
|
+
- lib/resque_admin/scheduler/signal_handling.rb
|
132
|
+
- lib/resque_admin/scheduler/tasks.rb
|
133
|
+
- lib/resque_admin/scheduler/util.rb
|
134
|
+
- lib/resque_admin/scheduler/version.rb
|
135
|
+
- tasks/resque_admin_scheduler.rake
|
136
|
+
homepage: http://resque.github.io/
|
137
|
+
licenses: []
|
200
138
|
metadata: {}
|
201
139
|
post_install_message:
|
202
140
|
rdoc_options: []
|
@@ -217,5 +155,5 @@ rubyforge_project:
|
|
217
155
|
rubygems_version: 2.6.10
|
218
156
|
signing_key:
|
219
157
|
specification_version: 4
|
220
|
-
summary:
|
158
|
+
summary: ResqueAdmin is a Redis-backed queueing system.
|
221
159
|
test_files: []
|