log-courier 1.7 → 1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 87c60888250cf6ee377f74118e6a3c0fecc21146
4
- data.tar.gz: bfdebc1639702ab97613b840a1e28c4b41b3cb6f
3
+ metadata.gz: 4a5972c2f6899a0d26511058691ed121394b6291
4
+ data.tar.gz: 53f55e097ba17fc459287af1665def25abee39df
5
5
  SHA512:
6
- metadata.gz: fae7a9880faa41b0ceb6af7ce7cf79011b23327b5cc5277434cebce4238fcaaede498dbcc061017d3f4439dc2f1cb2be36a74939992d81645799f1a41e5f2b6b
7
- data.tar.gz: d5978e30451e8d96ef5bec62844e591195b24fbdc9d31902402408723bb18d575ec53dac4c84a6de62fa067f00704ea526a836ff37dbb6002cbf483dca9637b3
6
+ metadata.gz: 9c9a0a52422e2604018625abb2b5af6b47ffcce01d9e5288b99fae0c077da13a45890af868a99347ea98f596abcbe8d1cdfd3622cc82914150093a858e13cc50
7
+ data.tar.gz: 20ba9debdee92a7375bfc92a7863a93e3836b1a1013948088d50315cfdf8e1158e6976a9793f44e8600d674c4fa7a2a56bb9d2eada680b1d6ed658ca0f9bb39b
@@ -31,11 +31,21 @@ module LogCourier
31
31
 
32
32
  # Describes a pending payload
33
33
  class PendingPayload
34
+ # TODO(driskell): Consolidate singleton into another file
34
35
  class << self
35
36
  @json_adapter
37
+ @json_parseerror
38
+
36
39
  def get_json_adapter
37
40
  @json_adapter = MultiJson.adapter.instance if @json_adapter.nil?
38
- return @json_adapter
41
+ @json_adapter
42
+ end
43
+
44
+ def get_json_parseerror
45
+ if @json_parseerror.nil?
46
+ @json_parseerror = get_json_adapter.class::ParseError
47
+ end
48
+ @json_parseerror
39
49
  end
40
50
  end
41
51
 
@@ -66,7 +76,7 @@ module LogCourier
66
76
  end
67
77
 
68
78
  # Generate and store the payload
69
- @payload = nonce + buffer.flush(Zlib::FINISH)
79
+ @payload = nonce + buffer.finish()
70
80
  @last_sequence = 0
71
81
  @sequence_len = @events.length
72
82
  end
@@ -68,12 +68,20 @@ module LogCourier
68
68
  begin
69
69
  run_send io_control
70
70
  rescue ShutdownSignal
71
+ rescue StandardError, NativeException => e
72
+ @logger.warn e, :hint => 'Unknown write error' unless @logger.nil?
73
+ io_control << ['F']
74
+ return
71
75
  end
72
76
  end
73
77
  @recv_thread = Thread.new do
74
78
  begin
75
79
  run_recv io_control
76
80
  rescue ShutdownSignal
81
+ rescue StandardError, NativeException => e
82
+ @logger.warn e, :hint => 'Unknown read error' unless @logger.nil?
83
+ io_control << ['F']
84
+ return
77
85
  end
78
86
  end
79
87
  return
@@ -151,12 +159,6 @@ module LogCourier
151
159
  @logger.warn 'Write error', :error => e.message unless @logger.nil?
152
160
  io_control << ['F']
153
161
  return
154
- rescue ShutdownSignal
155
- raise
156
- rescue StandardError, NativeException => e
157
- @logger.warn e, :hint => 'Unknown write error' unless @logger.nil?
158
- io_control << ['F']
159
- return
160
162
  end
161
163
 
162
164
  def run_recv(io_control)
@@ -194,12 +196,6 @@ module LogCourier
194
196
  @logger.warn 'Connection closed by server' unless @logger.nil?
195
197
  io_control << ['F']
196
198
  return
197
- rescue ShutdownSignal
198
- raise
199
- rescue StandardError, NativeException => e
200
- @logger.warn e, :hint => 'Unknown read error' unless @logger.nil?
201
- io_control << ['F']
202
- return
203
199
  end
204
200
 
205
201
  def tls_connect
@@ -234,7 +230,7 @@ module LogCourier
234
230
  ssl.cert_store = cert_store
235
231
  ssl.verify_mode = OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
236
232
 
237
- @ssl_client = OpenSSL::SSL::SSLSocket.new(tcp_socket)
233
+ @ssl_client = OpenSSL::SSL::SSLSocket.new(tcp_socket, ssl)
238
234
 
239
235
  socket = @ssl_client.connect
240
236
 
@@ -33,6 +33,24 @@ module LogCourier
33
33
  class Server
34
34
  attr_reader :port
35
35
 
36
+ # TODO(driskell): Consolidate singleton into another file
37
+ class << self
38
+ @json_adapter
39
+ @json_parseerror
40
+
41
+ def get_json_adapter
42
+ @json_adapter = MultiJson.adapter.instance if @json_adapter.nil?
43
+ @json_adapter
44
+ end
45
+
46
+ def get_json_parseerror
47
+ if @json_parseerror.nil?
48
+ @json_parseerror = get_json_adapter.class::ParseError
49
+ end
50
+ @json_parseerror
51
+ end
52
+ end
53
+
36
54
  def initialize(options = {})
37
55
  @options = {
38
56
  logger: nil,
@@ -54,10 +72,6 @@ module LogCourier
54
72
 
55
73
  # Grab the port back and update the logger context
56
74
  @port = @server.port
57
-
58
- # Load the json adapter
59
- @json_adapter = MultiJson.adapter.instance
60
- @json_options = { raw: true }
61
75
  end
62
76
 
63
77
  def run(&block)
@@ -165,17 +179,23 @@ module LogCourier
165
179
  data_buf.force_encoding('utf-8')
166
180
 
167
181
  # Ensure valid encoding
182
+ invalid_encodings = 0
168
183
  unless data_buf.valid_encoding?
169
184
  data_buf.chars.map do |c|
170
- c.valid_encoding? ? c : "\xEF\xBF\xBD"
185
+ if c.valid_encoding?
186
+ c
187
+ else
188
+ invalid_encodings += 1
189
+ "\xEF\xBF\xBD"
190
+ end
171
191
  end
172
192
  end
173
193
 
174
194
  # Decode the JSON
175
195
  begin
176
- event = @json_adapter.load(data_buf, @json_options)
177
- rescue MultiJson::ParseError => e
178
- @logger.warn e, :hint => 'JSON parse failure, falling back to plain-text' unless @logger.nil?
196
+ event = self.class.get_json_adapter.load(data_buf, :raw => true)
197
+ rescue self.class.get_json_parseerror => e
198
+ @logger.warn e, :invalid_encodings => invalid_encodings, :hint => 'JSON parse failure, falling back to plain-text' unless @logger.nil?
179
199
  event = { 'message' => data_buf }
180
200
  end
181
201
 
@@ -188,19 +188,25 @@ module LogCourier
188
188
  private
189
189
 
190
190
  def run_thread(client, peer, &block)
191
- # Perform the handshake inside the new thread so we don't block TCP accept
192
- if @options[:transport] == 'tls'
193
- begin
194
- client.accept
195
- rescue EOFError, OpenSSL::SSL::SSLError, IOError => e
196
- # Handshake failure or other issue
197
- @logger.warn 'Connection failed to initialise', :error => e.message, :peer => peer unless @logger.nil?
198
- client.close
199
- return
191
+ begin
192
+ # Perform the handshake inside the new thread so we don't block TCP accept
193
+ if @options[:transport] == 'tls'
194
+ begin
195
+ client.accept
196
+ rescue EOFError, OpenSSL::SSL::SSLError, IOError => e
197
+ # Handshake failure or other issue
198
+ @logger.warn 'Connection failed to initialise', :error => e.message, :peer => peer unless @logger.nil?
199
+ client.close
200
+ return
201
+ end
200
202
  end
201
- end
202
203
 
203
- ConnectionTcp.new(@logger, client, peer, @options).run(&block)
204
+ ConnectionTcp.new(@logger, client, peer, @options).run(&block)
205
+ rescue ShutdownSignal
206
+ # Shutting down
207
+ @logger.info 'Server shutting down, connection closed', :peer => peer unless @logger.nil?
208
+ return
209
+ end
204
210
  end
205
211
  end
206
212
 
@@ -228,7 +234,19 @@ module LogCourier
228
234
  event.merge! @peer_fields if @peer_fields.length != 0
229
235
  end
230
236
 
231
- def run
237
+ def run(&block)
238
+ process_messages &block
239
+ rescue ShutdownSignal
240
+ # Shutting down
241
+ @logger.info 'Server shutting down, closing connection', :peer => @peer unless @logger.nil?
242
+ return
243
+ rescue StandardError, NativeException => e
244
+ # Some other unknown problem
245
+ @logger.warn e, :hint => 'Unknown error, connection aborted', :peer => @peer unless @logger.nil?
246
+ return
247
+ end
248
+
249
+ def process_messages
232
250
  loop do
233
251
  # Read messages
234
252
  # Each message begins with a header
@@ -258,7 +276,6 @@ module LogCourier
258
276
  # If we EOF next it's a graceful close
259
277
  @in_progress = false
260
278
  end
261
- return
262
279
  rescue TimeoutError
263
280
  # Timeout of the connection, we were idle too long without a ping/pong
264
281
  @logger.warn 'Connection timed out', :peer => @peer unless @logger.nil?
@@ -282,14 +299,6 @@ module LogCourier
282
299
  # Connection abort request due to a protocol error
283
300
  @logger.warn 'Protocol error, connection aborted', :error => e.message, :peer => @peer unless @logger.nil?
284
301
  return
285
- rescue ShutdownSignal
286
- # Shutting down
287
- @logger.info 'Server shutting down, closing connection', :peer => @peer unless @logger.nil?
288
- return
289
- rescue StandardError, NativeException => e
290
- # Some other unknown problem
291
- @logger.warn e, :hint => 'Unknown error, connection aborted', :peer => @peer unless @logger.nil?
292
- return
293
302
  ensure
294
303
  @fd.close rescue nil
295
304
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: log-courier
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.7'
4
+ version: '1.8'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Woods
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-03 00:00:00.000000000 Z
11
+ date: 2015-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cabin