logstash-input-unix 3.1.1 → 3.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/logstash/inputs/unix.rb +38 -10
- data/logstash-input-unix.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dce11755b6f6a09ad708f79ee8d9e85fb87e0d98bf2aaedb6d47a316e1de6731
|
4
|
+
data.tar.gz: 84c73daebb51aa1813b528e42113e1a26f73a5162ced25a8c9043648daf54f14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a259754acac7b218a5f62f6341f981266833a26395f3fd4341fcec6ed1af843d891561937cd7a16a2478863d2bd7a5d61b85dfe62a00b4ee3f340b35f3ce02d6
|
7
|
+
data.tar.gz: f85ae87765a0c9ddde40a91d8b4438d4e62d6ec68b1abb187d6c59fa3e643f4ce624656f97a13fd84fde86e85c63021e46f8eafddef1ba05ea8a9557a312b2ca
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
## 3.1.2
|
2
|
+
- Fix: eliminate high CPU usage when data timeout is disabled and no data is available on the socket [#30](https://github.com/logstash-plugins/logstash-input-unix/pull/30)
|
3
|
+
|
1
4
|
## 3.1.1
|
2
5
|
- Fix: unable to stop plugin (on LS 6.x) [#29](https://github.com/logstash-plugins/logstash-input-unix/pull/29)
|
3
6
|
- Refactor: plugin internals got reviewed for `data_timeout => ...` to work reliably
|
data/lib/logstash/inputs/unix.rb
CHANGED
@@ -84,16 +84,15 @@ class LogStash::Inputs::Unix < LogStash::Inputs::Base
|
|
84
84
|
begin
|
85
85
|
hostname = Socket.gethostname
|
86
86
|
while !stop?
|
87
|
-
data = socket
|
88
|
-
|
89
|
-
if data == :
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
end
|
87
|
+
data = io_interruptable_readpartial(socket, 16384, @data_timeout)
|
88
|
+
|
89
|
+
if data == :data_timeout
|
90
|
+
# socket not ready after @data_timeout seconds
|
91
|
+
@logger.info("Closing connection after read timeout", :path => @path)
|
92
|
+
return
|
93
|
+
elsif data == :stopping
|
94
|
+
@logger.trace("Shutdown in progress", :path => @path)
|
95
|
+
next # let next loop handle graceful stop
|
97
96
|
end
|
98
97
|
|
99
98
|
@codec.decode(data) do |event|
|
@@ -118,6 +117,35 @@ class LogStash::Inputs::Unix < LogStash::Inputs::Base
|
|
118
117
|
end
|
119
118
|
end
|
120
119
|
|
120
|
+
##
|
121
|
+
# Emulates `IO#readpartial` with a timeout and our plugin's stop-condition,
|
122
|
+
# limiting blocking calls to windows of 10s or less to ensure it can be interrupted.
|
123
|
+
#
|
124
|
+
# @param readable_io [IO] the IO to read from
|
125
|
+
# @param maxlen [Integer] the max bytes to be read
|
126
|
+
# @param timeout [Number] the maximum number of seconds to , or -1 to disable timeouts
|
127
|
+
#
|
128
|
+
# @return [:data_timeout] if timeout was reached before bytes were available
|
129
|
+
# @return [:stopping] if plugin stop-condition was detected before bytes were available
|
130
|
+
# @return [String] a non-empty string if bytes became available before the timeout was reached
|
131
|
+
def io_interruptable_readpartial(readable_io, maxlen, timeout)
|
132
|
+
|
133
|
+
data_timeout_deadline = timeout < 0 ? nil : Time.now + timeout
|
134
|
+
maximum_blocking_seconds = timeout < 0 || timeout > 10 ? 10 : timeout
|
135
|
+
|
136
|
+
loop do
|
137
|
+
return :stopping if stop?
|
138
|
+
result = readable_io.read_nonblock(maxlen, exception: false)
|
139
|
+
|
140
|
+
return result if result.kind_of?(String)
|
141
|
+
raise EOFError if result.nil?
|
142
|
+
|
143
|
+
return :data_timeout if (data_timeout_deadline && data_timeout_deadline < Time.now)
|
144
|
+
IO.select([readable_io], nil, nil, maximum_blocking_seconds)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
private :io_interruptable_readpartial
|
148
|
+
|
121
149
|
private
|
122
150
|
def server?
|
123
151
|
@mode == "server"
|
data/logstash-input-unix.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-input-unix'
|
4
|
-
s.version = '3.1.
|
4
|
+
s.version = '3.1.2'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "Reads events over a UNIX socket"
|
7
7
|
s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-unix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|