logstash-input-tcp 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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.