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 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