hitimes 2.0.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +1 -1
- data/HISTORY.md +20 -3
- data/Manifest.txt +2 -17
- data/README.md +38 -43
- data/hitimes.gemspec +26 -0
- data/lib/hitimes/initialize.rb +83 -44
- data/lib/hitimes/instant.rb +9 -33
- data/lib/hitimes/interval.rb +15 -15
- data/lib/hitimes/metric.rb +18 -22
- data/lib/hitimes/mutexed_stats.rb +2 -4
- data/lib/hitimes/paths.rb +16 -14
- data/lib/hitimes/stats.rb +33 -33
- data/lib/hitimes/timed_metric.rb +43 -42
- data/lib/hitimes/timed_value_metric.rb +43 -43
- data/lib/hitimes/value_metric.rb +16 -15
- data/lib/hitimes/version.rb +3 -1
- data/lib/hitimes.rb +12 -11
- metadata +20 -113
- data/Rakefile +0 -19
- data/examples/benchmarks.rb +0 -113
- data/examples/stats.rb +0 -31
- data/spec/hitimes_spec.rb +0 -24
- data/spec/interval_spec.rb +0 -136
- data/spec/metric_spec.rb +0 -28
- data/spec/mutex_stats_spec.rb +0 -29
- data/spec/paths_spec.rb +0 -11
- data/spec/spec_helper.rb +0 -11
- data/spec/stats_spec.rb +0 -98
- data/spec/timed_metric_spec.rb +0 -155
- data/spec/timed_value_metric_spec.rb +0 -171
- data/spec/value_metric_spec.rb +0 -108
- data/spec/version_spec.rb +0 -7
- data/tasks/default.rake +0 -242
- data/tasks/this.rb +0 -208
- /data/{LICENSE → LICENSE.txt} +0 -0
data/spec/spec_helper.rb
DELETED
data/spec/stats_spec.rb
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
describe Hitimes::Stats do
|
5
|
-
before( :each ) do
|
6
|
-
@stats = Hitimes::Stats.new
|
7
|
-
@full_stats = Hitimes::Stats.new
|
8
|
-
|
9
|
-
[ 1, 2, 3].each { |i| @full_stats.update( i ) }
|
10
|
-
end
|
11
|
-
|
12
|
-
it "is initialized with usable values" do
|
13
|
-
_(@stats.count).must_equal 0
|
14
|
-
_(@stats.min).must_equal Float::INFINITY
|
15
|
-
_(@stats.max).must_equal(-Float::INFINITY)
|
16
|
-
_(@stats.sum).must_equal 0.0
|
17
|
-
_(@stats.rate).must_equal 0.0
|
18
|
-
end
|
19
|
-
|
20
|
-
it "calculates the mean correctly" do
|
21
|
-
_(@full_stats.mean).must_equal 2.0
|
22
|
-
end
|
23
|
-
|
24
|
-
it "calculates the rate correctly" do
|
25
|
-
_(@full_stats.rate).must_equal 0.5
|
26
|
-
end
|
27
|
-
|
28
|
-
it "tracks the maximum value" do
|
29
|
-
_(@full_stats.max).must_equal 3.0
|
30
|
-
end
|
31
|
-
|
32
|
-
it "tracks the minimum value" do
|
33
|
-
_(@full_stats.min).must_equal 1.0
|
34
|
-
end
|
35
|
-
|
36
|
-
it "tracks the count" do
|
37
|
-
_(@full_stats.count).must_equal 3
|
38
|
-
end
|
39
|
-
|
40
|
-
it "tracks the sum" do
|
41
|
-
_(@full_stats.sum).must_equal 6.0
|
42
|
-
end
|
43
|
-
|
44
|
-
it "calculates the standard deviation" do
|
45
|
-
_(@full_stats.stddev).must_equal 1.0
|
46
|
-
end
|
47
|
-
|
48
|
-
it "calculates the sum of squares " do
|
49
|
-
_(@full_stats.sumsq).must_equal 14.0
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "#to_hash " do
|
53
|
-
it "converts to a Hash" do
|
54
|
-
h = @full_stats.to_hash
|
55
|
-
_(h.size).must_equal ::Hitimes::Stats::STATS.size
|
56
|
-
_(h.keys.sort).must_equal ::Hitimes::Stats::STATS
|
57
|
-
end
|
58
|
-
|
59
|
-
it "converts to a limited Hash if given arguments" do
|
60
|
-
h = @full_stats.to_hash( "min", "max", "mean" )
|
61
|
-
_(h.size).must_equal 3
|
62
|
-
_(h.keys.sort).must_equal %w[ max mean min ]
|
63
|
-
|
64
|
-
h = @full_stats.to_hash( %w[ count rate ] )
|
65
|
-
_(h.size).must_equal 2
|
66
|
-
_(h.keys.sort).must_equal %w[ count rate ]
|
67
|
-
end
|
68
|
-
|
69
|
-
it "raises NoMethodError if an invalid stat is used" do
|
70
|
-
_(lambda { @full_stats.to_hash( "wibble" ) }).must_raise( NoMethodError )
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe "#to_json" do
|
75
|
-
it "converts to a json string" do
|
76
|
-
j = @full_stats.to_json
|
77
|
-
h = JSON.parse( j )
|
78
|
-
_(h.size).must_equal ::Hitimes::Stats::STATS.size
|
79
|
-
_(h.keys.sort).must_equal ::Hitimes::Stats::STATS
|
80
|
-
end
|
81
|
-
|
82
|
-
it "converts to a limited Hash if given arguments" do
|
83
|
-
j = @full_stats.to_json( "min", "max", "mean" )
|
84
|
-
h = JSON.parse( j )
|
85
|
-
_(h.size).must_equal 3
|
86
|
-
_(h.keys.sort).must_equal %w[ max mean min ]
|
87
|
-
|
88
|
-
j = @full_stats.to_json( %w[ count rate ] )
|
89
|
-
h = JSON.parse( j )
|
90
|
-
_(h.size).must_equal 2
|
91
|
-
_(h.keys.sort).must_equal %w[ count rate ]
|
92
|
-
end
|
93
|
-
|
94
|
-
it "raises NoMethodError if an invalid stat is used" do
|
95
|
-
_(lambda { @full_stats.to_json( "wibble" ) }).must_raise( NoMethodError )
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
data/spec/timed_metric_spec.rb
DELETED
@@ -1,155 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Hitimes::TimedMetric do
|
4
|
-
before( :each ) do
|
5
|
-
@tm = Hitimes::TimedMetric.new( 'test-timed-metric' )
|
6
|
-
end
|
7
|
-
|
8
|
-
it "knows if it is running or not" do
|
9
|
-
_(@tm.running?).must_equal false
|
10
|
-
@tm.start
|
11
|
-
_(@tm.running?).must_equal true
|
12
|
-
@tm.stop
|
13
|
-
_(@tm.running?).must_equal false
|
14
|
-
end
|
15
|
-
|
16
|
-
it "#split returns the last duration and the timer is still running" do
|
17
|
-
@tm.start
|
18
|
-
d = @tm.split
|
19
|
-
_(@tm.running?).must_equal true
|
20
|
-
_(d).must_be :>, 0
|
21
|
-
_(@tm.count).must_equal 1
|
22
|
-
_(@tm.duration).must_equal d
|
23
|
-
end
|
24
|
-
|
25
|
-
it "#stop returns false if called more than once in a row" do
|
26
|
-
@tm.start
|
27
|
-
_(@tm.stop).must_be :>, 0
|
28
|
-
_(@tm.stop).must_equal false
|
29
|
-
end
|
30
|
-
|
31
|
-
it "does not count a currently running interval as an interval in calculations" do
|
32
|
-
@tm.start
|
33
|
-
_(@tm.count).must_equal 0
|
34
|
-
@tm.split
|
35
|
-
_(@tm.count).must_equal 1
|
36
|
-
end
|
37
|
-
|
38
|
-
it "#split called on a stopped timer does nothing" do
|
39
|
-
@tm.start
|
40
|
-
@tm.stop
|
41
|
-
_(@tm.split).must_equal false
|
42
|
-
end
|
43
|
-
|
44
|
-
it "calculates the mean of the durations" do
|
45
|
-
2.times { @tm.start ; sleep 0.05 ; @tm.stop }
|
46
|
-
_(@tm.mean).must_be_close_to(0.05, 0.002)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "calculates the rate of the counts " do
|
50
|
-
5.times { @tm.start ; sleep 0.05 ; @tm.stop }
|
51
|
-
_(@tm.rate).must_be_close_to(20.00, 0.5)
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
it "calculates the stddev of the durations" do
|
56
|
-
3.times { |x| @tm.start ; sleep(0.05 * x) ; @tm.stop }
|
57
|
-
_(@tm.stddev).must_be_close_to(0.05)
|
58
|
-
end
|
59
|
-
|
60
|
-
it "returns 0.0 for stddev if there is no data" do
|
61
|
-
_(@tm.stddev).must_equal 0.0
|
62
|
-
end
|
63
|
-
|
64
|
-
it "keeps track of the min value" do
|
65
|
-
2.times { @tm.start ; sleep 0.05 ; @tm.stop }
|
66
|
-
_(@tm.min).must_be_close_to(0.05, 0.01)
|
67
|
-
end
|
68
|
-
|
69
|
-
it "keeps track of the max value" do
|
70
|
-
2.times { @tm.start ; sleep 0.05 ; @tm.stop }
|
71
|
-
_(@tm.max).must_be_close_to(0.05, 0.01)
|
72
|
-
end
|
73
|
-
|
74
|
-
it "keeps track of the sum value" do
|
75
|
-
2.times { @tm.start ; sleep 0.05 ; @tm.stop }
|
76
|
-
_(@tm.sum).must_be_close_to(0.10, 0.01)
|
77
|
-
end
|
78
|
-
|
79
|
-
it "keeps track of the sum of squars value" do
|
80
|
-
3.times { @tm.start ; sleep 0.05 ; @tm.stop }
|
81
|
-
_(@tm.sumsq).must_be_close_to(0.0075)
|
82
|
-
end
|
83
|
-
|
84
|
-
it "keeps track of the minimum start time of all the intervals" do
|
85
|
-
f1 = Time.now.gmtime.to_f * 1_000_000
|
86
|
-
5.times { @tm.start ; sleep 0.05 ; @tm.stop }
|
87
|
-
f2 = Time.now.gmtime.to_f * 1_000_000
|
88
|
-
_(@tm.sampling_start_time).must_be :>=, f1
|
89
|
-
_(@tm.sampling_start_time).must_be :<, f2
|
90
|
-
# distance from now to start time should be greater than the distance from
|
91
|
-
# the start to the min start_time
|
92
|
-
_((f2 - @tm.sampling_start_time)).must_be :>, ( @tm.sampling_start_time - f1 )
|
93
|
-
end
|
94
|
-
|
95
|
-
it "keeps track of the last stop time of all the intervals" do
|
96
|
-
f1 = Time.now.gmtime.to_f * 1_000_000
|
97
|
-
sleep 0.01
|
98
|
-
5.times { @tm.start ; sleep 0.05 ; @tm.stop }
|
99
|
-
sleep 0.01
|
100
|
-
f2 = Time.now.gmtime.to_f * 1_000_000
|
101
|
-
_(@tm.sampling_stop_time).must_be :>, f1
|
102
|
-
_(@tm.sampling_stop_time).must_be :<=, f2
|
103
|
-
# distance from now to max stop time time should be less than the distance
|
104
|
-
# from the start to the max stop time
|
105
|
-
_((f2 - @tm.sampling_stop_time)).must_be :<, ( @tm.sampling_stop_time - f1 )
|
106
|
-
end
|
107
|
-
|
108
|
-
it "can create an already running timer" do
|
109
|
-
t = Hitimes::TimedMetric.now( 'already-running' )
|
110
|
-
_(t.running?).must_equal true
|
111
|
-
end
|
112
|
-
|
113
|
-
it "can measure a block of code from an instance" do
|
114
|
-
t = Hitimes::TimedMetric.new( 'measure a block' )
|
115
|
-
3.times { t.measure { sleep 0.05 } }
|
116
|
-
_(t.duration).must_be_close_to(0.15, 0.01)
|
117
|
-
_(t.count).must_equal 3
|
118
|
-
end
|
119
|
-
|
120
|
-
it "returns the value of the block when measuring" do
|
121
|
-
t = Hitimes::TimedMetric.new( 'measure a block' )
|
122
|
-
x = t.measure { sleep 0.05; 42 }
|
123
|
-
_(t.duration).must_be_close_to(0.05, 0.002)
|
124
|
-
_(x).must_equal 42
|
125
|
-
end
|
126
|
-
|
127
|
-
describe "#to_hash" do
|
128
|
-
|
129
|
-
it "has name value" do
|
130
|
-
h = @tm.to_hash
|
131
|
-
_(h['name']).must_equal "test-timed-metric"
|
132
|
-
end
|
133
|
-
|
134
|
-
it "has an empty hash for additional_data" do
|
135
|
-
h = @tm.to_hash
|
136
|
-
_(h['additional_data']).must_equal Hash.new
|
137
|
-
_(h['additional_data'].size).must_equal 0
|
138
|
-
end
|
139
|
-
|
140
|
-
it "has the right sum" do
|
141
|
-
10.times { |x| @tm.measure { sleep 0.01*x } }
|
142
|
-
h = @tm.to_hash
|
143
|
-
_(h['sum']).must_be_close_to(0.45, 0.01)
|
144
|
-
end
|
145
|
-
|
146
|
-
fields = ::Hitimes::Stats::STATS.dup + %w[ name additional_data sampling_start_time sampling_stop_time ]
|
147
|
-
fields.each do |f|
|
148
|
-
it "has a value for #{f}" do
|
149
|
-
@tm.measure { sleep 0.001 }
|
150
|
-
h = @tm.to_hash
|
151
|
-
_(h[f]).wont_be_nil
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
@@ -1,171 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Hitimes::TimedValueMetric do
|
4
|
-
before( :each ) do
|
5
|
-
@tm = Hitimes::TimedValueMetric.new( 'test-timed-value-metric' )
|
6
|
-
end
|
7
|
-
|
8
|
-
it "knows if it is running or not" do
|
9
|
-
_(@tm.running?).must_equal false
|
10
|
-
@tm.start
|
11
|
-
_(@tm.running?).must_equal true
|
12
|
-
@tm.stop( 1 )
|
13
|
-
_(@tm.running?).must_equal false
|
14
|
-
end
|
15
|
-
|
16
|
-
it "#split returns the last duration and the timer is still running" do
|
17
|
-
@tm.start
|
18
|
-
d = @tm.split( 1 )
|
19
|
-
_(@tm.running?).must_equal true
|
20
|
-
_(d).must_be :>, 0
|
21
|
-
_(@tm.value_stats.count).must_equal 1
|
22
|
-
_(@tm.timed_stats.count).must_equal 1
|
23
|
-
_(@tm.duration).must_equal d
|
24
|
-
end
|
25
|
-
|
26
|
-
it "#stop returns false if called more than once in a row" do
|
27
|
-
@tm.start
|
28
|
-
_(@tm.stop( 1 )).must_be :>, 0
|
29
|
-
_(@tm.stop( 1 )).must_equal false
|
30
|
-
end
|
31
|
-
|
32
|
-
it "does not count a currently running interval as an interval in calculations" do
|
33
|
-
@tm.start
|
34
|
-
_(@tm.value_stats.count).must_equal 0
|
35
|
-
_(@tm.timed_stats.count).must_equal 0
|
36
|
-
@tm.split( 1 )
|
37
|
-
_(@tm.value_stats.count).must_equal 1
|
38
|
-
_(@tm.timed_stats.count).must_equal 1
|
39
|
-
end
|
40
|
-
|
41
|
-
it "#split called on a stopped timer does nothing" do
|
42
|
-
@tm.start
|
43
|
-
@tm.stop( 1 )
|
44
|
-
_(@tm.split( 1 )).must_equal false
|
45
|
-
end
|
46
|
-
|
47
|
-
it "calculates the mean of the durations" do
|
48
|
-
3.times { |x| @tm.start ; sleep 0.05 ; @tm.stop(x) }
|
49
|
-
_(@tm.timed_stats.mean).must_be_close_to(0.05, 0.01)
|
50
|
-
_(@tm.value_stats.mean).must_equal 1.00
|
51
|
-
end
|
52
|
-
|
53
|
-
it "calculates the rate of the counts " do
|
54
|
-
5.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) }
|
55
|
-
_(@tm.rate).must_be_close_to(40.0, 1.0)
|
56
|
-
end
|
57
|
-
|
58
|
-
|
59
|
-
it "calculates the stddev of the durations" do
|
60
|
-
3.times { |x| @tm.start ; sleep(0.05 * x) ; @tm.stop(x) }
|
61
|
-
_(@tm.timed_stats.stddev).must_be_close_to(0.05, 0.001)
|
62
|
-
_(@tm.value_stats.stddev).must_equal 1.0
|
63
|
-
end
|
64
|
-
|
65
|
-
it "returns 0.0 for stddev if there is no data" do
|
66
|
-
_(@tm.timed_stats.stddev).must_equal 0.0
|
67
|
-
_(@tm.value_stats.stddev).must_equal 0.0
|
68
|
-
end
|
69
|
-
|
70
|
-
it "keeps track of the min value" do
|
71
|
-
3.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) }
|
72
|
-
_(@tm.timed_stats.min).must_be_close_to( 0.05, 0.003 )
|
73
|
-
_(@tm.value_stats.min).must_equal 0
|
74
|
-
end
|
75
|
-
|
76
|
-
it "keeps track of the max value" do
|
77
|
-
3.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) }
|
78
|
-
_(@tm.timed_stats.max).must_be_close_to( 0.05, 0.003 )
|
79
|
-
_(@tm.value_stats.max).must_equal 2
|
80
|
-
end
|
81
|
-
|
82
|
-
it "keeps track of the sum value" do
|
83
|
-
3.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) }
|
84
|
-
_(@tm.timed_stats.sum).must_be_close_to( 0.15, 0.01 )
|
85
|
-
_(@tm.value_stats.sum).must_equal 3
|
86
|
-
end
|
87
|
-
|
88
|
-
it "keeps track of the sum of squares value" do
|
89
|
-
3.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) }
|
90
|
-
_(@tm.timed_stats.sumsq).must_be_close_to(0.0075, 0.0005)
|
91
|
-
_(@tm.value_stats.sumsq).must_equal 5
|
92
|
-
end
|
93
|
-
|
94
|
-
it "keeps track of the minimum start time of all the intervals" do
|
95
|
-
f1 = Time.now.gmtime.to_f * 1000000
|
96
|
-
5.times { @tm.start ; sleep 0.05 ; @tm.stop( 1 ) }
|
97
|
-
f2 = Time.now.gmtime.to_f * 1000000
|
98
|
-
_(@tm.sampling_start_time).must_be :>=, f1
|
99
|
-
_(@tm.sampling_start_time).must_be :<, f2
|
100
|
-
# distance from now to start time should be greater than the distance from
|
101
|
-
# the start to the min start_time
|
102
|
-
_((f2 - @tm.sampling_start_time)).must_be :>, ( @tm.sampling_start_time - f1 )
|
103
|
-
end
|
104
|
-
|
105
|
-
it "keeps track of the last stop time of all the intervals" do
|
106
|
-
f1 = Time.now.gmtime.to_f * 1_000_000
|
107
|
-
5.times { @tm.start ; sleep 0.05 ; @tm.stop( 1 ) }
|
108
|
-
sleep 0.05
|
109
|
-
f2 = Time.now.gmtime.to_f * 1_000_000
|
110
|
-
_(@tm.sampling_stop_time).must_be :>, f1
|
111
|
-
_(@tm.sampling_stop_time).must_be :<=, f2
|
112
|
-
# distance from now to max stop time time should be less than the distance
|
113
|
-
# from the start to the max stop time
|
114
|
-
_((f2 - @tm.sampling_stop_time)).must_be :<, ( @tm.sampling_stop_time - f1 )
|
115
|
-
end
|
116
|
-
|
117
|
-
it "can create an already running timer" do
|
118
|
-
t = Hitimes::TimedValueMetric.now( 'already-running' )
|
119
|
-
_(t.running?).must_equal true
|
120
|
-
end
|
121
|
-
|
122
|
-
it "can measure a block of code from an instance" do
|
123
|
-
t = Hitimes::TimedValueMetric.new( 'measure a block' )
|
124
|
-
3.times { t.measure( 1 ) { sleep 0.05 } }
|
125
|
-
_(t.duration).must_be_close_to(0.15, 0.004)
|
126
|
-
_(t.timed_stats.count).must_equal 3
|
127
|
-
_(t.value_stats.count).must_equal 3
|
128
|
-
end
|
129
|
-
|
130
|
-
it "returns the value of the block when measuring" do
|
131
|
-
t = Hitimes::TimedValueMetric.new( 'measure a block' )
|
132
|
-
x = t.measure( 42 ) { sleep 0.05; 42 }
|
133
|
-
_(t.duration).must_be_close_to(0.05, 0.002)
|
134
|
-
_(x).must_equal 42
|
135
|
-
end
|
136
|
-
|
137
|
-
describe "#to_hash" do
|
138
|
-
|
139
|
-
it "has name value" do
|
140
|
-
h = @tm.to_hash
|
141
|
-
_(h['name']).must_equal "test-timed-value-metric"
|
142
|
-
end
|
143
|
-
|
144
|
-
it "has an empty has for additional_data" do
|
145
|
-
h = @tm.to_hash
|
146
|
-
_(h['additional_data']).must_equal Hash.new
|
147
|
-
_(h['additional_data'].size).must_equal 0
|
148
|
-
end
|
149
|
-
|
150
|
-
it "has a rate" do
|
151
|
-
5.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) }
|
152
|
-
h = @tm.to_hash
|
153
|
-
_(h['rate']).must_be_close_to(40.0, 1.0)
|
154
|
-
end
|
155
|
-
|
156
|
-
it "has a unit_count" do
|
157
|
-
5.times { |x| @tm.start ; sleep 0.05 ; @tm.stop( x ) }
|
158
|
-
h = @tm.to_hash
|
159
|
-
_(h['unit_count']).must_equal 10
|
160
|
-
end
|
161
|
-
|
162
|
-
fields = %w[ name additional_data sampling_start_time sampling_stop_time value_stats timed_stats rate unit_count ]
|
163
|
-
fields.each do |f|
|
164
|
-
it "has a value for #{f}" do
|
165
|
-
3.times { |x| @tm.measure(x) { sleep 0.001 } }
|
166
|
-
h = @tm.to_hash
|
167
|
-
_(h[f]).wont_be_nil
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
data/spec/value_metric_spec.rb
DELETED
@@ -1,108 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Hitimes::ValueMetric do
|
4
|
-
before( :each ) do
|
5
|
-
@metric = Hitimes::ValueMetric.new( "testing" )
|
6
|
-
10.times { |x| @metric.measure( x ) }
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'has a name' do
|
10
|
-
_(@metric.name).must_equal "testing"
|
11
|
-
end
|
12
|
-
|
13
|
-
it "has associated data from initialization" do
|
14
|
-
m = Hitimes::ValueMetric.new( "more-data", 'foo' => 'bar', 'this' => 'that' )
|
15
|
-
_(m.additional_data['foo']).must_equal 'bar'
|
16
|
-
_(m.additional_data['this']).must_equal 'that'
|
17
|
-
|
18
|
-
m = Hitimes::ValueMetric.new( "more-data", { 'foo' => 'bar', 'this' => 'that' } )
|
19
|
-
_(m.additional_data['foo']).must_equal 'bar'
|
20
|
-
_(m.additional_data['this']).must_equal 'that'
|
21
|
-
end
|
22
|
-
|
23
|
-
it "calculates the mean of the measurements" do
|
24
|
-
_(@metric.mean).must_equal 4.5
|
25
|
-
end
|
26
|
-
|
27
|
-
it "calculates the stddev of the measurements" do
|
28
|
-
_(@metric.stddev).must_be :>, 0.0
|
29
|
-
end
|
30
|
-
|
31
|
-
it "returns 0.0 for stddev if there is no data" do
|
32
|
-
m = Hitimes::ValueMetric.new('0-data')
|
33
|
-
_(m.stddev).must_equal 0.0
|
34
|
-
end
|
35
|
-
|
36
|
-
it "keeps track of the sum of data" do
|
37
|
-
_(@metric.sum).must_equal 45.0
|
38
|
-
end
|
39
|
-
|
40
|
-
it "keeps track of the sum of squars of data" do
|
41
|
-
_(@metric.sumsq).must_equal 285.0
|
42
|
-
end
|
43
|
-
|
44
|
-
it "retuns 0.0 for mean if there is no data" do
|
45
|
-
_(Hitimes::ValueMetric.new('0-data').mean).must_equal 0.0
|
46
|
-
end
|
47
|
-
|
48
|
-
it "keeps track of the min value" do
|
49
|
-
_(@metric.min).must_equal 0
|
50
|
-
end
|
51
|
-
|
52
|
-
it "keeps track of the max value" do
|
53
|
-
_(@metric.max).must_equal 9
|
54
|
-
end
|
55
|
-
|
56
|
-
it "keeps track of the first start time of all the measurements" do
|
57
|
-
m = Hitimes::ValueMetric.new( "first-start-time" )
|
58
|
-
f1 = Time.now.gmtime.to_f * 1_000_000
|
59
|
-
10.times{ |x| m.measure( x ); sleep 0.1 }
|
60
|
-
f2 = Time.now.gmtime.to_f * 1_000_000
|
61
|
-
_(m.sampling_start_time).must_be :>=, f1
|
62
|
-
_(m.sampling_start_time).must_be :<, f2
|
63
|
-
# distance from now to start time should be greater than the distance from
|
64
|
-
# the start to the min start_time
|
65
|
-
_((f2 - m.sampling_start_time)).must_be :>, ( m.sampling_start_time - f1 )
|
66
|
-
end
|
67
|
-
|
68
|
-
it "keeps track of the last stop time of all the intervals" do
|
69
|
-
m = Hitimes::ValueMetric.new( "last-stop-time" )
|
70
|
-
f1 = Time.now.gmtime.to_f * 1_000_000
|
71
|
-
10.times {|x| m.measure( x ); sleep 0.1 }
|
72
|
-
f2 = Time.now.gmtime.to_f * 1_000_000
|
73
|
-
_(m.sampling_stop_time).must_be :>, f1
|
74
|
-
_(m.sampling_stop_time).must_be :<=, f2
|
75
|
-
# distance from now to max stop time time should be less than the distance
|
76
|
-
# from the start to the max stop time
|
77
|
-
_((f2 - m.sampling_stop_time)).must_be :<, ( m.sampling_stop_time - f1 )
|
78
|
-
end
|
79
|
-
|
80
|
-
describe "#to_hash" do
|
81
|
-
|
82
|
-
it "has name value" do
|
83
|
-
h = @metric.to_hash
|
84
|
-
_(h['name']).must_equal "testing"
|
85
|
-
end
|
86
|
-
|
87
|
-
it "has an empty has for additional_data" do
|
88
|
-
h = @metric.to_hash
|
89
|
-
_(h['additional_data']).must_equal Hash.new
|
90
|
-
_(h['additional_data'].size).must_equal 0
|
91
|
-
end
|
92
|
-
|
93
|
-
it "has the right sum" do
|
94
|
-
h = @metric.to_hash
|
95
|
-
_(h['sum']).must_equal 45
|
96
|
-
end
|
97
|
-
|
98
|
-
fields = ::Hitimes::Stats::STATS.dup + %w[ name additional_data sampling_start_time sampling_stop_time ]
|
99
|
-
fields = fields - [ 'rate' ]
|
100
|
-
fields.each do |f|
|
101
|
-
it "has a value for #{f}" do
|
102
|
-
h = @metric.to_hash
|
103
|
-
_(h[f]).wont_be_nil
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|