thehenster-resque-scheduler 1.0.6 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile
CHANGED
@@ -37,6 +37,7 @@ begin
|
|
37
37
|
gemspec.version = ResqueScheduler::Version
|
38
38
|
|
39
39
|
gemspec.add_dependency "resque", ">= 1.5.0"
|
40
|
+
gemspec.add_dependency "active_support"
|
40
41
|
gemspec.add_dependency "rufus-scheduler"
|
41
42
|
gemspec.add_development_dependency "jeweler"
|
42
43
|
gemspec.add_development_dependency "mocha"
|
data/lib/resque/scheduler.rb
CHANGED
@@ -93,7 +93,7 @@ module Resque
|
|
93
93
|
klass_name = config['class'] || config[:class]
|
94
94
|
params = args.nil? ? [] : Array(args)
|
95
95
|
queue = config['queue'] || config[:queue] || Resque.queue_from_class(constantize(klass_name))
|
96
|
-
if config[:just_once]
|
96
|
+
if (config[:just_once] || config['just_once'])
|
97
97
|
Resque::Job.destroy(queue, klass_name, *params)
|
98
98
|
end
|
99
99
|
Resque::Job.create(queue, klass_name, *params)
|
@@ -1,13 +1,12 @@
|
|
1
|
-
|
2
1
|
# Extend Resque::Server to add tabs
|
3
2
|
module ResqueScheduler
|
4
3
|
|
5
4
|
module Server
|
6
|
-
|
5
|
+
|
7
6
|
def self.included(base)
|
8
7
|
|
9
8
|
base.class_eval do
|
10
|
-
|
9
|
+
|
11
10
|
helpers do
|
12
11
|
def format_time(t)
|
13
12
|
t.strftime("%Y-%m-%d %H:%M:%S")
|
@@ -16,8 +15,40 @@ module ResqueScheduler
|
|
16
15
|
def queue_from_class_name(class_name)
|
17
16
|
Resque.queue_from_class(Resque.constantize(class_name))
|
18
17
|
end
|
19
|
-
|
18
|
+
|
19
|
+
def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
|
20
|
+
from_time = from_time.to_time if from_time.respond_to?(:to_time)
|
21
|
+
to_time = to_time.to_time if to_time.respond_to?(:to_time)
|
22
|
+
distance_in_minutes = (((to_time - from_time).abs)/60).round
|
23
|
+
distance_in_seconds = ((to_time - from_time).abs).round
|
24
|
+
|
25
|
+
case distance_in_minutes
|
26
|
+
when 0..1
|
27
|
+
return (distance_in_minutes == 0) ? 'less than a minute' : '1 minute' unless include_seconds
|
28
|
+
case distance_in_seconds
|
29
|
+
when 0..4 then 'less than 5 seconds'
|
30
|
+
when 5..9 then 'less than 10 seconds'
|
31
|
+
when 10..19 then 'less than 20 seconds'
|
32
|
+
when 20..39 then 'half a minute'
|
33
|
+
when 40..59 then 'less than a minute'
|
34
|
+
else '1 minute'
|
35
|
+
end
|
20
36
|
|
37
|
+
when 2..44 then "#{distance_in_minutes} minutes"
|
38
|
+
when 45..89 then 'about 1 hour'
|
39
|
+
when 90..1439 then "about #{(distance_in_minutes.to_f / 60.0).round} hours"
|
40
|
+
when 1440..2879 then '1 day'
|
41
|
+
when 2880..43199 then "#{(distance_in_minutes / 1440).round} days"
|
42
|
+
when 43200..86399 then 'about 1 month'
|
43
|
+
when 86400..525599 then "#{(distance_in_minutes / 43200).round} months"
|
44
|
+
when 525600..1051199 then 'about 1 year'
|
45
|
+
else "over #{(distance_in_minutes / 525600).round} years"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
require 'active_support'
|
51
|
+
|
21
52
|
get "/schedule" do
|
22
53
|
# Is there a better way to specify alternate template locations with sinatra?
|
23
54
|
erb File.read(File.join(File.dirname(__FILE__), 'server/views/scheduler.erb'))
|
@@ -29,6 +60,10 @@ module ResqueScheduler
|
|
29
60
|
redirect url("/overview")
|
30
61
|
end
|
31
62
|
|
63
|
+
get "/processes" do
|
64
|
+
erb File.read(File.join(File.dirname(__FILE__), 'server/views/processes.erb'))
|
65
|
+
end
|
66
|
+
|
32
67
|
get "/delayed" do
|
33
68
|
# Is there a better way to specify alternate template locations with sinatra?
|
34
69
|
erb File.read(File.join(File.dirname(__FILE__), 'server/views/delayed.erb'))
|
@@ -45,6 +80,7 @@ module ResqueScheduler
|
|
45
80
|
|
46
81
|
Resque::Server.tabs << 'Schedule'
|
47
82
|
Resque::Server.tabs << 'Delayed'
|
83
|
+
Resque::Server.tabs << 'Processes'
|
48
84
|
|
49
85
|
end
|
50
86
|
|
@@ -11,11 +11,14 @@
|
|
11
11
|
<th>Name</th>
|
12
12
|
<th>Description</th>
|
13
13
|
<th>Cron</th>
|
14
|
+
<th>Next Run</th>
|
14
15
|
<th>Class</th>
|
15
16
|
<th>Queue</th>
|
17
|
+
<th>Just Once</th>
|
16
18
|
<th>Arguments</th>
|
17
19
|
</tr>
|
18
|
-
|
20
|
+
<% ary = Resque.schedule.to_a.sort{|a,b| a['name'] <=> b['name'] } %>
|
21
|
+
<% ary.each do |name, config| %>
|
19
22
|
<tr>
|
20
23
|
<td>
|
21
24
|
<form action="<%= url "/schedule/requeue" %>" method="post">
|
@@ -26,8 +29,10 @@
|
|
26
29
|
<td><%= h name %></td>
|
27
30
|
<td><%= h config['description'] %></td>
|
28
31
|
<td style="white-space:nowrap"><%= h config['cron'] %></td>
|
32
|
+
<td><%= distance_of_time_in_words(Time.now, Rufus::CronLine.new(config['cron']).next_time, true) %><br /><span style="color:#888;font-size:85%;"><%= (Rufus::CronLine.new(config['cron']).next_time) %></span></td>
|
29
33
|
<td><%= h config['class'] %></td>
|
30
34
|
<td><%= h config['queue'] || queue_from_class_name(config['class']) %></td>
|
35
|
+
<td><%= h config['just_once'].inspect %></td>
|
31
36
|
<td><%= h config['args'].inspect %></td>
|
32
37
|
</tr>
|
33
38
|
<% end %>
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
8
|
+
- 7
|
9
|
+
version: 1.0.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ben VandenBos
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-30 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
type: :runtime
|
33
33
|
version_requirements: *id001
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
|
-
name:
|
35
|
+
name: active_support
|
36
36
|
prerelease: false
|
37
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
type: :runtime
|
45
45
|
version_requirements: *id002
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: rufus-scheduler
|
48
48
|
prerelease: false
|
49
49
|
requirement: &id003 !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
@@ -53,10 +53,10 @@ dependencies:
|
|
53
53
|
segments:
|
54
54
|
- 0
|
55
55
|
version: "0"
|
56
|
-
type: :
|
56
|
+
type: :runtime
|
57
57
|
version_requirements: *id003
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
59
|
+
name: jeweler
|
60
60
|
prerelease: false
|
61
61
|
requirement: &id004 !ruby/object:Gem::Requirement
|
62
62
|
requirements:
|
@@ -67,6 +67,18 @@ dependencies:
|
|
67
67
|
version: "0"
|
68
68
|
type: :development
|
69
69
|
version_requirements: *id004
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: mocha
|
72
|
+
prerelease: false
|
73
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
segments:
|
78
|
+
- 0
|
79
|
+
version: "0"
|
80
|
+
type: :development
|
81
|
+
version_requirements: *id005
|
70
82
|
description: |-
|
71
83
|
Light weight job scheduling on top of Resque.
|
72
84
|
Adds methods enqueue_at/enqueue_in to schedule jobs in the future.
|
@@ -90,6 +102,7 @@ files:
|
|
90
102
|
- lib/resque_scheduler/server.rb
|
91
103
|
- lib/resque_scheduler/server/views/delayed.erb
|
92
104
|
- lib/resque_scheduler/server/views/delayed_timestamp.erb
|
105
|
+
- lib/resque_scheduler/server/views/processes.erb
|
93
106
|
- lib/resque_scheduler/server/views/scheduler.erb
|
94
107
|
- lib/resque_scheduler/tasks.rb
|
95
108
|
- lib/resque_scheduler/version.rb
|