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"
@@ -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
- end
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
 
@@ -0,0 +1,10 @@
1
+ <h1>Resque Processes</h1>
2
+
3
+ <p class='intro'>
4
+ The list below contains all processes matching 'resque' but does not include 'grep'.
5
+ </p>
6
+
7
+
8
+ <p>
9
+ <%= %x(ps aux | grep resque).split("\n").delete_if{|s| s.include?('grep') }.join("<br />") %>
10
+ </p>
@@ -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
- <% Resque.schedule.each do |name, config| %>
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 %>
@@ -1,3 +1,3 @@
1
1
  module ResqueScheduler
2
- Version = '1.0.6'
2
+ Version = '1.0.7'
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 6
9
- version: 1.0.6
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-29 00:00:00 +01:00
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: rufus-scheduler
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: jeweler
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: :development
56
+ type: :runtime
57
57
  version_requirements: *id003
58
58
  - !ruby/object:Gem::Dependency
59
- name: mocha
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