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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d69d9bbbbb563037fa303e22890b2663d3d754fe
4
- data.tar.gz: 91c386b38e725110193bf433070e07290b5935ba
3
+ metadata.gz: 1ccc75be3eea6fc13e2bf56bc7faef1dcce3b73d
4
+ data.tar.gz: a145775968ea16c80e66e175f252c9fd4cb4f46c
5
5
  SHA512:
6
- metadata.gz: 073b544677fac9571b80b8d1f8ad858f350bbcbbfcf23d59d7e66b900df9603b8955acd81be04c8cdb23d65cb96b3e58f834a6629d05ecf76bdb3bb516f16da9
7
- data.tar.gz: b628a21aef7d1e8a5ebb92bb3f3de594a590164854aa643ea45935b7e2f5acfa581c06a2c846dd598b35b578470807c57499e44ee9dbfbec1bcfba5523940dd9
6
+ metadata.gz: 8e0775708e8493ce73c417fb3aee887f5de16a8c6d1f2424ac806261407990a9bddfdb7cc5e0b6b31a91916fb2aa55c3bc0781d552c2082f53dd58e8cbf979b1
7
+ data.tar.gz: 59ae84706c2118eb28193b622c87a334a0eaaf5ee1c85c48cb6955392d68e0eb3a6540faa43d072e6f937c81e60449767bf8ef3a4de9edd298de2187ddf2a15d
@@ -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 true
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 timeout here? What's the point?
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 Interrupted
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
- return socket.sysread(16384)
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 true
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, LogStash::ShutdownSignal
187
- if @interrupted
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 # loop
191
+ end
203
192
  rescue LogStash::ShutdownSignal
204
- # nothing to do
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
- @thread = Thread.current
211
- while true
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
- if server?
234
- @interrupted = true
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
@@ -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.3'
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"
@@ -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
- describe "read plain with unicode", :socket => true do
31
+ it "should read plain with unicode" do
30
32
  event_count = 10
31
33
  port = 5511
32
- config <<-CONFIG
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
- # wait till all events have been processed
52
- Timeout.timeout(1) {sleep 0.1 while queue.size < event_count}
53
+ event_count.times.collect {queue.pop}
54
+ end
53
55
 
54
- events = event_count.times.collect { queue.pop }
55
- event_count.times do |i|
56
- insist { events[i]["message"] } == "#{i} ☹"
57
- end
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
- describe "read events with plain codec and ISO-8859-1 charset" do
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
- config <<-CONFIG
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
- # wait till all events have been processed
84
- Timeout.timeout(1) {sleep 0.1 while queue.size < 1}
81
+ queue.pop
82
+ end
85
83
 
86
- event = queue.pop
87
- # Make sure the 0xA3 latin-1 code converts correctly to UTF-8.
88
- pending("charset conv broken") do
89
- insist { event["message"].size } == 1
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
- describe "read events with json codec" do
90
+ it "should read events with json codec" do
97
91
  port = 5514
98
- config <<-CONFIG
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
- input do |pipeline, queue|
108
- Thread.new { pipeline.run }
109
- sleep 0.1 while !pipeline.ready?
110
-
111
- data = {
112
- "hello" => "world",
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
- # wait till all events have been processed
123
- Timeout.timeout(1) {sleep 0.1 while queue.size < 1}
113
+ queue.pop
114
+ end
124
115
 
125
- event = queue.pop
126
- insist { event["hello"] } == data["hello"]
127
- insist { event["foo"].to_a } == data["foo"] # to_a to cast Java ArrayList produced by JrJackson
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
- # Make sure the tcp input, w/ json codec, uses the event's 'host' value,
131
- # if present, instead of providing its own
132
- insist { event["host"] } == data["host"]
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
- describe "read events with json codec (testing 'host' handling)" do
125
+ it "should read events with json codec (testing 'host' handling)" do
137
126
  port = 5514
138
- config <<-CONFIG
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
- input do |pipeline, queue|
148
- Thread.new { pipeline.run }
149
- sleep 0.1 while !pipeline.ready?
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
- # wait till all events have been processed
160
- Timeout.timeout(1) {sleep 0.1 while queue.size < 1}
145
+ queue.pop
146
+ end
161
147
 
162
- event = queue.pop
163
- insist { event["hello"] } == data["hello"]
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
- describe "read events with json_lines codec" do
152
+ it "should read events with json_lines codec" do
169
153
  port = 5515
170
- config <<-CONFIG
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
- input do |pipeline, queue|
180
- Thread.new { pipeline.run }
181
- sleep 0.1 while !pipeline.ready?
182
-
183
- data = {
184
- "hello" => "world",
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 # do
175
+ end
195
176
  socket.close
196
177
 
197
- (1..5).each do |idx|
198
- event = queue.pop
199
- insist { event["hello"] } == data["hello"]
200
- insist { event["foo"].to_a } == data["foo"] # to_a to cast Java ArrayList produced by JrJackson
201
- insist { event["baz"] } == data["baz"]
202
- insist { event["idx"] } == idx
203
- end # do
204
- end # input
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
- describe "one message per connection" do
189
+ it "should one message per connection" do
208
190
  event_count = 10
209
191
  port = 5516
210
- config <<-CONFIG
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
- events = event_count.times.collect{queue.pop}.sort_by{|event| event["message"]}
209
+ event_count.times.collect{queue.pop}.sort_by{|event| event["message"]}
210
+ end
234
211
 
235
- event_count.times do |i|
236
- insist { events[i]["message"] } == "#{i}"
237
- end
238
- end # input
212
+ event_count.times do |i|
213
+ insist { events[i]["message"] } == "#{i}"
214
+ end
239
215
  end
240
216
 
241
- describe "connection threads are cleaned up when connection is closed" do
217
+ it "should connection threads are cleaned up when connection is closed" do
242
218
  event_count = 10
243
219
  port = 5517
244
- config <<-CONFIG
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.3
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-02-26 00:00:00.000000000 Z
11
+ date: 2015-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- requirement: !ruby/object:Gem::Requirement
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
- name: logstash-core
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.4.5
140
+ rubygems_version: 2.1.9
141
141
  signing_key:
142
142
  specification_version: 4
143
143
  summary: Read events over a TCP socket.