right_support 2.8.7 → 2.8.8
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/right_support/net/request_balancer.rb +2 -0
- data/lib/right_support/stats/activity.rb +21 -3
- data/right_support.gemspec +2 -2
- data/spec/stats/activity_spec.rb +33 -0
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.8.
|
1
|
+
2.8.8
|
@@ -69,14 +69,13 @@ module RightSupport::Stats
|
|
69
69
|
# Ignore the update if its type contains "stats"
|
70
70
|
#
|
71
71
|
# @param type [String, Symbol] Type of activity, with anything that is not a symbol, true, or false
|
72
|
-
# automatically converted to a String and truncated to MAX_TYPE_SIZE characters
|
73
|
-
# defaults to nil
|
72
|
+
# automatically converted to a String and truncated to MAX_TYPE_SIZE characters; defaults to nil
|
74
73
|
# @param id [String] Unique identifier associated with this activity
|
75
74
|
#
|
76
75
|
# @return [Time] Update time
|
77
76
|
def update(type = nil, id = nil)
|
78
77
|
now = Time.now
|
79
|
-
if type.nil? ||
|
78
|
+
if type.nil? || type !~ /stats/
|
80
79
|
@interval = average(@interval, now - @last_start_time) if @measure_rate
|
81
80
|
@last_start_time = now
|
82
81
|
@total += 1
|
@@ -108,6 +107,25 @@ module RightSupport::Stats
|
|
108
107
|
duration
|
109
108
|
end
|
110
109
|
|
110
|
+
# Update activity and measure its duration
|
111
|
+
#
|
112
|
+
# @param type [String, Symbol] Type of activity, with anything that is not a symbol, true, or false
|
113
|
+
# automatically converted to a String and truncated to MAX_TYPE_SIZE characters; defaults to nil
|
114
|
+
# @param id [String] Unique identifier associated with this activity
|
115
|
+
#
|
116
|
+
# @yield [] required block being measured
|
117
|
+
#
|
118
|
+
# @return [Object] Result from yield
|
119
|
+
#
|
120
|
+
# @raise [ArgumentError] block missing
|
121
|
+
def measure(type, id)
|
122
|
+
raise ArgumentError, "block missing" unless block_given?
|
123
|
+
start_time = update(type, id)
|
124
|
+
result = yield
|
125
|
+
finish(start_time, id)
|
126
|
+
result
|
127
|
+
end
|
128
|
+
|
111
129
|
# Convert average interval to average rate
|
112
130
|
#
|
113
131
|
# @return [Float, NilClass] Recent average rate, or nil if total is 0
|
data/right_support.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "right_support"
|
8
|
-
s.version = "2.8.
|
8
|
+
s.version = "2.8.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tony Spataro", "Sergey Sergyenko", "Ryan Williamson", "Lee Kirchhoff", "Alexey Karpik", "Scott Messier"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2014-01-09"
|
13
13
|
s.description = "A toolkit of useful, reusable foundation code created by RightScale."
|
14
14
|
s.email = "support@rightscale.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/stats/activity_spec.rb
CHANGED
@@ -120,6 +120,11 @@ describe RightSupport::Stats::Activity do
|
|
120
120
|
@stats.instance_variable_get(:@total).should == 1
|
121
121
|
@stats.instance_variable_get(:@count_per_type).should == {}
|
122
122
|
end
|
123
|
+
|
124
|
+
it "tracks the id associated with the update" do
|
125
|
+
@stats.update("test", "id")
|
126
|
+
@stats.instance_variable_get(:@last_id).should == "id"
|
127
|
+
end
|
123
128
|
end
|
124
129
|
|
125
130
|
context :finish do
|
@@ -146,6 +151,34 @@ describe RightSupport::Stats::Activity do
|
|
146
151
|
end
|
147
152
|
end
|
148
153
|
|
154
|
+
context :measure do
|
155
|
+
it "updates and finishes the activity" do
|
156
|
+
flexmock(Time).should_receive(:now).and_return(1000010, 1000020)
|
157
|
+
@stats.measure("test", "id") { }
|
158
|
+
@stats.instance_variable_get(:@interval).should == 1.0
|
159
|
+
@stats.instance_variable_get(:@last_start_time).should == @now + 10
|
160
|
+
@stats.instance_variable_get(:@total).should == 1
|
161
|
+
@stats.instance_variable_get(:@count_per_type).should == {"test" => 1}
|
162
|
+
@stats.instance_variable_get(:@last_id).should == 0
|
163
|
+
@stats.instance_variable_get(:@avg_duration).should == 1.0
|
164
|
+
end
|
165
|
+
|
166
|
+
it "yields to the block" do
|
167
|
+
called = 0
|
168
|
+
flexmock(Time).should_receive(:now).and_return(1000010, 1000030)
|
169
|
+
@stats.measure("test", "id") { called += 1}
|
170
|
+
called.should == 1
|
171
|
+
end
|
172
|
+
|
173
|
+
it "returns the result of the yield" do
|
174
|
+
@stats.measure("test", "id") { 99 }.should == 99
|
175
|
+
end
|
176
|
+
|
177
|
+
it "raises exception if block is missing" do
|
178
|
+
lambda { @stats.measure("test", "id") }.should raise_error(ArgumentError, "block missing")
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
149
182
|
context :avg_rate do
|
150
183
|
it "converts interval to rate" do
|
151
184
|
flexmock(Time).should_receive(:now).and_return(1000020)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 2.8.
|
9
|
+
- 8
|
10
|
+
version: 2.8.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tony Spataro
|
@@ -20,7 +20,7 @@ autorequire:
|
|
20
20
|
bindir: bin
|
21
21
|
cert_chain: []
|
22
22
|
|
23
|
-
date:
|
23
|
+
date: 2014-01-09 00:00:00 Z
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|