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 +25 -4
- data/VERSION +1 -1
- data/lib/resque/plugins/job_stats/duration.rb +4 -4
- data/resque-job-stats.gemspec +2 -2
- data/test/test_job_stats.rb +25 -0
- metadata +15 -15
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
|
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
|
+
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,
|
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,
|
28
|
+
Resque.redis.ltrim(jobs_duration_key, 0, durations_recorded)
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
32
|
-
100
|
31
|
+
def durations_recorded
|
32
|
+
@durations_recorded || 100
|
33
33
|
end
|
34
34
|
|
35
35
|
def job_rolling_avg
|
data/resque-job-stats.gemspec
CHANGED
@@ -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.
|
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-
|
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 = [
|
data/test/test_job_stats.rb
CHANGED
@@ -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.
|
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-
|
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: &
|
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: *
|
25
|
+
version_requirements: *13078080
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: minitest
|
28
|
-
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: *
|
36
|
+
version_requirements: *13076680
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: bundler
|
39
|
-
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: *
|
47
|
+
version_requirements: *13075340
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: jeweler
|
50
|
-
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: *
|
58
|
+
version_requirements: *13073780
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rcov
|
61
|
-
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: *
|
69
|
+
version_requirements: *13048440
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: mynyml-redgreen
|
72
|
-
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: *
|
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: -
|
122
|
+
hash: -2425324419253773281
|
123
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
124
|
none: false
|
125
125
|
requirements:
|