right_support 2.8.17 → 2.8.20
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/VERSION +1 -1
- data/lib/right_support/log/mixin.rb +1 -1
- data/lib/right_support/rack/request_logger.rb +14 -4
- data/lib/right_support/stats/activity.rb +6 -4
- data/right_support.gemspec +3 -3
- data/spec/log/mixin_spec.rb +30 -1
- data/spec/rack/request_logger_spec.rb +7 -0
- data/spec/stats/activity_spec.rb +11 -2
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.8.
|
1
|
+
2.8.20
|
@@ -85,7 +85,7 @@ module RightSupport::Log
|
|
85
85
|
# Instance methods that become available to classes that include Mixin.
|
86
86
|
module InstanceMethods
|
87
87
|
def logger
|
88
|
-
@logger || self.class.logger
|
88
|
+
@logger || (self.class.respond_to?(:logger) && self.class.logger) || RightSupport::Log::Mixin.default_logger
|
89
89
|
end
|
90
90
|
|
91
91
|
def logger=(logger)
|
@@ -47,12 +47,20 @@ module RightSupport::Rack
|
|
47
47
|
end
|
48
48
|
|
49
49
|
# Add a logger to the Rack environment and call the next middleware.
|
50
|
-
# Set "rack.logging.enabled" in Rack environment to indicate whether logging
|
51
|
-
# is enabled for this request for use by other middleware in the call chain.
|
52
50
|
#
|
53
51
|
# @param [Hash] env Rack environment
|
52
|
+
# @option env [TrueClass|FalseClass] 'rack.logging.enabled' in Rack
|
53
|
+
# environment to indicate whether logging is enabled for this request for
|
54
|
+
# use by other middleware in the call chain.
|
55
|
+
# @option env [TrueClass|FalseClass] 'sinatra.error' is set by Sinatra to
|
56
|
+
# pass error info (exception object) to handlers.
|
57
|
+
# @option env [TrueClass|FalseClass] 'sinatra.error.handled' is true to
|
58
|
+
# prevent any additional error handlers in the call chain from processing
|
59
|
+
# an error that has already handled been handled (i.e. log and response)
|
60
|
+
# (default = false).
|
54
61
|
#
|
55
|
-
# @return [Object] always returns whatever value is returned by the next
|
62
|
+
# @return [Object] always returns whatever value is returned by the next
|
63
|
+
# layer of middleware
|
56
64
|
def call(env)
|
57
65
|
logger = env["rack.logger"]
|
58
66
|
env["rack.logging.enabled"] = enabled = logging_enabled?(logger, env)
|
@@ -61,7 +69,9 @@ module RightSupport::Rack
|
|
61
69
|
|
62
70
|
log_request_begin(logger, env) if enabled
|
63
71
|
status, header, body = @app.call(env)
|
64
|
-
|
72
|
+
if env['sinatra.error'] && !env['sinatra.error.handled']
|
73
|
+
log_exception(logger, env['sinatra.error'])
|
74
|
+
end
|
65
75
|
log_request_end(logger, status, header, began_at) if enabled
|
66
76
|
|
67
77
|
return [status, header, body]
|
@@ -31,7 +31,7 @@ module RightSupport::Stats
|
|
31
31
|
# at value V for average A to reach 90% of the original difference between A and V
|
32
32
|
# For example, for A = 0, V = 1, RECENT_SIZE = 3 the progression for A is
|
33
33
|
# 0, 0.3, 0.5, 0.7, 0.8, 0.86, 0.91, 0.94, 0.96, 0.97, 0.98, 0.99, ...
|
34
|
-
RECENT_SIZE = 3
|
34
|
+
RECENT_SIZE = 3.0
|
35
35
|
|
36
36
|
# Maximum string length for activity type
|
37
37
|
MAX_TYPE_SIZE = 60
|
@@ -130,8 +130,10 @@ module RightSupport::Stats
|
|
130
130
|
#
|
131
131
|
# @return [Float, NilClass] Recent average rate, or nil if total is 0
|
132
132
|
def avg_rate
|
133
|
-
if @total >
|
134
|
-
|
133
|
+
if @total > 1
|
134
|
+
@interval == 0.0 ? 0.0 : 1.0 / @interval
|
135
|
+
elsif @total == 1
|
136
|
+
0.0
|
135
137
|
end
|
136
138
|
end
|
137
139
|
|
@@ -204,7 +206,7 @@ module RightSupport::Stats
|
|
204
206
|
#
|
205
207
|
# @return [Float] New average
|
206
208
|
def average(current, value)
|
207
|
-
((current * (RECENT_SIZE - 1)) + value) / RECENT_SIZE
|
209
|
+
((current * (RECENT_SIZE - 1)) + value) / RECENT_SIZE
|
208
210
|
end
|
209
211
|
|
210
212
|
public
|
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.20"
|
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 = "2014-03-
|
12
|
+
s.date = "2014-03-21"
|
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 = [
|
@@ -137,7 +137,7 @@ Gem::Specification.new do |s|
|
|
137
137
|
s.homepage = "https://github.com/rightscale/right_support"
|
138
138
|
s.licenses = ["MIT"]
|
139
139
|
s.require_paths = ["lib"]
|
140
|
-
s.rubygems_version = "1.8.
|
140
|
+
s.rubygems_version = "1.8.26"
|
141
141
|
s.summary = "Reusable foundation code."
|
142
142
|
|
143
143
|
if s.respond_to? :specification_version then
|
data/spec/log/mixin_spec.rb
CHANGED
@@ -7,7 +7,33 @@ end
|
|
7
7
|
class Bystander < InnocentVictim
|
8
8
|
end
|
9
9
|
|
10
|
+
module Parasite
|
11
|
+
include RightSupport::Log::Mixin
|
12
|
+
end
|
13
|
+
|
14
|
+
class Host
|
15
|
+
include Parasite
|
16
|
+
end
|
17
|
+
|
10
18
|
describe RightSupport::Log::Mixin do
|
19
|
+
context 'when mixed into a module' do
|
20
|
+
before(:each) do
|
21
|
+
@victim = Host.new
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'provides instance-level accesssor to hosts' do
|
25
|
+
@victim.should respond_to(:logger)
|
26
|
+
@victim.should respond_to(:logger=)
|
27
|
+
@victim.logger.info 'haha'
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'provides a module-method-level accessor' do
|
31
|
+
Parasite.should respond_to(:logger)
|
32
|
+
Parasite.should respond_to(:logger=)
|
33
|
+
Parasite.logger.info 'haha'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
11
37
|
context 'when mixed into a base class' do
|
12
38
|
before(:each) do
|
13
39
|
@victim = InnocentVictim.new
|
@@ -16,10 +42,13 @@ describe RightSupport::Log::Mixin do
|
|
16
42
|
it 'provides a class-level accessor' do
|
17
43
|
@victim.class.should respond_to(:logger)
|
18
44
|
@victim.class.should respond_to(:logger=)
|
45
|
+
@victim.class.logger.info 'haha'
|
19
46
|
end
|
20
47
|
|
21
48
|
it 'provides an instance-level accessor' do
|
22
49
|
@victim.should respond_to(:logger)
|
50
|
+
@victim.should respond_to(:logger=)
|
51
|
+
@victim.logger.info 'haha'
|
23
52
|
end
|
24
53
|
|
25
54
|
context :logger do
|
@@ -88,4 +117,4 @@ describe RightSupport::Log::Mixin do
|
|
88
117
|
Bystander.logger.error('foo')
|
89
118
|
end
|
90
119
|
end
|
91
|
-
end
|
120
|
+
end
|
@@ -45,6 +45,13 @@ describe RightSupport::Rack::RequestLogger do
|
|
45
45
|
@logger.should_receive(:error)
|
46
46
|
@middleware.call(@env)
|
47
47
|
end
|
48
|
+
|
49
|
+
it 'skips logging the exception when already handled' do
|
50
|
+
@logger.should_receive(:info)
|
51
|
+
@logger.should_receive(:error).never
|
52
|
+
@env['sinatra.error.handled'] = true
|
53
|
+
@middleware.call(@env)
|
54
|
+
end
|
48
55
|
end
|
49
56
|
|
50
57
|
context 'when limit logging extent' do
|
data/spec/stats/activity_spec.rb
CHANGED
@@ -181,11 +181,20 @@ describe RightSupport::Stats::Activity do
|
|
181
181
|
|
182
182
|
context :avg_rate do
|
183
183
|
it "converts interval to rate" do
|
184
|
+
flexmock(Time).should_receive(:now).and_return(1000020, 1000042)
|
185
|
+
@stats.avg_rate.should be_nil
|
186
|
+
@stats.update
|
187
|
+
@stats.update
|
188
|
+
@stats.instance_variable_get(:@interval).should == 4.0
|
189
|
+
@stats.avg_rate.should == 0.25
|
190
|
+
end
|
191
|
+
|
192
|
+
it "does not convert interval to rate if there is only one event" do
|
184
193
|
flexmock(Time).should_receive(:now).and_return(1000020)
|
185
194
|
@stats.avg_rate.should be_nil
|
186
195
|
@stats.update
|
187
196
|
@stats.instance_variable_get(:@interval).should == 2.0
|
188
|
-
@stats.avg_rate.should == 0.
|
197
|
+
@stats.avg_rate.should == 0.0
|
189
198
|
end
|
190
199
|
end
|
191
200
|
|
@@ -236,7 +245,7 @@ describe RightSupport::Stats::Activity do
|
|
236
245
|
it "returns all activity aspects that were measured except duration" do
|
237
246
|
flexmock(Time).should_receive(:now).and_return(1000010)
|
238
247
|
@stats.update
|
239
|
-
@stats.all.should == {"last" => {"elapsed" => 0}, "total" => 1, "rate" =>
|
248
|
+
@stats.all.should == {"last" => {"elapsed" => 0}, "total" => 1, "rate" => 0.0}
|
240
249
|
end
|
241
250
|
|
242
251
|
it "excludes rate if it is not being measured" do
|
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: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 2.8.
|
9
|
+
- 20
|
10
|
+
version: 2.8.20
|
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: 2014-03-
|
23
|
+
date: 2014-03-21 00:00:00 Z
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
type: :development
|