resque_admin-scheduler 1.0.2
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 +7 -0
- data/bin/migrate_to_timestamps_set.rb +16 -0
- data/exe/resque-scheduler +5 -0
- data/lib/resque-scheduler.rb +4 -0
- data/lib/resque/scheduler.rb +447 -0
- data/lib/resque/scheduler/cli.rb +147 -0
- data/lib/resque/scheduler/configuration.rb +73 -0
- data/lib/resque/scheduler/delaying_extensions.rb +324 -0
- data/lib/resque/scheduler/env.rb +89 -0
- data/lib/resque/scheduler/extension.rb +13 -0
- data/lib/resque/scheduler/failure_handler.rb +11 -0
- data/lib/resque/scheduler/lock.rb +4 -0
- data/lib/resque/scheduler/lock/base.rb +61 -0
- data/lib/resque/scheduler/lock/basic.rb +27 -0
- data/lib/resque/scheduler/lock/resilient.rb +78 -0
- data/lib/resque/scheduler/locking.rb +104 -0
- data/lib/resque/scheduler/logger_builder.rb +72 -0
- data/lib/resque/scheduler/plugin.rb +31 -0
- data/lib/resque/scheduler/scheduling_extensions.rb +141 -0
- data/lib/resque/scheduler/server.rb +268 -0
- data/lib/resque/scheduler/server/views/delayed.erb +63 -0
- data/lib/resque/scheduler/server/views/delayed_schedules.erb +20 -0
- data/lib/resque/scheduler/server/views/delayed_timestamp.erb +26 -0
- data/lib/resque/scheduler/server/views/requeue-params.erb +23 -0
- data/lib/resque/scheduler/server/views/scheduler.erb +58 -0
- data/lib/resque/scheduler/server/views/search.erb +72 -0
- data/lib/resque/scheduler/server/views/search_form.erb +8 -0
- data/lib/resque/scheduler/signal_handling.rb +40 -0
- data/lib/resque/scheduler/tasks.rb +25 -0
- data/lib/resque/scheduler/util.rb +39 -0
- data/lib/resque/scheduler/version.rb +7 -0
- data/tasks/resque_scheduler.rake +2 -0
- metadata +267 -0
@@ -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.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.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: <%= Resque::Scheduler.env %>
|
8
|
+
<br/> Current master: <%= Resque.redis.get(Resque::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 Resque::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
|
+
<% Resque.schedule.keys.sort.each_with_index do |name, index| %>
|
30
|
+
<% config = Resque.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 Resque::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 Resque.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(Resque.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 Resque
|
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/tasks'
|
4
|
+
require 'resque-scheduler'
|
5
|
+
|
6
|
+
namespace :resque do
|
7
|
+
task :setup
|
8
|
+
|
9
|
+
def scheduler_cli
|
10
|
+
@scheduler_cli ||= Resque::Scheduler::Cli.new(
|
11
|
+
%W(#{ENV['RESQUE_SCHEDULER_OPTIONS']})
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'Start Resque 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:setup'].invoke unless scheduler_cli.pre_setup
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# vim:fileencoding=utf-8
|
2
|
+
|
3
|
+
module Resque
|
4
|
+
module Scheduler
|
5
|
+
class Util
|
6
|
+
# In order to upgrade to resque(1.25) which has deprecated following
|
7
|
+
# methods, we just added these usefull helpers back to use in Resque
|
8
|
+
# Scheduler. refer to:
|
9
|
+
# https://github.com/resque/resque-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
ADDED
@@ -0,0 +1,267 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: resque_admin-scheduler
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ben VandenBos
|
8
|
+
- Simon Eskildsen
|
9
|
+
- Ryan Biesemeyer
|
10
|
+
- Dan Buch
|
11
|
+
autorequire:
|
12
|
+
bindir: exe
|
13
|
+
cert_chain: []
|
14
|
+
date: 2017-09-22 00:00:00.000000000 Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: bundler
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
|
+
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
|
+
- - ">="
|
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'
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: rack-test
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
type: :development
|
108
|
+
prerelease: false
|
109
|
+
version_requirements: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: rake
|
116
|
+
requirement: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
- !ruby/object:Gem::Dependency
|
129
|
+
name: simplecov
|
130
|
+
requirement: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
type: :development
|
136
|
+
prerelease: false
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: test-unit
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
type: :development
|
150
|
+
prerelease: false
|
151
|
+
version_requirements: !ruby/object:Gem::Requirement
|
152
|
+
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
|
+
- - ">="
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: '0'
|
184
|
+
- !ruby/object:Gem::Dependency
|
185
|
+
name: rubocop
|
186
|
+
requirement: !ruby/object:Gem::Requirement
|
187
|
+
requirements:
|
188
|
+
- - "~>"
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: 0.40.0
|
191
|
+
type: :development
|
192
|
+
prerelease: false
|
193
|
+
version_requirements: !ruby/object:Gem::Requirement
|
194
|
+
requirements:
|
195
|
+
- - "~>"
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: 0.40.0
|
198
|
+
description: |2
|
199
|
+
Light weight job scheduling on top of ResqueAdmin.
|
200
|
+
Adds methods enqueue_at/enqueue_in to schedule jobs in the future.
|
201
|
+
Also supports queueing jobs on a fixed, cron-like schedule.
|
202
|
+
email:
|
203
|
+
- bvandenbos@gmail.com
|
204
|
+
- sirup@sirupsen.com
|
205
|
+
- ryan@yaauie.com
|
206
|
+
- dan@meatballhat.com
|
207
|
+
executables:
|
208
|
+
- resque-scheduler
|
209
|
+
extensions: []
|
210
|
+
extra_rdoc_files: []
|
211
|
+
files:
|
212
|
+
- bin/migrate_to_timestamps_set.rb
|
213
|
+
- exe/resque-scheduler
|
214
|
+
- lib/resque-scheduler.rb
|
215
|
+
- lib/resque/scheduler.rb
|
216
|
+
- lib/resque/scheduler/cli.rb
|
217
|
+
- lib/resque/scheduler/configuration.rb
|
218
|
+
- lib/resque/scheduler/delaying_extensions.rb
|
219
|
+
- lib/resque/scheduler/env.rb
|
220
|
+
- lib/resque/scheduler/extension.rb
|
221
|
+
- lib/resque/scheduler/failure_handler.rb
|
222
|
+
- lib/resque/scheduler/lock.rb
|
223
|
+
- lib/resque/scheduler/lock/base.rb
|
224
|
+
- lib/resque/scheduler/lock/basic.rb
|
225
|
+
- lib/resque/scheduler/lock/resilient.rb
|
226
|
+
- lib/resque/scheduler/locking.rb
|
227
|
+
- lib/resque/scheduler/logger_builder.rb
|
228
|
+
- lib/resque/scheduler/plugin.rb
|
229
|
+
- lib/resque/scheduler/scheduling_extensions.rb
|
230
|
+
- lib/resque/scheduler/server.rb
|
231
|
+
- lib/resque/scheduler/server/views/delayed.erb
|
232
|
+
- lib/resque/scheduler/server/views/delayed_schedules.erb
|
233
|
+
- lib/resque/scheduler/server/views/delayed_timestamp.erb
|
234
|
+
- lib/resque/scheduler/server/views/requeue-params.erb
|
235
|
+
- lib/resque/scheduler/server/views/scheduler.erb
|
236
|
+
- lib/resque/scheduler/server/views/search.erb
|
237
|
+
- lib/resque/scheduler/server/views/search_form.erb
|
238
|
+
- lib/resque/scheduler/signal_handling.rb
|
239
|
+
- lib/resque/scheduler/tasks.rb
|
240
|
+
- lib/resque/scheduler/util.rb
|
241
|
+
- lib/resque/scheduler/version.rb
|
242
|
+
- tasks/resque_scheduler.rake
|
243
|
+
homepage: http://github.com/resque_admin/resque_admin-scheduler
|
244
|
+
licenses:
|
245
|
+
- MIT
|
246
|
+
metadata: {}
|
247
|
+
post_install_message:
|
248
|
+
rdoc_options: []
|
249
|
+
require_paths:
|
250
|
+
- lib
|
251
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
252
|
+
requirements:
|
253
|
+
- - ">="
|
254
|
+
- !ruby/object:Gem::Version
|
255
|
+
version: '0'
|
256
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
257
|
+
requirements:
|
258
|
+
- - ">="
|
259
|
+
- !ruby/object:Gem::Version
|
260
|
+
version: '0'
|
261
|
+
requirements: []
|
262
|
+
rubyforge_project:
|
263
|
+
rubygems_version: 2.6.10
|
264
|
+
signing_key:
|
265
|
+
specification_version: 4
|
266
|
+
summary: Light weight job scheduling on top of ResqueAdmin
|
267
|
+
test_files: []
|