fluent-plugin-syslog-tls-with-backoff-test 2.1.5 → 2.1.6
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 +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +20 -14
- data/fluent-plugin-syslog-tls.gemspec +4 -4
- data/lib/fluent/plugin/out_syslog_tls.rb +66 -0
- data/lib/syslog_tls/host_backoff_specs.rb +48 -0
- data/lib/syslog_tls/ssl_transport.rb +27 -1
- data/lib/syslog_tls/version.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 472ffd61e55f71d65601e4c51cea49441d492c57e8739f7a4d7a9851d651a1a2
|
4
|
+
data.tar.gz: c7453eb9f6101914200bc34d772d53177b6cc415ed4a0c8bbd24be400e567c50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 885508abe507408daf1b191e092dac11e5ab93ad64fde054bf1768b091bacb99b3f92adbf507692dbc11e6a544760c837b1eff067a27ad4d1655604b3e1a0912
|
7
|
+
data.tar.gz: ac388020d61421c4a8d9042be0683e1d672f4c8f13ad0a870ac177a480d77a737fb2476cffe81bb306d3ccc8776fe78b4d87e1ae48d5e0ad5ec8e11c1a438790
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fluent-plugin-syslog-tls (2.1.0
|
4
|
+
fluent-plugin-syslog-tls-with-backoff (2.1.0)
|
5
5
|
fluentd (>= 0.14.0, < 2)
|
6
6
|
|
7
7
|
GEM
|
@@ -9,35 +9,41 @@ GEM
|
|
9
9
|
specs:
|
10
10
|
addressable (2.8.1)
|
11
11
|
public_suffix (>= 2.0.2, < 6.0)
|
12
|
-
|
13
|
-
|
12
|
+
base64 (0.2.0)
|
13
|
+
concurrent-ruby (1.2.3)
|
14
|
+
cool.io (1.8.0)
|
14
15
|
crack (0.4.5)
|
15
16
|
rexml
|
17
|
+
csv (3.3.0)
|
16
18
|
docile (1.4.0)
|
17
|
-
|
19
|
+
drb (2.2.1)
|
20
|
+
fluentd (1.17.0)
|
21
|
+
base64 (~> 0.2)
|
18
22
|
bundler
|
19
23
|
cool.io (>= 1.4.5, < 2.0.0)
|
24
|
+
csv (~> 3.2)
|
25
|
+
drb (~> 2.2)
|
20
26
|
http_parser.rb (>= 0.5.1, < 0.9.0)
|
21
27
|
msgpack (>= 1.3.1, < 2.0.0)
|
22
|
-
serverengine (>= 2.3.
|
23
|
-
sigdump (~> 0.2.
|
28
|
+
serverengine (>= 2.3.2, < 3.0.0)
|
29
|
+
sigdump (~> 0.2.5)
|
24
30
|
strptime (>= 0.2.4, < 1.0.0)
|
25
31
|
tzinfo (>= 1.0, < 3.0)
|
26
32
|
tzinfo-data (~> 1.0)
|
27
|
-
webrick (
|
33
|
+
webrick (~> 1.4)
|
28
34
|
yajl-ruby (~> 1.0)
|
29
35
|
hashdiff (1.0.1)
|
30
36
|
http_parser.rb (0.8.0)
|
31
37
|
minitest (5.17.0)
|
32
38
|
minitest-stub_any_instance (1.0.3)
|
33
|
-
msgpack (1.
|
39
|
+
msgpack (1.7.2)
|
34
40
|
power_assert (2.0.3)
|
35
41
|
public_suffix (5.0.1)
|
36
42
|
rake (13.0.6)
|
37
43
|
rexml (3.2.5)
|
38
|
-
serverengine (2.3.
|
44
|
+
serverengine (2.3.2)
|
39
45
|
sigdump (~> 0.2.2)
|
40
|
-
sigdump (0.2.
|
46
|
+
sigdump (0.2.5)
|
41
47
|
simplecov (0.22.0)
|
42
48
|
docile (~> 1.1)
|
43
49
|
simplecov-html (~> 0.11)
|
@@ -47,22 +53,22 @@ GEM
|
|
47
53
|
strptime (0.2.5)
|
48
54
|
test-unit (3.5.7)
|
49
55
|
power_assert
|
50
|
-
tzinfo (2.0.
|
56
|
+
tzinfo (2.0.6)
|
51
57
|
concurrent-ruby (~> 1.0)
|
52
|
-
tzinfo-data (1.
|
58
|
+
tzinfo-data (1.2024.1)
|
53
59
|
tzinfo (>= 1.0.0)
|
54
60
|
webmock (3.18.1)
|
55
61
|
addressable (>= 2.8.0)
|
56
62
|
crack (>= 0.3.2)
|
57
63
|
hashdiff (>= 0.4.0, < 2.0.0)
|
58
|
-
webrick (1.
|
64
|
+
webrick (1.8.1)
|
59
65
|
yajl-ruby (1.4.3)
|
60
66
|
|
61
67
|
PLATFORMS
|
62
68
|
ruby
|
63
69
|
|
64
70
|
DEPENDENCIES
|
65
|
-
fluent-plugin-syslog-tls!
|
71
|
+
fluent-plugin-syslog-tls-with-backoff!
|
66
72
|
minitest (~> 5.8)
|
67
73
|
minitest-stub_any_instance (~> 1.0.0)
|
68
74
|
rake
|
@@ -20,11 +20,11 @@ require 'syslog_tls/version'
|
|
20
20
|
Gem::Specification.new do |s|
|
21
21
|
s.name = 'fluent-plugin-syslog-tls-with-backoff-test'
|
22
22
|
s.version = SyslogTls::VERSION
|
23
|
-
s.authors = ['thomas morgan']
|
24
|
-
s.email = ['tm@iprog.com']
|
23
|
+
s.authors = ['thomas morgan', 'muhammad adil ghaffar']
|
24
|
+
s.email = ['tm@iprog.com', 'muhammad.sdil.ghaffar@est.tech']
|
25
25
|
s.summary = %q{Fluent Syslog TLS output plugin}
|
26
|
-
s.description = %q{Syslog TLS output plugin with formatting support, for Fluentd}
|
27
|
-
s.homepage = 'https://github.com/
|
26
|
+
s.description = %q{Syslog TLS output plugin with formatting support, for Fluentd. This is cutom version backoff.}
|
27
|
+
s.homepage = 'https://github.com/Nordix/fluent-plugin-syslog-tls/tree/add-expo-backoff/adil'
|
28
28
|
s.license = 'Apache v2'
|
29
29
|
s.files = `git ls-files`.split($/)
|
30
30
|
s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -16,6 +16,70 @@
|
|
16
16
|
require 'socket'
|
17
17
|
require 'syslog_tls/logger'
|
18
18
|
require 'fluent/plugin/output'
|
19
|
+
require 'syslog_tls/host_backoff_specs'
|
20
|
+
require 'pp'
|
21
|
+
|
22
|
+
$host_backoff_specs_list = []
|
23
|
+
|
24
|
+
def add_host_backoff_spec(retries_to_do, host_ip_port)
|
25
|
+
# Check if an element with the same hostIPport already exists
|
26
|
+
return if $host_backoff_specs_list.any? { |spec| spec.hostIPport == host_ip_port }
|
27
|
+
|
28
|
+
# If not, add a new HostBackoffSpecs instance to the global array
|
29
|
+
$host_backoff_specs_list << ::SyslogTls::HostBackoffSpecs.new(retries_to_do, host_ip_port)
|
30
|
+
end
|
31
|
+
|
32
|
+
def can_write(host_ip_port)
|
33
|
+
if !conatins_host(host_ip_port)
|
34
|
+
add_host_backoff_spec(0, host_ip_port)
|
35
|
+
end
|
36
|
+
begin
|
37
|
+
$host_backoff_specs_list.each do |backoff_specs|
|
38
|
+
if backoff_specs.hostIPport == host_ip_port
|
39
|
+
return backoff_specs.canwrite
|
40
|
+
end
|
41
|
+
end
|
42
|
+
rescue => e
|
43
|
+
pp "Error in can_write: #{e.message}"
|
44
|
+
return 0
|
45
|
+
end
|
46
|
+
return 1
|
47
|
+
end
|
48
|
+
|
49
|
+
def increase_retry(host_ip_port)
|
50
|
+
if !conatins_host(host_ip_port)
|
51
|
+
add_host_backoff_spec(0, host_ip_port)
|
52
|
+
end
|
53
|
+
begin
|
54
|
+
$host_backoff_specs_list.each do |backoff_specs|
|
55
|
+
if backoff_specs.hostIPport == host_ip_port
|
56
|
+
backoff_specs.failtowrite
|
57
|
+
end
|
58
|
+
end
|
59
|
+
rescue => e
|
60
|
+
pp "Error in increase_retry: #{e.message}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def reset_tries(host_ip_port)
|
65
|
+
if !conatins_host(host_ip_port)
|
66
|
+
add_host_backoff_spec(0, host_ip_port)
|
67
|
+
end
|
68
|
+
$host_backoff_specs_list.each do |backoff_specs|
|
69
|
+
if backoff_specs.hostIPport == host_ip_port
|
70
|
+
backoff_specs.resetRetries
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def conatins_host(host_ip_port)
|
76
|
+
$host_backoff_specs_list.each do |backoff_specs|
|
77
|
+
if backoff_specs.hostIPport == host_ip_port
|
78
|
+
return true
|
79
|
+
end
|
80
|
+
end
|
81
|
+
return false
|
82
|
+
end
|
19
83
|
|
20
84
|
module Fluent::Plugin
|
21
85
|
class SyslogTlsOutput < Output
|
@@ -82,6 +146,8 @@ module Fluent::Plugin
|
|
82
146
|
@mappings[key_name] = conf[conf_key] if conf.key?(conf_key)
|
83
147
|
end
|
84
148
|
|
149
|
+
add_host_backoff_spec(0, conf['host']+":"+conf['port'])
|
150
|
+
|
85
151
|
@formatter = formatter_create(conf: conf.elements('format').first, default_type: DEFAULT_FORMAT_TYPE)
|
86
152
|
end
|
87
153
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
3
|
+
module SyslogTls
|
4
|
+
class HostBackoffSpecs
|
5
|
+
attr_accessor :retriesToDo, :hostIPport
|
6
|
+
|
7
|
+
def initialize(retries_to_do, host_ip_port)
|
8
|
+
@retriesToDo = retries_to_do
|
9
|
+
@hostIPport = host_ip_port
|
10
|
+
@failTime = nil
|
11
|
+
@baseThreshold = 2
|
12
|
+
end
|
13
|
+
|
14
|
+
def canwrite
|
15
|
+
time_passed_since_failure = -1
|
16
|
+
if @failTime != nil
|
17
|
+
pp "canwrite :: @failTime != nil :: retriesToDo :: " + @retriesToDo.to_s + " failTime :: " + @failTime.to_s
|
18
|
+
time_passed_since_failure = Time.now - @failTime
|
19
|
+
time_passed_since_failure = time_passed_since_failure.round(2)
|
20
|
+
end
|
21
|
+
if time_passed_since_failure == -1
|
22
|
+
return 1
|
23
|
+
end
|
24
|
+
backoffTime = @baseThreshold ** @retriesToDo
|
25
|
+
if backoffTime > 1800
|
26
|
+
backoffTime = 1800
|
27
|
+
end
|
28
|
+
if time_passed_since_failure > backoffTime
|
29
|
+
pp "canwrite writting after backoff :: time_passed_since_failure" + time_passed_since_failure.to_s + " time :: " + Time.now.to_s
|
30
|
+
return 1
|
31
|
+
else
|
32
|
+
return 0
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def failtowrite
|
37
|
+
@retriesToDo += 1
|
38
|
+
@failTime = Time.now
|
39
|
+
pp "failtowrite :: retriesToDo :: " + @retriesToDo.to_s + " failTime :: " + Time.now.to_s
|
40
|
+
end
|
41
|
+
|
42
|
+
def resetRetries
|
43
|
+
@retriesToDo = 0
|
44
|
+
@failTime = nil
|
45
|
+
pp "resetRetries :: retriesToDo :: " + @retriesToDo.to_s + " failTime :: " + @failTime.to_s
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -15,6 +15,7 @@
|
|
15
15
|
|
16
16
|
require 'socket'
|
17
17
|
require 'openssl'
|
18
|
+
require 'pp'
|
18
19
|
|
19
20
|
module SyslogTls
|
20
21
|
# Supports SSL connection to remote host
|
@@ -43,6 +44,7 @@ module SyslogTls
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def connect
|
47
|
+
timwnow = Time.now
|
46
48
|
@socket = get_ssl_connection
|
47
49
|
begin
|
48
50
|
begin
|
@@ -50,6 +52,7 @@ module SyslogTls
|
|
50
52
|
rescue Errno::EAGAIN, Errno::EWOULDBLOCK, IO::WaitReadable
|
51
53
|
select_with_timeout(@socket, :connect_read) && retry
|
52
54
|
rescue IO::WaitWritable
|
55
|
+
pp "connect :: select_with_timeout(@socket, :connect_write) && retry time :: " + Time.now.to_s
|
53
56
|
select_with_timeout(@socket, :connect_write) && retry
|
54
57
|
end
|
55
58
|
rescue Errno::ETIMEDOUT
|
@@ -73,6 +76,7 @@ module SyslogTls
|
|
73
76
|
tcp.setsockopt(Socket::SOL_SOCKET, Socket::Constants::SO_REUSEPORT, true)
|
74
77
|
tcp.connect_nonblock(sock_addr)
|
75
78
|
rescue Errno::EINPROGRESS
|
79
|
+
pp "get_tcp_connection :: select_with_timeout(tcp, :connect_write) time :: " + Time.now.to_s
|
76
80
|
select_with_timeout(tcp, :connect_write)
|
77
81
|
begin
|
78
82
|
tcp.connect_nonblock(sock_addr)
|
@@ -156,6 +160,7 @@ module SyslogTls
|
|
156
160
|
if e.is_a?(OpenSSL::SSL::SSLError) && e.message !~ /write would block/
|
157
161
|
raise e
|
158
162
|
else
|
163
|
+
pp "do_write :: select_with_timeout(@socket, :write) time :: " + Time.now.to_s
|
159
164
|
select_with_timeout(@socket, :write) && retry
|
160
165
|
end
|
161
166
|
end
|
@@ -166,6 +171,9 @@ module SyslogTls
|
|
166
171
|
end
|
167
172
|
|
168
173
|
def select_with_timeout(tcp, type)
|
174
|
+
host_ip_port = host + ":" + port.to_s
|
175
|
+
pp "select_with_timeout :: time :: " + Time.now.to_s + " :: host_ip_port :: " + host_ip_port
|
176
|
+
pp "select_with_timeout :: type :: " + type.to_s
|
169
177
|
case type
|
170
178
|
when :connect_read
|
171
179
|
args = [[tcp], nil, nil, CONNECT_TIMEOUT]
|
@@ -178,7 +186,25 @@ module SyslogTls
|
|
178
186
|
else
|
179
187
|
raise "Unknown select type #{type}"
|
180
188
|
end
|
181
|
-
|
189
|
+
if type.to_s == "connect_write"
|
190
|
+
pp "select_with_timeout :: if :: time :: " + Time.now.to_s + " :: host_ip_port :: " + host_ip_port
|
191
|
+
if can_write(host_ip_port) == 1
|
192
|
+
io_select_return = IO.select(*args)
|
193
|
+
ready_sockets, _, _ = io_select_return
|
194
|
+
if !ready_sockets.empty?
|
195
|
+
reset_tries(host_ip_port)
|
196
|
+
io_select_return
|
197
|
+
else
|
198
|
+
increase_retry(host_ip_port)
|
199
|
+
io_select_return || raise("Socket timeout during #{type}")
|
200
|
+
end
|
201
|
+
# else
|
202
|
+
# raise("Failed to write #{type}")
|
203
|
+
end
|
204
|
+
else
|
205
|
+
pp "select_with_timeout :: else :: time :: " + Time.now.to_s + " :: host_ip_port :: " + host_ip_port
|
206
|
+
IO.select(*args) || raise("Socket timeout during #{type}")
|
207
|
+
end
|
182
208
|
end
|
183
209
|
|
184
210
|
# Forward any methods directly to SSLSocket
|
data/lib/syslog_tls/version.rb
CHANGED
metadata
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-syslog-tls-with-backoff-test
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thomas morgan
|
8
|
+
- muhammad adil ghaffar
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
@@ -114,9 +115,11 @@ dependencies:
|
|
114
115
|
- - "~>"
|
115
116
|
- !ruby/object:Gem::Version
|
116
117
|
version: '0.11'
|
117
|
-
description: Syslog TLS output plugin with formatting support, for Fluentd
|
118
|
+
description: Syslog TLS output plugin with formatting support, for Fluentd. This is
|
119
|
+
cutom version backoff.
|
118
120
|
email:
|
119
121
|
- tm@iprog.com
|
122
|
+
- muhammad.sdil.ghaffar@est.tech
|
120
123
|
executables: []
|
121
124
|
extensions: []
|
122
125
|
extra_rdoc_files: []
|
@@ -134,6 +137,7 @@ files:
|
|
134
137
|
- fluent-plugin-syslog-tls.gemspec
|
135
138
|
- lib/fluent/plugin/out_syslog_tls.rb
|
136
139
|
- lib/syslog_tls/facility.rb
|
140
|
+
- lib/syslog_tls/host_backoff_specs.rb
|
137
141
|
- lib/syslog_tls/logger.rb
|
138
142
|
- lib/syslog_tls/lookup_from_const.rb
|
139
143
|
- lib/syslog_tls/protocol.rb
|
@@ -146,7 +150,7 @@ files:
|
|
146
150
|
- test/syslog_tls/test_logger.rb
|
147
151
|
- test/syslog_tls/test_protocol.rb
|
148
152
|
- test/syslog_tls/test_ssl_transport.rb
|
149
|
-
homepage: https://github.com/
|
153
|
+
homepage: https://github.com/Nordix/fluent-plugin-syslog-tls/tree/add-expo-backoff/adil
|
150
154
|
licenses:
|
151
155
|
- Apache v2
|
152
156
|
metadata: {}
|