sanford 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
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: 8960.5727ms
6
- Average Time: 0.8960ms
7
- Min Time: 0.5099ms
8
- Max Time: 87.5380ms
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: 9775
12
- 0.5ms: 5723
13
- 0.6ms: 2810
14
- 0.7ms: 733
15
- 0.8ms: 364
16
- 0.9ms: 145
17
- 1ms: 153
18
- 1.0ms: 57
19
- 1.1ms: 18
20
- 1.2ms: 42
21
- 1.3ms: 13
22
- 1.4ms: 8
23
- 1.5ms: 7
24
- 1.6ms: 2
25
- 1.7ms: 3
26
- 1.8ms: 2
27
- 1.9ms: 1
28
- 2ms: 16
29
- 3ms: 1
30
- 22ms: 1
31
- 44ms: 10
32
- 45ms: 25
33
- 46ms: 9
34
- 47ms: 4
35
- 85ms: 3
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
@@ -73,6 +73,10 @@ module Sanford
73
73
  @connection.peek(@timeout)
74
74
  end
75
75
 
76
+ def close_write
77
+ @connection.close_write
78
+ end
79
+
76
80
  end
77
81
 
78
82
  module TCPCork
@@ -1,3 +1,3 @@
1
1
  module Sanford
2
- VERSION = "0.6.2"
2
+ VERSION = "0.6.3"
3
3
  end
@@ -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 = self.round_time(benchmark.real)
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
- self.logger.verbose.info("===== Received request =====")
81
+ log_verbose "===== Received request ====="
81
82
  end
82
83
 
83
84
  def log_request(request)
84
- self.logger.verbose.info(" Version: #{request.version.inspect}")
85
- self.logger.verbose.info(" Service: #{request.name.inspect}")
86
- self.logger.verbose.info(" Params: #{request.params.inspect}")
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
- self.logger.verbose.info(" Handler: #{handler_class}")
91
+ log_verbose " Handler: #{handler_class}"
91
92
  end
92
93
 
93
94
  def log_complete(processed_service)
94
- self.logger.verbose.info "===== Completed in #{processed_service.time_taken}ms " \
95
- "#{processed_service.response.status} ====="
96
- self.logger.summary.info self.summary_line(processed_service).to_s
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
- self.logger.verbose.error("#{exception.class}: #{exception.message}")
101
- self.logger.verbose.error(exception.backtrace.join("\n"))
113
+ log_verbose("#{exception.class}: #{exception.message}", :error)
114
+ log_verbose(exception.backtrace.join("\n"), :error)
102
115
  end
103
116
 
104
- def summary_line(processed_service)
105
- SummaryLine.new.tap do |line|
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
- ROUND_PRECISION = 2
118
- ROUND_MODIFIER = 10 ** ROUND_PRECISION
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
- class SummaryLine
124
-
125
- def initialize
126
- @hash = {}
127
- end
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
- def to_s
134
- [ 'version', 'service', 'handler', 'status', 'duration', 'params' ].map do |key|
135
- "#{key}=#{@hash[key]}" if @hash[key]
136
- end.compact.join(" ")
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
@@ -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 true
19
+ verbose_logging false
20
20
 
21
21
  error do |exception, host_data, request|
22
22
  if exception.kind_of?(::MyCustomError)
@@ -47,6 +47,7 @@ class SimpleClient
47
47
  connection = Sanford::Protocol::Connection.new(socket)
48
48
  sleep(@delay) if @delay
49
49
  socket.send(bytes, 0)
50
+ socket.close_write
50
51
  Sanford::Protocol::Response.parse(connection.read)
51
52
  ensure
52
53
  socket.close rescue false
@@ -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: 3
4
+ hash: 1
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 2
10
- version: 0.6.2
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-04 00:00:00 Z
19
+ date: 2013-03-15 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  prerelease: false