resque-history 1.7.1 → 1.8.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.
data/Changelog.md CHANGED
@@ -1,6 +1,12 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## 1.7.0 (May 7, 2012)
5
+
6
+ Features:
7
+
8
+ - Record execution time
9
+
4
10
  ## 1.7.0 (April 17, 2012)
5
11
 
6
12
  Features:
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- resque-history (1.6.0)
4
+ resque-history (1.7.1)
5
5
  rake
6
6
  resque
7
7
  resque-history
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.7.1
1
+ 1.8.2
@@ -0,0 +1,24 @@
1
+ module Resque
2
+ module History
3
+ module Helper
4
+
5
+ def format_execution(seconds)
6
+ if seconds.nil?
7
+ ""
8
+ elsif seconds < 60
9
+ "#{seconds} secs"
10
+ elsif seconds < 60 * 60
11
+ "#{(seconds/60).to_i} minutes"
12
+ elsif seconds < 60 * 60 * 24
13
+ "#{(((seconds.to_f/60/60)*100).truncate.to_f)/100} hours"
14
+ elsif seconds < 60 * 60 * 24 * 7
15
+ "#{(((seconds.to_f/60/60/24)*100).truncate.to_f)/100} days"
16
+ else
17
+ "too long"
18
+ end
19
+ end
20
+
21
+ end
22
+ end
23
+
24
+ end
@@ -9,10 +9,16 @@ module Resque
9
9
  @max_history ||= MAX_HISTORY_SIZE
10
10
  end
11
11
 
12
+ def before_perform_hsitory(*args)
13
+ @start_time = Time.now
14
+ end
15
+
12
16
  def after_perform_history(*args)
17
+ elapsed_seconds = (Time.now - @start_time).to_i
13
18
  Resque.redis.lpush(HISTORY_SET_NAME, {"class"=>"#{self}",
14
19
  "args"=>args,
15
- "time"=>Time.now.strftime("%Y-%m-%d %H:%M")
20
+ "time"=>Time.now.strftime("%Y-%m-%d %H:%M"),
21
+ "execution"=>elapsed_seconds
16
22
  }.to_json)
17
23
 
18
24
  if Resque.redis.llen(HISTORY_SET_NAME) > maximum_history_size
@@ -19,6 +19,7 @@
19
19
  <th>Job</th>
20
20
  <th>Arguments</th>
21
21
  <th>Time</th>
22
+ <th>Execution</th>
22
23
  </tr>
23
24
  <% history.each do |history| %>
24
25
  <% j = JSON.parse(history) %>
@@ -26,6 +27,7 @@
26
27
  <td class='queue'><%= j["class"] %></td>
27
28
  <td class='args'><%= j["args"] %></td>
28
29
  <td class='args'><%= j["time"] %></td>
30
+ <td class='args'><%= format_execution(j["execution"]) %></td>
29
31
  </tr>
30
32
  <% end %>
31
33
  </table>
@@ -1,11 +1,13 @@
1
1
  require 'resque'
2
2
  require 'resque/server'
3
+ require 'resque-history'
3
4
 
4
5
  # Extends Resque Web Based UI.
5
6
  # Structure has been borrowed from ResqueScheduler.
6
7
  module ResqueHistory
7
8
  module Server
8
9
  include Resque::Helpers
10
+ include Resque::History::Helper
9
11
 
10
12
  def self.erb_path(filename)
11
13
  File.join(File.dirname(__FILE__), 'server', 'views', filename)
@@ -1,2 +1,3 @@
1
1
  require 'resque'
2
2
  require File.expand_path(File.join('resque-history', 'plugins', 'history'), File.dirname(__FILE__))
3
+ require File.expand_path(File.join('resque-history', 'helpers', 'helper'), File.dirname(__FILE__))
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "resque-history"
8
- s.version = "1.7.1"
8
+ s.version = "1.8.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Katzmopolitan"]
12
- s.date = "2012-05-01"
12
+ s.date = "2012-05-07"
13
13
  s.description = "Show history of recently executed jobs"
14
14
  s.email = "ilyakatz@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
32
32
  "Rakefile",
33
33
  "VERSION",
34
34
  "lib/resque-history.rb",
35
+ "lib/resque-history/helpers/helper.rb",
35
36
  "lib/resque-history/plugins/history.rb",
36
37
  "lib/resque-history/server.rb",
37
38
  "lib/resque-history/server/views/history.erb",
@@ -40,6 +41,7 @@ Gem::Specification.new do |s|
40
41
  "resque-history.gemspec",
41
42
  "spec/redis-test.conf",
42
43
  "spec/resque-history/plugins/history_spec.rb",
44
+ "spec/resque-history/resque_history_helper_spec.rb",
43
45
  "spec/resque-web_spec.rb",
44
46
  "spec/spec_helper.rb",
45
47
  "test/helper.rb",
@@ -18,7 +18,6 @@ class MaxHistoryJob
18
18
  end
19
19
  end
20
20
 
21
-
22
21
  describe Resque::Plugins::History do
23
22
  it "should be compliance with Resqu::Plugin document" do
24
23
  expect { Resque::Plugin.lint(Resque::Plugins::History) }.to_not raise_error
@@ -34,7 +33,7 @@ describe Resque::Plugins::History do
34
33
  arr = Resque.redis.lrange(Resque::Plugins::History::HISTORY_SET_NAME, 0, -1)
35
34
 
36
35
  arr.count.should == 1
37
- JSON.parse(arr.first).should == {"class"=>"HistoryJob", "args"=>[12], "time"=>"2000-09-01 12:00"}
36
+ JSON.parse(arr.first).should == {"class"=>"HistoryJob", "args"=>[12], "time"=>"2000-09-01 12:00", "execution"=>0}
38
37
  end
39
38
  end
40
39
 
@@ -70,9 +69,9 @@ describe Resque::Plugins::History do
70
69
 
71
70
  arr.count.should == 3
72
71
  arr.should == [
73
- {"class"=>"HistoryJob", "args"=>[11], "time"=>"2000-09-01 12:00"},
74
- {"class"=>"HistoryJob", "args"=>[12], "time"=>"2000-09-01 12:00"},
75
- {"class"=>"HistoryJob", "args"=>[13], "time"=>"2000-09-01 12:00"}
72
+ {"class"=>"HistoryJob", "args"=>[11], "time"=>"2000-09-01 12:00", "execution"=>0},
73
+ {"class"=>"HistoryJob", "args"=>[12], "time"=>"2000-09-01 12:00", "execution"=>0},
74
+ {"class"=>"HistoryJob", "args"=>[13], "time"=>"2000-09-01 12:00", "execution"=>0}
76
75
  ].collect(&:to_json)
77
76
  end
78
77
 
@@ -101,4 +100,95 @@ describe Resque::Plugins::History do
101
100
 
102
101
  end
103
102
 
103
+
104
+ describe "record execution time" do
105
+
106
+ it "should record execution time" do
107
+
108
+ Resque.enqueue(SlowHistoryJob, 10)
109
+
110
+ Timecop.freeze(Time.local(2000, 9, 1, 12, 0, 0)) do
111
+ job = Resque.reserve('test')
112
+ job.perform
113
+ end
114
+
115
+ arr = Resque.redis.lrange(Resque::Plugins::History::HISTORY_SET_NAME, 0, -1)
116
+
117
+ arr.count.should == 1
118
+ arr.should == [
119
+ {"class"=>"SlowHistoryJob", "args"=>[10], "time"=>"2000-09-01 12:10", "execution"=>600}
120
+ ].collect(&:to_json)
121
+
122
+ end
123
+
124
+ it "should not confuse different job times" do
125
+
126
+ Resque.enqueue(SlowHistoryJob, 10)
127
+ Resque.enqueue(SlowHistoryJob, 5)
128
+
129
+ Timecop.freeze(Time.local(2000, 9, 1, 12, 0, 0)) do
130
+ job = Resque.reserve('test')
131
+ job.perform
132
+
133
+ job = Resque.reserve('test')
134
+ job.perform
135
+
136
+ end
137
+
138
+ arr = Resque.redis.lrange(Resque::Plugins::History::HISTORY_SET_NAME, 0, -1)
139
+
140
+ arr.count.should == 2
141
+ arr.should == [
142
+ {"class"=>"SlowHistoryJob", "args"=>[5], "time"=>"2000-09-01 12:15", "execution"=>300},
143
+ {"class"=>"SlowHistoryJob", "args"=>[10], "time"=>"2000-09-01 12:10", "execution"=>600}
144
+ ].collect(&:to_json)
145
+
146
+ end
147
+
148
+ it "should record times in the order of completion not in order of starting" do
149
+
150
+ #start the longer job first but it should finish last
151
+ Resque.enqueue(SleepyHistoryJob, 3)
152
+ Resque.enqueue(SleepyHistoryJob, 1)
153
+
154
+ job = Resque.reserve('test')
155
+ job.perform
156
+
157
+ job = Resque.reserve('test')
158
+ job.perform
159
+
160
+ arr = Resque.redis.lrange(Resque::Plugins::History::HISTORY_SET_NAME, 0, -1)
161
+
162
+
163
+ JSON.parse(arr.first)["class"].should =="SleepyHistoryJob"
164
+ JSON.parse(arr.first)["args"].should ==[1]
165
+ JSON.parse(arr.first)["execution"].should ==1
166
+
167
+
168
+ JSON.parse(arr.last)["class"].should =="SleepyHistoryJob"
169
+ JSON.parse(arr.last)["args"].should ==[3]
170
+ JSON.parse(arr.last)["execution"].should ==3
171
+
172
+ end
173
+
174
+ end
175
+
176
+ end
177
+
178
+ class SlowHistoryJob
179
+ extend Resque::Plugins::History
180
+ @queue = :test
181
+
182
+ def self.perform(time_in_minutes)
183
+ Timecop.travel(Time.now + 60*time_in_minutes)
184
+ end
185
+ end
186
+
187
+ class SleepyHistoryJob
188
+ extend Resque::Plugins::History
189
+ @queue = :test
190
+
191
+ def self.perform(time_in_seconds)
192
+ sleep(time_in_seconds)
193
+ end
104
194
  end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+ require 'resque-history/helpers/helper'
3
+
4
+ describe Resque::History::Helper do
5
+
6
+ include Resque::History::Helper
7
+
8
+ it "should show correct number of seconds" do
9
+ format_execution(40).should == "40 secs"
10
+ end
11
+
12
+ it "should show correct number of minutes" do
13
+ format_execution(600).should == "10 minutes"
14
+ format_execution(659).should == "10 minutes"
15
+ format_execution(660).should == "11 minutes"
16
+ end
17
+
18
+ it "should show correct number of hours" do
19
+ format_execution(3600).should == "1.0 hours"
20
+ format_execution(7200).should == "2.0 hours"
21
+ format_execution(5400).should == "1.5 hours"
22
+ format_execution(5403).should == "1.5 hours"
23
+ format_execution(5703).should == "1.58 hours"
24
+ end
25
+
26
+ it "should show correct number of days" do
27
+ format_execution(86400).should == "1.0 days"
28
+ format_execution(129600).should == "1.5 days"
29
+ format_execution(518400).should == "6.0 days"
30
+ end
31
+
32
+ it "should show that job is too long" do
33
+ format_execution(604800).should == "too long"
34
+ end
35
+
36
+ end
@@ -15,6 +15,9 @@ describe ResqueHistory::Server do
15
15
 
16
16
  before do
17
17
  queues
18
+ Resque.enqueue(HistoryJob, 12)
19
+ job = Resque.reserve('test')
20
+ job.perform
18
21
  end
19
22
 
20
23
  it "should respond to /history" do
@@ -28,3 +31,11 @@ describe ResqueHistory::Server do
28
31
  end
29
32
 
30
33
  end
34
+
35
+ class HistoryJob
36
+ extend Resque::Plugins::History
37
+ @queue = :test
38
+
39
+ def self.perform(*args)
40
+ end
41
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-history
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.1
4
+ version: 1.8.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-01 00:00:00.000000000 Z
12
+ date: 2012-05-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: resque-history
@@ -146,6 +146,7 @@ files:
146
146
  - Rakefile
147
147
  - VERSION
148
148
  - lib/resque-history.rb
149
+ - lib/resque-history/helpers/helper.rb
149
150
  - lib/resque-history/plugins/history.rb
150
151
  - lib/resque-history/server.rb
151
152
  - lib/resque-history/server/views/history.erb
@@ -154,6 +155,7 @@ files:
154
155
  - resque-history.gemspec
155
156
  - spec/redis-test.conf
156
157
  - spec/resque-history/plugins/history_spec.rb
158
+ - spec/resque-history/resque_history_helper_spec.rb
157
159
  - spec/resque-web_spec.rb
158
160
  - spec/spec_helper.rb
159
161
  - test/helper.rb