resque-job-stats 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: