logstash-input-tcp 0.1.3 → 0.1.4
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/lib/logstash/inputs/tcp.rb +33 -34
- data/logstash-input-tcp.gemspec +1 -1
- data/spec/inputs/tcp_spec.rb +82 -114
- metadata +22 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ccc75be3eea6fc13e2bf56bc7faef1dcce3b73d
|
4
|
+
data.tar.gz: a145775968ea16c80e66e175f252c9fd4cb4f46c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e0775708e8493ce73c417fb3aee887f5de16a8c6d1f2424ac806261407990a9bddfdb7cc5e0b6b31a91916fb2aa55c3bc0781d552c2082f53dd58e8cbf979b1
|
7
|
+
data.tar.gz: 59ae84706c2118eb28193b622c87a334a0eaaf5ee1c85c48cb6955392d68e0eb3a6540faa43d072e6f937c81e60449767bf8ef3a4de9edd298de2187ddf2a15d
|
data/lib/logstash/inputs/tcp.rb
CHANGED
@@ -10,7 +10,6 @@ require "logstash/util/socket_peer"
|
|
10
10
|
# Can either accept connections from clients or connect to a server,
|
11
11
|
# depending on `mode`.
|
12
12
|
class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
13
|
-
class Interrupted < StandardError; end
|
14
13
|
config_name "tcp"
|
15
14
|
|
16
15
|
default :codec, "line"
|
@@ -54,6 +53,9 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
|
54
53
|
|
55
54
|
def initialize(*args)
|
56
55
|
super(*args)
|
56
|
+
@interrupted = false
|
57
|
+
@server_socket = nil
|
58
|
+
@client_socket = nil
|
57
59
|
end # def initialize
|
58
60
|
|
59
61
|
public
|
@@ -102,10 +104,10 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
|
102
104
|
|
103
105
|
private
|
104
106
|
def handle_socket(socket, client_address, output_queue, codec)
|
105
|
-
while
|
107
|
+
while !@interrupted
|
106
108
|
buf = nil
|
107
109
|
# NOTE(petef): the timeout only hits after the line is read or socket dies
|
108
|
-
# TODO(sissel): Why do we have a
|
110
|
+
# TODO(sissel): Why do we have a Timeout here? What's the point?
|
109
111
|
if @data_timeout == -1
|
110
112
|
buf = read(socket)
|
111
113
|
else
|
@@ -143,7 +145,8 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
|
143
145
|
begin
|
144
146
|
@logger.debug? && @logger.debug("Accepted connection", :client => s.peer, :server => "#{@host}:#{@port}")
|
145
147
|
handle_socket(s, s.peeraddr[3], q, @codec.clone)
|
146
|
-
rescue
|
148
|
+
rescue LogStash::ShutdownSignal
|
149
|
+
@interrupted = true
|
147
150
|
s.close rescue nil
|
148
151
|
ensure
|
149
152
|
@client_threads_lock.synchronize{@client_threads.delete(Thread.current)}
|
@@ -158,7 +161,7 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
|
158
161
|
|
159
162
|
private
|
160
163
|
def read(socket)
|
161
|
-
|
164
|
+
socket.sysread(16384)
|
162
165
|
end # def readline
|
163
166
|
|
164
167
|
public
|
@@ -171,11 +174,10 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
|
171
174
|
end # def run
|
172
175
|
|
173
176
|
def run_server(output_queue)
|
174
|
-
@thread = Thread.current
|
175
177
|
@client_threads = []
|
176
178
|
@client_threads_lock = Mutex.new
|
177
179
|
|
178
|
-
while
|
180
|
+
while !@interrupted
|
179
181
|
begin
|
180
182
|
socket = @server_socket.accept
|
181
183
|
# start a new thread for each connection.
|
@@ -183,37 +185,28 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
|
183
185
|
rescue OpenSSL::SSL::SSLError => ssle
|
184
186
|
# NOTE(mrichar1): This doesn't return a useful error message for some reason
|
185
187
|
@logger.error("SSL Error", :exception => ssle, :backtrace => ssle.backtrace)
|
186
|
-
rescue IOError
|
187
|
-
|
188
|
-
@server_socket.close rescue nil
|
189
|
-
|
190
|
-
threads = @client_threads_lock.synchronize{@client_threads.dup}
|
191
|
-
threads.each do |thread|
|
192
|
-
thread.raise(LogStash::ShutdownSignal) if thread.alive?
|
193
|
-
end
|
194
|
-
|
195
|
-
# intended shutdown, get out of the loop
|
196
|
-
break
|
197
|
-
else
|
198
|
-
# it was a genuine IOError, propagate it up
|
199
|
-
raise
|
200
|
-
end
|
188
|
+
rescue IOError
|
189
|
+
raise unless @interrupted
|
201
190
|
end
|
202
|
-
end
|
191
|
+
end
|
203
192
|
rescue LogStash::ShutdownSignal
|
204
|
-
|
193
|
+
@interrupted = true
|
205
194
|
ensure
|
206
195
|
@server_socket.close rescue nil
|
196
|
+
|
197
|
+
threads = @client_threads_lock.synchronize{@client_threads.dup}
|
198
|
+
threads.each do |thread|
|
199
|
+
thread.raise(LogStash::ShutdownSignal) if thread.alive?
|
200
|
+
end
|
207
201
|
end # def run_server
|
208
202
|
|
209
203
|
def run_client(output_queue)
|
210
|
-
|
211
|
-
|
212
|
-
client_socket = TCPSocket.new(@host, @port)
|
204
|
+
while !@interrupted
|
205
|
+
@client_socket = TCPSocket.new(@host, @port)
|
213
206
|
if @ssl_enable
|
214
|
-
client_socket = OpenSSL::SSL::SSLSocket.new(client_socket, @ssl_context)
|
207
|
+
@client_socket = OpenSSL::SSL::SSLSocket.new(@client_socket, @ssl_context)
|
215
208
|
begin
|
216
|
-
client_socket.connect
|
209
|
+
@client_socket.connect
|
217
210
|
rescue OpenSSL::SSL::SSLError => ssle
|
218
211
|
@logger.error("SSL Error", :exception => ssle, :backtrace => ssle.backtrace)
|
219
212
|
# NOTE(mrichar1): Hack to prevent hammering peer
|
@@ -221,17 +214,23 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
|
221
214
|
next
|
222
215
|
end
|
223
216
|
end
|
224
|
-
@logger.debug("Opened connection", :client => "#{client_socket.peer}")
|
225
|
-
handle_socket(client_socket, client_socket.peeraddr[3], output_queue, @codec.clone)
|
217
|
+
@logger.debug? && @logger.debug("Opened connection", :client => "#{@client_socket.peer}")
|
218
|
+
handle_socket(@client_socket, @client_socket.peeraddr[3], output_queue, @codec.clone)
|
226
219
|
end # loop
|
227
220
|
ensure
|
228
|
-
client_socket.close rescue nil
|
221
|
+
@client_socket.close rescue nil
|
229
222
|
end # def run
|
230
223
|
|
231
224
|
public
|
232
225
|
def teardown
|
233
|
-
|
234
|
-
|
226
|
+
@interrupted = true
|
227
|
+
if @server_socket
|
228
|
+
@server_socket.close rescue nil
|
229
|
+
@server_socket = nil
|
230
|
+
end
|
231
|
+
if @client_socket
|
232
|
+
@client_socket.close rescue nil
|
233
|
+
@client_socket = nil
|
235
234
|
end
|
236
235
|
end # def teardown
|
237
236
|
end # class LogStash::Inputs::Tcp
|
data/logstash-input-tcp.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-input-tcp'
|
4
|
-
s.version = '0.1.
|
4
|
+
s.version = '0.1.4'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "Read events over a TCP 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/plugin install gemname. This gem is not a stand-alone program"
|
data/spec/inputs/tcp_spec.rb
CHANGED
@@ -7,7 +7,7 @@ require "logstash/inputs/tcp"
|
|
7
7
|
require 'stud/try'
|
8
8
|
|
9
9
|
describe LogStash::Inputs::Tcp do
|
10
|
-
|
10
|
+
|
11
11
|
|
12
12
|
context "codec (PR #1372)" do
|
13
13
|
it "switches from plain to line" do
|
@@ -16,6 +16,7 @@ describe LogStash::Inputs::Tcp do
|
|
16
16
|
plugin = LogStash::Inputs::Tcp.new("codec" => LogStash::Codecs::Plain.new, "port" => 0)
|
17
17
|
plugin.register
|
18
18
|
insist { plugin.codec }.is_a?(LogStash::Codecs::Line)
|
19
|
+
plugin.teardown
|
19
20
|
end
|
20
21
|
it "switches from json to json_lines" do
|
21
22
|
require "logstash/codecs/json"
|
@@ -23,13 +24,14 @@ describe LogStash::Inputs::Tcp do
|
|
23
24
|
plugin = LogStash::Inputs::Tcp.new("codec" => LogStash::Codecs::JSON.new, "port" => 0)
|
24
25
|
plugin.register
|
25
26
|
insist { plugin.codec }.is_a?(LogStash::Codecs::JSONLines)
|
27
|
+
plugin.teardown
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
29
|
-
|
31
|
+
it "should read plain with unicode" do
|
30
32
|
event_count = 10
|
31
33
|
port = 5511
|
32
|
-
|
34
|
+
conf = <<-CONFIG
|
33
35
|
input {
|
34
36
|
tcp {
|
35
37
|
port => #{port}
|
@@ -37,31 +39,30 @@ describe LogStash::Inputs::Tcp do
|
|
37
39
|
}
|
38
40
|
CONFIG
|
39
41
|
|
40
|
-
input do |pipeline, queue|
|
41
|
-
Thread.new { pipeline.run }
|
42
|
-
sleep 0.1 while !pipeline.ready?
|
43
42
|
|
43
|
+
|
44
|
+
events = input(conf) do |pipeline, queue|
|
44
45
|
socket = Stud::try(5.times) { TCPSocket.new("127.0.0.1", port) }
|
45
46
|
event_count.times do |i|
|
46
47
|
# unicode smiley for testing unicode support!
|
47
48
|
socket.puts("#{i} ☹")
|
49
|
+
socket.flush
|
48
50
|
end
|
49
51
|
socket.close
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
+
event_count.times.collect {queue.pop}
|
54
|
+
end
|
53
55
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
end # input
|
56
|
+
insist { events.length } == event_count
|
57
|
+
event_count.times do |i|
|
58
|
+
insist { events[i]["message"] } == "#{i} ☹"
|
59
|
+
end
|
59
60
|
end
|
60
61
|
|
61
|
-
|
62
|
+
it "should read events with plain codec and ISO-8859-1 charset" do
|
62
63
|
port = 5513
|
63
64
|
charset = "ISO-8859-1"
|
64
|
-
|
65
|
+
conf = <<-CONFIG
|
65
66
|
input {
|
66
67
|
tcp {
|
67
68
|
port => #{port}
|
@@ -70,32 +71,25 @@ describe LogStash::Inputs::Tcp do
|
|
70
71
|
}
|
71
72
|
CONFIG
|
72
73
|
|
73
|
-
input do |pipeline, queue|
|
74
|
-
Thread.new { pipeline.run }
|
75
|
-
sleep 0.1 while !pipeline.ready?
|
76
|
-
|
74
|
+
event = input(conf) do |pipeline, queue|
|
77
75
|
socket = Stud::try(5.times) { TCPSocket.new("127.0.0.1", port) }
|
78
76
|
text = "\xA3" # the £ symbol in ISO-8859-1 aka Latin-1
|
79
77
|
text.force_encoding("ISO-8859-1")
|
80
78
|
socket.puts(text)
|
81
79
|
socket.close
|
82
80
|
|
83
|
-
|
84
|
-
|
81
|
+
queue.pop
|
82
|
+
end
|
85
83
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
insist { event["message"].bytesize } == 2
|
91
|
-
insist { event["message"] } == "£"
|
92
|
-
end
|
93
|
-
end # input
|
84
|
+
# Make sure the 0xA3 latin-1 code converts correctly to UTF-8.
|
85
|
+
insist { event["message"].size } == 1
|
86
|
+
insist { event["message"].bytesize } == 2
|
87
|
+
insist { event["message"] } == "£"
|
94
88
|
end
|
95
89
|
|
96
|
-
|
90
|
+
it "should read events with json codec" do
|
97
91
|
port = 5514
|
98
|
-
|
92
|
+
conf = <<-CONFIG
|
99
93
|
input {
|
100
94
|
tcp {
|
101
95
|
port => #{port}
|
@@ -104,38 +98,33 @@ describe LogStash::Inputs::Tcp do
|
|
104
98
|
}
|
105
99
|
CONFIG
|
106
100
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
"foo" => [1,2,3],
|
114
|
-
"baz" => { "1" => "2" },
|
115
|
-
"host" => "example host"
|
116
|
-
}
|
101
|
+
data = {
|
102
|
+
"hello" => "world",
|
103
|
+
"foo" => [1,2,3],
|
104
|
+
"baz" => { "1" => "2" },
|
105
|
+
"host" => "example host"
|
106
|
+
}
|
117
107
|
|
108
|
+
event = input(conf) do |pipeline, queue|
|
118
109
|
socket = Stud::try(5.times) { TCPSocket.new("127.0.0.1", port) }
|
119
110
|
socket.puts(LogStash::Json.dump(data))
|
120
111
|
socket.close
|
121
112
|
|
122
|
-
|
123
|
-
|
113
|
+
queue.pop
|
114
|
+
end
|
124
115
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
insist { event["baz"] } == data["baz"]
|
116
|
+
insist { event["hello"] } == data["hello"]
|
117
|
+
insist { event["foo"].to_a } == data["foo"] # to_a to cast Java ArrayList produced by JrJackson
|
118
|
+
insist { event["baz"] } == data["baz"]
|
129
119
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end # input
|
120
|
+
# Make sure the tcp input, w/ json codec, uses the event's 'host' value,
|
121
|
+
# if present, instead of providing its own
|
122
|
+
insist { event["host"] } == data["host"]
|
134
123
|
end
|
135
124
|
|
136
|
-
|
125
|
+
it "should read events with json codec (testing 'host' handling)" do
|
137
126
|
port = 5514
|
138
|
-
|
127
|
+
conf = <<-CONFIG
|
139
128
|
input {
|
140
129
|
tcp {
|
141
130
|
port => #{port}
|
@@ -144,30 +133,25 @@ describe LogStash::Inputs::Tcp do
|
|
144
133
|
}
|
145
134
|
CONFIG
|
146
135
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
data = {
|
152
|
-
"hello" => "world"
|
153
|
-
}
|
136
|
+
data = {
|
137
|
+
"hello" => "world"
|
138
|
+
}
|
154
139
|
|
140
|
+
event = input(conf) do |pipeline, queue|
|
155
141
|
socket = Stud::try(5.times) { TCPSocket.new("127.0.0.1", port) }
|
156
142
|
socket.puts(LogStash::Json.dump(data))
|
157
143
|
socket.close
|
158
144
|
|
159
|
-
|
160
|
-
|
145
|
+
queue.pop
|
146
|
+
end
|
161
147
|
|
162
|
-
|
163
|
-
|
164
|
-
insist { event }.include?("host")
|
165
|
-
end # input
|
148
|
+
insist { event["hello"] } == data["hello"]
|
149
|
+
insist { event }.include?("host")
|
166
150
|
end
|
167
151
|
|
168
|
-
|
152
|
+
it "should read events with json_lines codec" do
|
169
153
|
port = 5515
|
170
|
-
|
154
|
+
conf = <<-CONFIG
|
171
155
|
input {
|
172
156
|
tcp {
|
173
157
|
port => #{port}
|
@@ -176,38 +160,36 @@ describe LogStash::Inputs::Tcp do
|
|
176
160
|
}
|
177
161
|
CONFIG
|
178
162
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
"foo" => [1,2,3],
|
186
|
-
"baz" => { "1" => "2" },
|
187
|
-
"idx" => 0
|
188
|
-
}
|
163
|
+
data = {
|
164
|
+
"hello" => "world",
|
165
|
+
"foo" => [1,2,3],
|
166
|
+
"baz" => { "1" => "2" },
|
167
|
+
"idx" => 0
|
168
|
+
}
|
189
169
|
|
170
|
+
events = input(conf) do |pipeline, queue|
|
190
171
|
socket = Stud::try(5.times) { TCPSocket.new("127.0.0.1", port) }
|
191
172
|
(1..5).each do |idx|
|
192
173
|
data["idx"] = idx
|
193
174
|
socket.puts(LogStash::Json.dump(data) + "\n")
|
194
|
-
end
|
175
|
+
end
|
195
176
|
socket.close
|
196
177
|
|
197
|
-
(1..5).
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
178
|
+
(1..5).map{queue.pop}
|
179
|
+
end
|
180
|
+
|
181
|
+
events.each_with_index do |event, idx|
|
182
|
+
insist { event["hello"] } == data["hello"]
|
183
|
+
insist { event["foo"].to_a } == data["foo"] # to_a to cast Java ArrayList produced by JrJackson
|
184
|
+
insist { event["baz"] } == data["baz"]
|
185
|
+
insist { event["idx"] } == idx + 1
|
186
|
+
end # do
|
205
187
|
end # describe
|
206
188
|
|
207
|
-
|
189
|
+
it "should one message per connection" do
|
208
190
|
event_count = 10
|
209
191
|
port = 5516
|
210
|
-
|
192
|
+
conf = <<-CONFIG
|
211
193
|
input {
|
212
194
|
tcp {
|
213
195
|
port => #{port}
|
@@ -215,33 +197,27 @@ describe LogStash::Inputs::Tcp do
|
|
215
197
|
}
|
216
198
|
CONFIG
|
217
199
|
|
218
|
-
input do |pipeline, queue|
|
219
|
-
Thread.new { pipeline.run }
|
220
|
-
sleep 0.1 while !pipeline.ready?
|
221
|
-
|
200
|
+
events = input(conf) do |pipeline, queue|
|
222
201
|
event_count.times do |i|
|
223
202
|
socket = Stud::try(5.times) { TCPSocket.new("127.0.0.1", port) }
|
224
203
|
socket.puts("#{i}")
|
225
204
|
socket.flush
|
226
205
|
socket.close
|
227
206
|
end
|
228
|
-
|
229
|
-
# wait till all events have been processed
|
230
|
-
Timeout.timeout(1) {sleep 0.1 while queue.size < event_count}
|
231
207
|
|
232
208
|
# since each message is sent on its own tcp connection & thread, exact receiving order cannot be garanteed
|
233
|
-
|
209
|
+
event_count.times.collect{queue.pop}.sort_by{|event| event["message"]}
|
210
|
+
end
|
234
211
|
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
end # input
|
212
|
+
event_count.times do |i|
|
213
|
+
insist { events[i]["message"] } == "#{i}"
|
214
|
+
end
|
239
215
|
end
|
240
216
|
|
241
|
-
|
217
|
+
it "should connection threads are cleaned up when connection is closed" do
|
242
218
|
event_count = 10
|
243
219
|
port = 5517
|
244
|
-
|
220
|
+
conf = <<-CONFIG
|
245
221
|
input {
|
246
222
|
tcp {
|
247
223
|
port => #{port}
|
@@ -249,10 +225,7 @@ describe LogStash::Inputs::Tcp do
|
|
249
225
|
}
|
250
226
|
CONFIG
|
251
227
|
|
252
|
-
input do |pipeline, queue|
|
253
|
-
Thread.new { pipeline.run }
|
254
|
-
sleep 0.1 while !pipeline.ready?
|
255
|
-
|
228
|
+
input(conf) do |pipeline, queue|
|
256
229
|
inputs = pipeline.instance_variable_get("@inputs")
|
257
230
|
insist { inputs.size } == 1
|
258
231
|
|
@@ -263,18 +236,13 @@ describe LogStash::Inputs::Tcp do
|
|
263
236
|
socket
|
264
237
|
end
|
265
238
|
|
266
|
-
# wait till all events have been processed
|
267
|
-
Timeout.timeout(1) {sleep 0.1 while queue.size < event_count}
|
268
|
-
|
269
|
-
# we should have "event_count" pending threads since sockets were not closed yet
|
270
239
|
client_threads = inputs[0].instance_variable_get("@client_threads")
|
271
|
-
insist { client_threads.size } == event_count
|
272
240
|
|
273
241
|
# close all sockets and make sure there is not more pending threads
|
274
242
|
sockets.each{|socket| socket.close}
|
243
|
+
|
275
244
|
Timeout.timeout(1) {sleep 0.1 while client_threads.size > 0}
|
276
245
|
insist { client_threads.size } == 0 # this check is actually useless per previous line
|
277
|
-
|
278
|
-
end # input
|
246
|
+
end
|
279
247
|
end
|
280
248
|
end
|
metadata
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-tcp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elasticsearch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
|
14
|
+
name: logstash-core
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
17
|
- - '>='
|
17
18
|
- !ruby/object:Gem::Version
|
@@ -19,10 +20,7 @@ dependencies:
|
|
19
20
|
- - <
|
20
21
|
- !ruby/object:Gem::Version
|
21
22
|
version: 2.0.0
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
type: :runtime
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirement: !ruby/object:Gem::Requirement
|
26
24
|
requirements:
|
27
25
|
- - '>='
|
28
26
|
- !ruby/object:Gem::Version
|
@@ -30,76 +28,78 @@ dependencies:
|
|
30
28
|
- - <
|
31
29
|
- !ruby/object:Gem::Version
|
32
30
|
version: 2.0.0
|
31
|
+
prerelease: false
|
32
|
+
type: :runtime
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
+
name: logstash-codec-plain
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
34
40
|
requirement: !ruby/object:Gem::Requirement
|
35
41
|
requirements:
|
36
42
|
- - '>='
|
37
43
|
- !ruby/object:Gem::Version
|
38
44
|
version: '0'
|
39
|
-
name: logstash-codec-plain
|
40
45
|
prerelease: false
|
41
46
|
type: :runtime
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: logstash-codec-line
|
42
49
|
version_requirements: !ruby/object:Gem::Requirement
|
43
50
|
requirements:
|
44
51
|
- - '>='
|
45
52
|
- !ruby/object:Gem::Version
|
46
53
|
version: '0'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
54
|
requirement: !ruby/object:Gem::Requirement
|
49
55
|
requirements:
|
50
56
|
- - '>='
|
51
57
|
- !ruby/object:Gem::Version
|
52
58
|
version: '0'
|
53
|
-
name: logstash-codec-line
|
54
59
|
prerelease: false
|
55
60
|
type: :runtime
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: logstash-codec-json
|
56
63
|
version_requirements: !ruby/object:Gem::Requirement
|
57
64
|
requirements:
|
58
65
|
- - '>='
|
59
66
|
- !ruby/object:Gem::Version
|
60
67
|
version: '0'
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
68
|
requirement: !ruby/object:Gem::Requirement
|
63
69
|
requirements:
|
64
70
|
- - '>='
|
65
71
|
- !ruby/object:Gem::Version
|
66
72
|
version: '0'
|
67
|
-
name: logstash-codec-json
|
68
73
|
prerelease: false
|
69
74
|
type: :runtime
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: logstash-codec-json_lines
|
70
77
|
version_requirements: !ruby/object:Gem::Requirement
|
71
78
|
requirements:
|
72
79
|
- - '>='
|
73
80
|
- !ruby/object:Gem::Version
|
74
81
|
version: '0'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
82
|
requirement: !ruby/object:Gem::Requirement
|
77
83
|
requirements:
|
78
84
|
- - '>='
|
79
85
|
- !ruby/object:Gem::Version
|
80
86
|
version: '0'
|
81
|
-
name: logstash-codec-json_lines
|
82
87
|
prerelease: false
|
83
88
|
type: :runtime
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: logstash-devutils
|
84
91
|
version_requirements: !ruby/object:Gem::Requirement
|
85
92
|
requirements:
|
86
93
|
- - '>='
|
87
94
|
- !ruby/object:Gem::Version
|
88
95
|
version: '0'
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
96
|
requirement: !ruby/object:Gem::Requirement
|
91
97
|
requirements:
|
92
98
|
- - '>='
|
93
99
|
- !ruby/object:Gem::Version
|
94
100
|
version: '0'
|
95
|
-
name: logstash-devutils
|
96
101
|
prerelease: false
|
97
102
|
type: :development
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - '>='
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: '0'
|
103
103
|
description: This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program
|
104
104
|
email: info@elasticsearch.com
|
105
105
|
executables: []
|
@@ -137,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
137
|
version: '0'
|
138
138
|
requirements: []
|
139
139
|
rubyforge_project:
|
140
|
-
rubygems_version: 2.
|
140
|
+
rubygems_version: 2.1.9
|
141
141
|
signing_key:
|
142
142
|
specification_version: 4
|
143
143
|
summary: Read events over a TCP socket.
|