net_tcp_client 1.0.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/test_helper.rb CHANGED
@@ -6,10 +6,9 @@ ENV['RAILS_ENV'] = 'test'
6
6
 
7
7
  require 'minitest/autorun'
8
8
  require 'minitest/reporters'
9
- require 'semantic_logger'
10
9
  require 'net/tcp_client'
11
10
 
12
11
  Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
13
12
 
14
13
  SemanticLogger.default_level = :trace
15
- SemanticLogger.add_appender('test.log', &SemanticLogger::Appender::Base.colorized_formatter)
14
+ SemanticLogger.add_appender(file_name: 'test.log', formatter: :color)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net_tcp_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-02 00:00:00.000000000 Z
11
+ date: 2016-04-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Net::TCPClient implements resilience features that many developers wish
14
14
  was already included in the standard Ruby libraries.
@@ -22,17 +22,28 @@ files:
22
22
  - README.md
23
23
  - Rakefile
24
24
  - lib/net/tcp_client.rb
25
+ - lib/net/tcp_client/address.rb
25
26
  - lib/net/tcp_client/exceptions.rb
26
- - lib/net/tcp_client/logging.rb
27
+ - lib/net/tcp_client/policy/base.rb
28
+ - lib/net/tcp_client/policy/custom.rb
29
+ - lib/net/tcp_client/policy/ordered.rb
30
+ - lib/net/tcp_client/policy/random.rb
27
31
  - lib/net/tcp_client/tcp_client.rb
28
32
  - lib/net/tcp_client/version.rb
29
33
  - lib/net_tcp_client.rb
34
+ - test/address_test.rb
35
+ - test/policy/custom_policy_test.rb
36
+ - test/policy/ordered_policy_test.rb
37
+ - test/policy/random_policy_test.rb
30
38
  - test/simple_tcp_server.rb
39
+ - test/ssl_files/ca.pem
40
+ - test/ssl_files/localhost-server-key.pem
41
+ - test/ssl_files/localhost-server.pem
31
42
  - test/tcp_client_test.rb
32
43
  - test/test_helper.rb
33
44
  homepage: https://github.com/rocketjob/net_tcp_client
34
45
  licenses:
35
- - Apache License V2.0
46
+ - Apache-2.0
36
47
  metadata: {}
37
48
  post_install_message:
38
49
  rdoc_options: []
@@ -50,12 +61,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
50
61
  version: '0'
51
62
  requirements: []
52
63
  rubyforge_project:
53
- rubygems_version: 2.4.5.1
64
+ rubygems_version: 2.5.1
54
65
  signing_key:
55
66
  specification_version: 4
56
67
  summary: Net::TCPClient is a TCP Socket Client with built-in timeouts, retries, and
57
68
  logging
58
69
  test_files:
70
+ - test/address_test.rb
71
+ - test/policy/custom_policy_test.rb
72
+ - test/policy/ordered_policy_test.rb
73
+ - test/policy/random_policy_test.rb
59
74
  - test/simple_tcp_server.rb
75
+ - test/ssl_files/ca.pem
76
+ - test/ssl_files/localhost-server-key.pem
77
+ - test/ssl_files/localhost-server.pem
60
78
  - test/tcp_client_test.rb
61
79
  - test/test_helper.rb
@@ -1,193 +0,0 @@
1
- module Net
2
- class TCPClient
3
- #
4
- # Purpose: Support SemanticLogger API without forcing a dependency on SemanticLogger
5
- #
6
- # This Mix-in has been copied from semantic_logger/compatible
7
- #
8
- # Do not modify this file, grab the latest version from Semantic Logger
9
- #
10
- module Logging
11
- def self.new_logger(logger=nil, name=nil, log_level=nil)
12
- # SemanticLogger is a soft dependency, use it if already loaded
13
- if defined?(SemanticLogger)
14
- SemanticLogger::Logger.new(name, log_level)
15
- elsif logger && !logger.respond_to?(:benchmark_trace)
16
- logger.extend(InstanceMethods)
17
- logger
18
- else
19
- # Return a nil logger
20
- require 'logger'
21
- logger = Logger.new($null)
22
- logger.level = Logger::FATAL
23
- logger.extend(InstanceMethods)
24
- logger
25
- end
26
- end
27
-
28
- module InstanceMethods
29
- # See SemanticLogger for details on these logging extensions
30
- [:debug, :info, :warn, :error, :fatal].each_with_index do |level|
31
- class_eval <<-EOT, __FILE__, __LINE__ + 1
32
- def #{level}(message=nil, payload=nil, exception=nil, &block)
33
- if #{level}?
34
- super(format_log_message('#{level}', message, payload, exception, &block))
35
- true
36
- else
37
- false
38
- end
39
- end
40
-
41
- def benchmark_#{level}(message, params = {}, &block)
42
- if #{level}?
43
- benchmark(:#{level}, message, params, &block)
44
- else
45
- block.call(params) if block
46
- end
47
- end
48
- EOT
49
- end
50
-
51
- # Log trace level messages as debug
52
- def trace(*args)
53
- debug(*args)
54
- end
55
-
56
- def trace?
57
- debug?
58
- end
59
-
60
- def trace_benchmark(*args)
61
- debug_benchmark(*args)
62
- end
63
-
64
- def format_log_message(level, message=nil, payload=nil, exception=nil, duration=nil, &block)
65
- if exception.nil? && payload && payload.is_a?(Exception)
66
- exception = payload
67
- payload = nil
68
- end
69
-
70
- if block && (result = block.call)
71
- if result.is_a?(String)
72
- message = message.nil? ? result : "\#{message} -- \#{result}"
73
- elsif payload && payload.respond_to?(:merge)
74
- payload.merge(result)
75
- else
76
- payload = result
77
- end
78
- end
79
-
80
- # Add scoped payload
81
- if self.payload
82
- payload = payload.nil? ? self.payload : self.payload.merge(payload)
83
- end
84
-
85
- tags_str = tags.collect { |tag| "[#{tag}]" }.join(" ") + " " if tags && (tags.size > 0)
86
-
87
- message = message.to_s.dup
88
- message << ' -- ' << payload.inspect if payload
89
- message << ' -- Exception: ' << "#{exception.class}: #{exception.message}\n#{(exception.backtrace || []).join("\n")}" if exception
90
-
91
- duration_str = duration ? "(#{'%.1f' % duration}ms) " : ''
92
-
93
- "#{tags_str}#{duration_str} #{message}"
94
- end
95
-
96
- # Measure the supplied block and log the message
97
- def benchmark(level, message, params, &block)
98
- start = Time.now
99
- begin
100
- rc = block.call(params) if block
101
- exception = params[:exception]
102
- rc
103
- rescue Exception => exc
104
- exception = exc
105
- ensure
106
- end_time = Time.now
107
- # Extract options after block completes so that block can modify any of the options
108
- log_exception = params[:log_exception] || :partial
109
- on_exception_level = params[:on_exception_level]
110
- min_duration = params[:min_duration] || 0.0
111
- payload = params[:payload]
112
- metric = params[:metric]
113
- duration =
114
- if block_given?
115
- 1000.0 * (end_time - start)
116
- else
117
- params[:duration] || raise('Mandatory block missing when :duration option is not supplied')
118
- end
119
-
120
- # Add scoped payload
121
- if self.payload
122
- payload = payload.nil? ? self.payload : self.payload.merge(payload)
123
- end
124
- if exception
125
- logged_exception = exception
126
- case log_exception
127
- when :full
128
- # On exception change the log level
129
- level = on_exception_level if on_exception_level
130
- when :partial
131
- # On exception change the log level
132
- level = on_exception_level if on_exception_level
133
- message = "#{message} -- Exception: #{exception.class}: #{exception.message}"
134
- logged_exception = nil
135
- else
136
- logged_exception = nil
137
- end
138
- send(level, format_log_message(level, message, payload, logged_exception, duration))
139
- raise exception
140
- elsif duration >= min_duration
141
- # Only log if the block took longer than 'min_duration' to complete
142
- send(level, format_log_message(level, message, payload, logged_exception, duration))
143
- end
144
- end
145
- end
146
-
147
- def tagged(*tags)
148
- new_tags = push_tags(*tags)
149
- yield self
150
- ensure
151
- pop_tags(new_tags.size)
152
- end
153
-
154
- # Previous method for supplying tags
155
- alias_method :with_tags, :tagged
156
-
157
- def tags
158
- # Since tags are stored on a per thread basis this list is thread-safe
159
- t = Thread.current[:semantic_logger_tags]
160
- t.nil? ? [] : t.clone
161
- end
162
-
163
- def push_tags *tags
164
- # Need to flatten and reject empties to support calls from Rails 4
165
- new_tags = tags.flatten.collect(&:to_s).reject(&:empty?)
166
- t = Thread.current[:semantic_logger_tags]
167
-
168
- Thread.current[:semantic_logger_tags] = t.nil? ? new_tags : t.concat(new_tags)
169
- new_tags
170
- end
171
-
172
- def pop_tags(quantity=1)
173
- t = Thread.current[:semantic_logger_tags]
174
- t.pop(quantity) unless t.nil?
175
- end
176
-
177
- def with_payload(payload)
178
- current_payload = self.payload
179
- Thread.current[:semantic_logger_payload] = current_payload ? current_payload.merge(payload) : payload
180
- yield
181
- ensure
182
- Thread.current[:semantic_logger_payload] = current_payload
183
- end
184
-
185
- def payload
186
- Thread.current[:semantic_logger_payload]
187
- end
188
-
189
- end
190
- end
191
- end
192
-
193
- end