semlogr-sinks-logentries 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c5558ada7374ab3f2655bf95098d4e9325c1581b
4
- data.tar.gz: 892b3436dec958f35a7595050b5416019800cc74
3
+ metadata.gz: 778b5678c8781a04eff35866d75597b87762ae5a
4
+ data.tar.gz: d64fb407f66dbaaf2f35e85801dba0aeacb890a7
5
5
  SHA512:
6
- metadata.gz: ec461ff41edacffaae66f3d3b03ec76469782cb3c4b2f26db1a817469e999b0a787855ad62b5d4288b334d0ebef65496b63e99c64e8eaf7e1bab9df04a940b90
7
- data.tar.gz: be742c3a4ed2de32201d0eadc9cd2c750d81e0ac85fefb134347898342b309b9d261921b731c3f6b1dc532aec6bb620c527dfd551e18297b16b83e98c89bebb4
6
+ metadata.gz: 5216546d29e1607c954dcab490c5041f641e820f7806587ddd0f14421e6cda01657371870e294a62a4f977805675762e8a68a277761b82a293b0cab4377f09ba
7
+ data.tar.gz: 89b89419377aea4ad8810426ee5dc61206691c9730ffaa67ef965352ef60aff4ef949bba8637f75e67e4fe7719e1c9d005b15543942249ec171006ea507f3f6f
@@ -1,20 +1,43 @@
1
- require 'logstash-logger'
2
- require 'semlogr/sinks/logentries/version'
1
+ require 'stud/buffer'
2
+ require 'socket'
3
+ require 'openssl'
3
4
  require 'semlogr/formatters/json_formatter'
5
+ require 'semlogr/sinks/logentries/tcp_connection'
4
6
 
5
7
  module Semlogr
6
8
  module Sinks
7
9
  module Logentries
8
10
  class Sink
9
- def initialize(token)
11
+ include Stud::Buffer
12
+
13
+ def initialize(token, opts = {})
10
14
  @token = token
11
- @formatter = Formatters::JsonFormatter.new
12
- @device = LogStashLogger::Device.new(type: :tcp, host: 'data.logentries.com', port: 443, use_ssl: true)
15
+ @options = opts
16
+ @formatter = opts.fetch(:formatter, Formatters::JsonFormatter.new)
17
+ @connection = create_connection(opts)
18
+
19
+ buffer_initialize(opts)
13
20
  end
14
21
 
15
22
  def emit(log_event)
16
- output = @formatter.format(log_event)
17
- @device.write("#{@token} #{output}")
23
+ buffer_receive(log_event)
24
+ end
25
+
26
+ def flush(items, _group = nil)
27
+ items.each do |item|
28
+ output = @formatter.format(item)
29
+ @connection.write("#{@token} #{output}")
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def create_connection(opts)
36
+ host = opts.fetch(:host, 'data.logentries.com')
37
+ ssl = opts.fetch(:ssl, true)
38
+ port = opts.fetch(:port, ssl ? 443 : 80)
39
+
40
+ TcpConnection.new(host, port, ssl)
18
41
  end
19
42
  end
20
43
  end
@@ -0,0 +1,82 @@
1
+ require 'stud/buffer'
2
+ require 'socket'
3
+ require 'openssl'
4
+ require 'semlogr/sinks/logentries/version'
5
+
6
+ module Semlogr
7
+ module Sinks
8
+ module Logentries
9
+ class TcpConnection
10
+ def initialize(host, port, ssl)
11
+ @host = host
12
+ @port = port
13
+ @ssl = ssl
14
+ end
15
+
16
+ def connected?
17
+ !@socket.nil?
18
+ end
19
+
20
+ def write(data)
21
+ connect unless connected?
22
+
23
+ @socket.write(data)
24
+ rescue
25
+ close
26
+
27
+ raise
28
+ end
29
+
30
+ def connect
31
+ socket = TCPSocket.new(@host, @port)
32
+
33
+ configure_socket_keepalive(socket)
34
+
35
+ if @ssl
36
+ cert_store = OpenSSL::X509::Store.new
37
+ cert_store.set_default_paths
38
+
39
+ ssl_context = OpenSSL::SSL::SSLContext.new
40
+ ssl_context.cert_store = cert_store
41
+ ssl_context.verify_mode = OpenSSL::SSL::VERIFY_PEER
42
+
43
+ socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
44
+ socket.hostname = @host if socket.respond_to? :hostname=
45
+ socket.sync_close = true
46
+ socket.connect
47
+ end
48
+
49
+ @socket = socket
50
+ end
51
+
52
+ def close
53
+ if @socket.respond_to?(:sysclose)
54
+ @socket.sysclose
55
+ elsif @socket.respond_to?(:close)
56
+ @socket.close
57
+ end
58
+ ensure
59
+ @socket = nil
60
+ end
61
+
62
+ private
63
+
64
+ def configure_socket_keepalive(connection)
65
+ return unless [
66
+ :SOL_SOCKET,
67
+ :SO_KEEPALIVE,
68
+ :SOL_TCP,
69
+ :TCP_KEEPIDLE,
70
+ :TCP_KEEPINTVL,
71
+ :TCP_KEEPCNT
72
+ ].all? { |c| Socket.const_defined? c }
73
+
74
+ connection.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true)
75
+ connection.setsockopt(Socket::SOL_TCP, Socket::TCP_KEEPIDLE, 60)
76
+ connection.setsockopt(Socket::SOL_TCP, Socket::TCP_KEEPINTVL, 5)
77
+ connection.setsockopt(Socket::SOL_TCP, Socket::TCP_KEEPCNT, 5)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -1,7 +1,7 @@
1
1
  module Semlogr
2
2
  module Sinks
3
3
  module Logentries
4
- VERSION = '0.1.1'.freeze
4
+ VERSION = '0.1.2'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -1,10 +1,11 @@
1
+ require 'semlogr/sinks/logentries/version'
1
2
  require 'semlogr/sinks/logentries/sink'
2
3
 
3
4
  module Semlogr
4
5
  module Sinks
5
6
  module Logentries
6
- def self.new(token)
7
- Sink.new(token)
7
+ def self.new(token, opts = {})
8
+ Sink.new(token, opts)
8
9
  end
9
10
  end
10
11
  end
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'semlogr', '~> 0.1.1'
22
- spec.add_dependency 'logstash-logger', '~> 0.19.2'
21
+ spec.add_dependency 'semlogr', '~> 0.1.2'
22
+ spec.add_dependency 'stud', '~> 0.0.10'
23
23
 
24
24
  spec.add_development_dependency 'bundler', '~> 1.13'
25
25
  spec.add_development_dependency 'pry', '~> 0.10.3'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semlogr-sinks-logentries
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Sedich
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-07 00:00:00.000000000 Z
11
+ date: 2016-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: semlogr
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.1
19
+ version: 0.1.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.1
26
+ version: 0.1.2
27
27
  - !ruby/object:Gem::Dependency
28
- name: logstash-logger
28
+ name: stud
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.19.2
33
+ version: 0.0.10
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.19.2
40
+ version: 0.0.10
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -126,6 +126,7 @@ files:
126
126
  - bin/setup
127
127
  - lib/semlogr/sinks/logentries.rb
128
128
  - lib/semlogr/sinks/logentries/sink.rb
129
+ - lib/semlogr/sinks/logentries/tcp_connection.rb
129
130
  - lib/semlogr/sinks/logentries/version.rb
130
131
  - semlogr-sinks-logentries.gemspec
131
132
  homepage: https://github.com/semlogr/semlogr-sinks-logentries
@@ -147,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
148
  version: '0'
148
149
  requirements: []
149
150
  rubyforge_project:
150
- rubygems_version: 2.6.7
151
+ rubygems_version: 2.5.1
151
152
  signing_key:
152
153
  specification_version: 4
153
154
  summary: A semlogr sink for logging to logentries.