sanford 0.6.2 → 0.6.3
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/bench/client.rb +1 -0
- data/bench/report.txt +29 -30
- data/lib/sanford/server.rb +4 -0
- data/lib/sanford/version.rb +1 -1
- data/lib/sanford/worker.rb +38 -39
- data/test/support/fake_connection.rb +5 -1
- data/test/support/services.rb +1 -1
- data/test/support/simple_client.rb +1 -0
- data/test/system/request_handling_test.rb +6 -0
- metadata +4 -4
data/bench/client.rb
CHANGED
@@ -16,6 +16,7 @@ module Bench
|
|
16
16
|
connection = Sanford::Protocol::Connection.new(socket)
|
17
17
|
request = Sanford::Protocol::Request.new(version, name, params)
|
18
18
|
connection.write(request.to_hash)
|
19
|
+
connection.close_write
|
19
20
|
if IO.select([ socket ], nil, nil, 10)
|
20
21
|
Sanford::Protocol::Response.parse(connection.read)
|
21
22
|
else
|
data/bench/report.txt
CHANGED
@@ -2,37 +2,36 @@ Running benchmark report...
|
|
2
2
|
|
3
3
|
Hitting "simple" service with {}, 10000 times
|
4
4
|
....................................................................................................
|
5
|
-
Total Time:
|
6
|
-
Average Time: 0.
|
7
|
-
Min Time: 0.
|
8
|
-
Max Time:
|
5
|
+
Total Time: 8171.4835ms
|
6
|
+
Average Time: 0.8171ms
|
7
|
+
Min Time: 0.5269ms
|
8
|
+
Max Time: 91.8741ms
|
9
9
|
|
10
10
|
Distribution (number of requests):
|
11
|
-
0ms:
|
12
|
-
0.5ms:
|
13
|
-
0.6ms:
|
14
|
-
0.7ms:
|
15
|
-
0.8ms:
|
16
|
-
0.9ms:
|
17
|
-
1ms:
|
18
|
-
1.0ms:
|
19
|
-
1.1ms:
|
20
|
-
1.2ms:
|
21
|
-
1.3ms:
|
22
|
-
1.4ms:
|
23
|
-
1.
|
24
|
-
1.
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
87ms: 3
|
11
|
+
0ms: 9861
|
12
|
+
0.5ms: 5432
|
13
|
+
0.6ms: 3268
|
14
|
+
0.7ms: 727
|
15
|
+
0.8ms: 291
|
16
|
+
0.9ms: 143
|
17
|
+
1ms: 102
|
18
|
+
1.0ms: 47
|
19
|
+
1.1ms: 30
|
20
|
+
1.2ms: 15
|
21
|
+
1.3ms: 7
|
22
|
+
1.4ms: 1
|
23
|
+
1.6ms: 1
|
24
|
+
1.7ms: 1
|
25
|
+
2ms: 7
|
26
|
+
3ms: 2
|
27
|
+
4ms: 5
|
28
|
+
47ms: 1
|
29
|
+
56ms: 1
|
30
|
+
85ms: 5
|
31
|
+
86ms: 4
|
32
|
+
88ms: 1
|
33
|
+
89ms: 3
|
34
|
+
90ms: 3
|
35
|
+
91ms: 5
|
37
36
|
|
38
37
|
Done running benchmark report
|
data/lib/sanford/server.rb
CHANGED
data/lib/sanford/version.rb
CHANGED
data/lib/sanford/worker.rb
CHANGED
@@ -25,7 +25,7 @@ module Sanford
|
|
25
25
|
benchmark = Benchmark.measure do
|
26
26
|
processed_service = self.run!
|
27
27
|
end
|
28
|
-
processed_service.time_taken =
|
28
|
+
processed_service.time_taken = RoundedTime.new(benchmark.real)
|
29
29
|
self.log_complete(processed_service)
|
30
30
|
self.raise_if_debugging!(processed_service.exception)
|
31
31
|
processed_service
|
@@ -61,6 +61,7 @@ module Sanford
|
|
61
61
|
service = self.handle_exception(service, exception)
|
62
62
|
@connection.write_data service.response.to_hash
|
63
63
|
end
|
64
|
+
@connection.close_write
|
64
65
|
service
|
65
66
|
end
|
66
67
|
|
@@ -77,65 +78,63 @@ module Sanford
|
|
77
78
|
end
|
78
79
|
|
79
80
|
def log_received
|
80
|
-
|
81
|
+
log_verbose "===== Received request ====="
|
81
82
|
end
|
82
83
|
|
83
84
|
def log_request(request)
|
84
|
-
|
85
|
-
|
86
|
-
|
85
|
+
log_verbose " Version: #{request.version.inspect}"
|
86
|
+
log_verbose " Service: #{request.name.inspect}"
|
87
|
+
log_verbose " Params: #{request.params.inspect}"
|
87
88
|
end
|
88
89
|
|
89
90
|
def log_handler_class(handler_class)
|
90
|
-
|
91
|
+
log_verbose " Handler: #{handler_class}"
|
91
92
|
end
|
92
93
|
|
93
94
|
def log_complete(processed_service)
|
94
|
-
|
95
|
-
|
96
|
-
|
95
|
+
log_verbose "===== Completed in #{processed_service.time_taken}ms " \
|
96
|
+
"#{processed_service.response.status} ====="
|
97
|
+
summary_line_args = {
|
98
|
+
'time' => processed_service.time_taken,
|
99
|
+
'handler' => processed_service.handler_class
|
100
|
+
}
|
101
|
+
if processed_service.response
|
102
|
+
summary_line_args['status'] = processed_service.response.code
|
103
|
+
end
|
104
|
+
if (request = processed_service.request)
|
105
|
+
summary_line_args['version'] = request.version
|
106
|
+
summary_line_args['service'] = request.name
|
107
|
+
summary_line_args['params'] = request.params
|
108
|
+
end
|
109
|
+
log_summary SummaryLine.new(summary_line_args)
|
97
110
|
end
|
98
111
|
|
99
112
|
def log_exception(exception)
|
100
|
-
|
101
|
-
|
113
|
+
log_verbose("#{exception.class}: #{exception.message}", :error)
|
114
|
+
log_verbose(exception.backtrace.join("\n"), :error)
|
102
115
|
end
|
103
116
|
|
104
|
-
def
|
105
|
-
|
106
|
-
if (request = processed_service.request)
|
107
|
-
line.add 'version', request.version
|
108
|
-
line.add 'service', request.name
|
109
|
-
line.add 'params', request.params
|
110
|
-
end
|
111
|
-
line.add 'handler', processed_service.handler_class
|
112
|
-
line.add 'status', processed_service.response.code if processed_service.response
|
113
|
-
line.add 'duration', processed_service.time_taken
|
114
|
-
end
|
117
|
+
def log_verbose(message, level = :info)
|
118
|
+
self.logger.verbose.send(level, "[Sanford] #{message}")
|
115
119
|
end
|
116
120
|
|
117
|
-
|
118
|
-
|
119
|
-
def round_time(time_in_seconds)
|
120
|
-
(time_in_seconds * 1000 * ROUND_MODIFIER).to_i / ROUND_MODIFIER.to_f
|
121
|
+
def log_summary(message, level = :info)
|
122
|
+
self.logger.summary.send(level, "[Sanford] #{message}")
|
121
123
|
end
|
122
124
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
def add(key, value)
|
130
|
-
@hash[key] = value.inspect if value
|
125
|
+
module RoundedTime
|
126
|
+
ROUND_PRECISION = 2
|
127
|
+
ROUND_MODIFIER = 10 ** ROUND_PRECISION
|
128
|
+
def self.new(time_in_seconds)
|
129
|
+
(time_in_seconds * 1000 * ROUND_MODIFIER).to_i / ROUND_MODIFIER.to_f
|
131
130
|
end
|
131
|
+
end
|
132
132
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
133
|
+
module SummaryLine
|
134
|
+
def self.new(line_attrs)
|
135
|
+
attr_keys = %w{time status handler version service params}
|
136
|
+
attr_keys.map{ |k| "#{k}=#{line_attrs[k].inspect}" }.join(' ')
|
137
137
|
end
|
138
|
-
|
139
138
|
end
|
140
139
|
|
141
140
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class FakeConnection
|
2
2
|
|
3
|
-
attr_reader :read_data, :response
|
3
|
+
attr_reader :read_data, :response, :write_stream_closed
|
4
4
|
|
5
5
|
def self.with_request(version, name, params = {}, raise_on_write = false)
|
6
6
|
request = Sanford::Protocol::Request.new(version, name, params)
|
@@ -29,4 +29,8 @@ class FakeConnection
|
|
29
29
|
@response = Sanford::Protocol::Response.parse(data)
|
30
30
|
end
|
31
31
|
|
32
|
+
def close_write
|
33
|
+
@write_stream_closed = true
|
34
|
+
end
|
35
|
+
|
32
36
|
end
|
data/test/support/services.rb
CHANGED
@@ -16,7 +16,7 @@ class TestHost
|
|
16
16
|
logger(Logger.new(File.expand_path("../../../log/test.log", __FILE__)).tap do |logger|
|
17
17
|
logger.level = Logger::DEBUG
|
18
18
|
end)
|
19
|
-
verbose_logging
|
19
|
+
verbose_logging false
|
20
20
|
|
21
21
|
error do |exception, host_data, request|
|
22
22
|
if exception.kind_of?(::MyCustomError)
|
@@ -40,6 +40,12 @@ class RequestHandlingTest < Assert::Context
|
|
40
40
|
assert_equal 'test', response.data
|
41
41
|
end
|
42
42
|
|
43
|
+
should "have cloased the connection's write stream" do
|
44
|
+
assert_nothing_raised{ @worker.run }
|
45
|
+
|
46
|
+
assert_equal true, @connection.write_stream_closed
|
47
|
+
end
|
48
|
+
|
43
49
|
end
|
44
50
|
|
45
51
|
class MissingServiceVersionTest < FakeConnectionTest
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sanford
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 3
|
10
|
+
version: 0.6.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Collin Redding
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2013-03-
|
19
|
+
date: 2013-03-15 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
prerelease: false
|