resque-job-stats 0.1.3 → 0.2.0

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/README.rdoc CHANGED
@@ -30,7 +30,8 @@ Simply extend your class
30
30
 
31
31
  class MyJob
32
32
  extend Resque::Plugins::JobStats
33
-
33
+
34
+ @queue = :my_job
34
35
  def self.perform(*payload)
35
36
  # ..
36
37
  end
@@ -45,20 +46,40 @@ Alternatively you can include just the metric you wish to record.
45
46
  extend Resque::Plugins::JobStats::Failed
46
47
  extend Resque::Plugins::JobStats::Duration
47
48
 
49
+ @queue = :my_job
48
50
  def self.perform(*payload)
49
51
  # ...
50
52
  end
51
53
  end
52
54
 
53
- Duration module also extends the class with two singleton methods, MyJob.job_rolling_avg and MyJob.longest_job.
55
+ === Duration module
56
+
57
+ The duration module provides two metrics, the longest job and the job rolling avg.
58
+
59
+ These are accessible via two singleton methods, MyJob.job_rolling_avg and MyJob.longest_job.
60
+
61
+ By default the last 100 jobs durations are stored and used to provide the above metrics.
62
+
63
+ You may set the number of jobs to include by setting the @durations_recorded variable.
64
+
65
+
66
+ class MyJob
67
+ extend Resque::Plugins::JobStats::Duration
68
+
69
+ @queue = :my_job
70
+ @durations_recorded = 1000
71
+
72
+ def self.perform(*payload)
73
+ # ...
74
+ end
75
+ end
54
76
 
55
77
  == TODO
56
78
 
57
- * Allow classes to define how many job's duration to measure
58
79
  * Add ui for stats in resque-web
59
80
 
60
81
  == Contributing to resque-job-stats
61
-
82
+
62
83
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
63
84
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
64
85
  * Fork the project
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.2.0
@@ -10,7 +10,7 @@ module Resque
10
10
 
11
11
  # Returns the number of jobs failed
12
12
  def job_durations
13
- Resque.redis.lrange(jobs_duration_key,0,job_durations_to_track).map(&:to_f)
13
+ Resque.redis.lrange(jobs_duration_key,0,durations_recorded - 1).map(&:to_f)
14
14
  end
15
15
 
16
16
  # Returns the key used for tracking job durations
@@ -25,11 +25,11 @@ module Resque
25
25
  duration = Time.now - start
26
26
 
27
27
  Resque.redis.lpush(jobs_duration_key, duration)
28
- Resque.redis.ltrim(jobs_duration_key, 0, job_durations_to_track)
28
+ Resque.redis.ltrim(jobs_duration_key, 0, durations_recorded)
29
29
  end
30
30
 
31
- def job_durations_to_track
32
- 100
31
+ def durations_recorded
32
+ @durations_recorded || 100
33
33
  end
34
34
 
35
35
  def job_rolling_avg
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{resque-job-stats}
8
- s.version = "0.1.3"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["alanpeabody"]
12
- s.date = %q{2011-07-17}
12
+ s.date = %q{2011-09-24}
13
13
  s.description = %q{Tracks jobs performed, failed, and the duration of the last 100 jobs for each job type.}
14
14
  s.email = %q{gapeabody@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -22,6 +22,12 @@ class FailJob < BaseJob
22
22
  end
23
23
  end
24
24
 
25
+ class CustomDurJob < BaseJob
26
+ extend Resque::Plugins::JobStats::Duration
27
+ @queue = :test
28
+ @durations_recorded = 5
29
+ end
30
+
25
31
  class TestResqueJobStats < MiniTest::Unit::TestCase
26
32
 
27
33
  def setup
@@ -60,11 +66,13 @@ class TestResqueJobStats < MiniTest::Unit::TestCase
60
66
  SimpleJob.reset_job_durations
61
67
  assert_equal 0.0, SimpleJob.job_rolling_avg
62
68
  assert_equal 0.0, SimpleJob.longest_job
69
+
63
70
  3.times do |i|
64
71
  d = (i + 1)/10.0
65
72
  Resque.enqueue(SimpleJob,d)
66
73
  @worker.work(0)
67
74
  end
75
+
68
76
  assert_in_delta 0.3, SimpleJob.job_durations[0], 0.01
69
77
  assert_in_delta 0.2, SimpleJob.job_durations[1], 0.01
70
78
  assert_in_delta 0.1, SimpleJob.job_durations[2], 0.01
@@ -72,4 +80,21 @@ class TestResqueJobStats < MiniTest::Unit::TestCase
72
80
  assert_in_delta 0.2, SimpleJob.job_rolling_avg, 0.01
73
81
  end
74
82
 
83
+ def test_custom_duration
84
+ CustomDurJob.reset_job_durations
85
+
86
+ 2.times do
87
+ Resque.enqueue(CustomDurJob,1.0)
88
+ @worker.work(0)
89
+ end
90
+
91
+ 5.times do
92
+ Resque.enqueue(CustomDurJob,0.1)
93
+ @worker.work(0)
94
+ end
95
+
96
+ assert_in_delta 0.1, CustomDurJob.longest_job, 0.01
97
+ assert_in_delta 0.1, CustomDurJob.job_rolling_avg, 0.01
98
+ end
99
+
75
100
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-job-stats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-17 00:00:00.000000000 -04:00
12
+ date: 2011-09-24 00:00:00.000000000 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: resque
17
- requirement: &8140020 !ruby/object:Gem::Requirement
17
+ requirement: &13078080 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 1.17.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *8140020
25
+ version_requirements: *13078080
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: minitest
28
- requirement: &8114360 !ruby/object:Gem::Requirement
28
+ requirement: &13076680 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *8114360
36
+ version_requirements: *13076680
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bundler
39
- requirement: &8112800 !ruby/object:Gem::Requirement
39
+ requirement: &13075340 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.0.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *8112800
47
+ version_requirements: *13075340
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: jeweler
50
- requirement: &8111340 !ruby/object:Gem::Requirement
50
+ requirement: &13073780 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 1.6.4
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *8111340
58
+ version_requirements: *13073780
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: rcov
61
- requirement: &8110040 !ruby/object:Gem::Requirement
61
+ requirement: &13048440 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *8110040
69
+ version_requirements: *13048440
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: mynyml-redgreen
72
- requirement: &8108480 !ruby/object:Gem::Requirement
72
+ requirement: &13046280 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,7 +77,7 @@ dependencies:
77
77
  version: 0.7.1
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *8108480
80
+ version_requirements: *13046280
81
81
  description: Tracks jobs performed, failed, and the duration of the last 100 jobs
82
82
  for each job type.
83
83
  email: gapeabody@gmail.com
@@ -119,7 +119,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
119
  version: '0'
120
120
  segments:
121
121
  - 0
122
- hash: -2575674717997746686
122
+ hash: -2425324419253773281
123
123
  required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  none: false
125
125
  requirements: