logstash-input-beats 2.2.7 → 2.2.8

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: 0c9f5e238355c46a4cf8de5a79ab788941bfd524
4
- data.tar.gz: c40c248be28f9c7a28764761340dd0d926f6cdb6
3
+ metadata.gz: c1727d19341688ab4551c91893080ea3c09fb0ae
4
+ data.tar.gz: 8065ae0fd7bbecb54a4fd07fc32dad7290cc314d
5
5
  SHA512:
6
- metadata.gz: 12996169fca9958102f280cb5d532cb17717f940ac62f4d7deaa19a851b875817e8da5432fd0fec5733971b7de9de4d2b2fec498bb9f8f281bbb7d54b6a056bb
7
- data.tar.gz: 1a3a6d86aaf2f30a63524d98664b1abdce873e03e1dca0b180c2650314f19f6229730cbcfa4902d3eb8b0a2b14e1b43c8c04c3133399dee6921ab64a46fecbec
6
+ metadata.gz: 010ce24ae384e93f786461e6cc0189b6fc34151fd07a8934763e121e341d5aff863d0feb719e1f855509560d070d9f3e24b9d267633cea2caa41fa29263ddaec
7
+ data.tar.gz: 8f29fe0aa689b94a6a4fb75e4622a38b031a6695443d1d0e647eef4d8fa2c845e3e3261b33f4eb7901bef88cba45c44665278e478f960b8007d8701ba21ceb58
@@ -1,3 +1,8 @@
1
+ # 2.2.8
2
+ - Fix #73 Bug in EventTransformCommon#codec_name, use config_name
3
+ - Add regression test for fix to #73
4
+ - Non deterministic error for the LSF integration test
5
+ - Make this plugin really a drop in replacement for the lumberjack input, so LSF can send their events to this plugin.
1
6
  # 2.2.7
2
7
  - More robust test when using a random port #60
3
8
  - Fix LSF integration tests #52
@@ -9,6 +9,7 @@ Contributors:
9
9
  * Pier-Hugues Pellerin (ph)
10
10
  * Richard Pijnenburg (electrical)
11
11
  * Suyog Rao (suyograo)
12
+ * Guy Boertje (guyboertje)
12
13
 
13
14
  Note: If you've sent us patches, bug reports, or otherwise contributed to
14
15
  Logstash, and you aren't on the list above and want to be, please let us know
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # Logstash Plugin
2
2
 
3
- [![Build
4
- Status](http://build-eu-00.elastic.co/view/LS%20Plugins/view/LS%20Inputs/job/logstash-plugin-input-beats-unit/badge/icon)](http://build-eu-00.elastic.co/view/LS%20Plugins/view/LS%20Inputs/job/logstash-plugin-input-beats-unit/)
3
+ [![Travis Build Status](https://travis-ci.org/logstash-plugins/logstash-input-beats.svg)](https://travis-ci.org/logstash-plugins/logstash-input-beats)
5
4
 
6
5
  This is a plugin for [Logstash](https://github.com/elastic/logstash).
7
6
 
@@ -95,7 +95,7 @@ class LogStash::Inputs::Beats < LogStash::Inputs::Base
95
95
  config :congestion_threshold, :validate => :number, :default => 5
96
96
 
97
97
  # This is the default field that the specified codec will be applied
98
- config :target_field_for_codec, :validate => :string, :default => "message"
98
+ config :target_field_for_codec, :validate => :string, :default => "message", :deprecated => "This option is now deprecated, the plugin is now compatible with Filebeat and Logstash-Forwarder"
99
99
 
100
100
  # TODO(sissel): Add CA to authenticate clients with.
101
101
  RECONNECT_BACKOFF_SLEEP = 0.5
@@ -2,6 +2,7 @@
2
2
  require "logstash/inputs/beats"
3
3
  require "logstash/inputs/beats_support/decoded_event_transform"
4
4
  require "logstash/inputs/beats_support/raw_event_transform"
5
+ require "lumberjack/beats"
5
6
 
6
7
  module LogStash::Inputs::BeatsSupport
7
8
  # Handle the data coming from a connection
@@ -40,7 +41,11 @@ module LogStash::Inputs::BeatsSupport
40
41
  :peer => @connection.peer)
41
42
 
42
43
  # Filebeats uses the `message` key and LSF `line`
43
- target_field = @input.target_field_for_codec ? hash.delete(@input.target_field_for_codec) : nil
44
+ target_field = if from_filebeat?(hash)
45
+ hash.delete(Lumberjack::Beats::FILEBEAT_LOG_LINE_FIELD)
46
+ elsif from_logstash_forwarder?(hash)
47
+ hash.delete(Lumberjack::Beats::LSF_LOG_LINE_FIELD)
48
+ end
44
49
 
45
50
  if target_field.nil?
46
51
  @logger.debug? && @logger.debug("Beats input: not using the codec for this event, can't find the codec target field",
@@ -75,5 +80,14 @@ module LogStash::Inputs::BeatsSupport
75
80
 
76
81
  @codec.flush(&block)
77
82
  end
83
+
84
+ private
85
+ def from_filebeat?(hash)
86
+ !hash[Lumberjack::Beats::FILEBEAT_LOG_LINE_FIELD].nil?
87
+ end
88
+
89
+ def from_logstash_forwarder?(hash)
90
+ !hash[Lumberjack::Beats::LSF_LOG_LINE_FIELD].nil?
91
+ end
78
92
  end
79
93
  end
@@ -33,7 +33,7 @@ module LogStash::Inputs::BeatsSupport
33
33
 
34
34
  def codec_name
35
35
  @codec_name ||= if @input.codec.respond_to?(:base_codec)
36
- @input.codec.base_codec.class.config
36
+ @input.codec.base_codec.class.config_name
37
37
  else
38
38
  @input.codec.class.config_name
39
39
  end
@@ -1,6 +1,8 @@
1
1
  # encoding: utf-8
2
2
  require "json"
3
3
  module Lumberjack module Beats
4
+ FILEBEAT_LOG_LINE_FIELD = "message".freeze
5
+ LSF_LOG_LINE_FIELD = "line".freeze
4
6
  SEQUENCE_MAX = (2**32-1).freeze
5
7
 
6
8
  @@json = Class.new do
@@ -467,7 +467,7 @@ module Lumberjack module Beats
467
467
  reset_next_ack(*args)
468
468
  when :data
469
469
  sequence, map = args
470
- ack_if_needed(sequence) { data(map, &block) }
470
+ ack_if_needed(sequence) { data(normalize_v1_metadata_encoding(map), &block) }
471
471
  when :json
472
472
  # If the payload is an array of items we will emit multiple events
473
473
  # this behavior was moved from the plugin to the library.
@@ -485,6 +485,15 @@ module Lumberjack module Beats
485
485
  end
486
486
  end
487
487
 
488
+ def normalize_v1_metadata_encoding(map)
489
+ # lets normalize the metadata of the v1 frame to make
490
+ # sure everything is in utf-8 format, because LSF don't enforce the encoding when he send
491
+ # the data to the server. Path, offset can be in another encoding, when the data is assigned to the event.
492
+ # the event will validate it and crash when the encoding is in the wrong format.
493
+ map.each { |k, v| map[k].force_encoding(Encoding::UTF_8) unless k == Lumberjack::Beats::LSF_LOG_LINE_FIELD }
494
+ map
495
+ end
496
+
488
497
  def version(version)
489
498
  @version = version
490
499
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "logstash-input-beats"
3
- s.version = '2.2.7'
3
+ s.version = '2.2.8'
4
4
  s.licenses = ["Apache License (2.0)"]
5
5
  s.summary = "Receive events using the lumberjack protocol."
6
6
  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"
@@ -10,8 +10,8 @@ require "lumberjack/beats/client"
10
10
 
11
11
  describe LogStash::Inputs::Beats do
12
12
  let(:connection) { double("connection") }
13
- let(:certificate) { LogStashTest.certificate }
14
- let(:port) { LogStashTest.random_port }
13
+ let(:certificate) { BeatsInputTest.certificate }
14
+ let(:port) { BeatsInputTest.random_port }
15
15
  let(:queue) { Queue.new }
16
16
  let(:config) { { "port" => 0, "ssl_certificate" => certificate.ssl_cert, "ssl_key" => certificate.ssl_key, "type" => "example", "tags" => "beats"} }
17
17
 
@@ -97,8 +97,8 @@ describe LogStash::Inputs::Beats do
97
97
  context "#handle_new_connection" do
98
98
  let(:config) {{ "ssl" => false, "port" => 0, "type" => "example", "tags" => "beats" }}
99
99
  let(:plugin) { LogStash::Inputs::Beats.new(config) }
100
- let(:connection) { DummyConnection.new(events) }
101
- let(:buffer_queue) { DummyNeverBlockedQueue.new }
100
+ let(:connection) { BeatsInputTest::DummyConnection.new(events) }
101
+ let(:buffer_queue) { BeatsInputTest::DummyNeverBlockedQueue.new }
102
102
  let(:pipeline_queue) { [] }
103
103
  let(:events) {
104
104
  [
@@ -11,7 +11,7 @@ describe LogStash::Inputs::BeatsSupport::ConnectionHandler do
11
11
  "tags" => "beats"
12
12
  }
13
13
  end
14
-
14
+ # logger is not used and DummyLogger needs implementing
15
15
  let(:logger) { DummyLogger.new }
16
16
  let(:input) do
17
17
  LogStash::Inputs::Beats.new(config).tap do |i|
@@ -19,12 +19,12 @@ describe LogStash::Inputs::BeatsSupport::ConnectionHandler do
19
19
  end
20
20
  end
21
21
  let(:connection) { double("connection") }
22
- let(:queue) { DummyNeverBlockedQueue.new }
22
+ let(:queue) { BeatsInputTest::DummyNeverBlockedQueue.new }
23
23
 
24
24
  subject { described_class.new(connection, input, queue) }
25
-
25
+
26
26
  context "#accept" do
27
- let(:connection) { DummyConnection.new(events) }
27
+ let(:connection) { BeatsInputTest::DummyConnection.new(events) }
28
28
  let(:events) {
29
29
  [
30
30
  { :map => { "id" => 1 }, :identity_stream => "/var/log/message" },
@@ -59,7 +59,7 @@ describe LogStash::Inputs::BeatsSupport::ConnectionHandler do
59
59
  context "queue is blocked" do
60
60
  let(:queue_timeout) { 1 }
61
61
  let(:queue) { LogStash::Inputs::BeatsSupport::SynchronousQueueWithOffer.new(queue_timeout) }
62
-
62
+
63
63
  it "raise an exception" do
64
64
  expect { subject.process(map, identity_stream) }.to raise_error(LogStash::Inputs::Beats::InsertingToQueueTakeTooLong)
65
65
  end
@@ -64,4 +64,11 @@ describe LogStash::Inputs::BeatsSupport::DecodedEventTransform do
64
64
  expect(subject["@timestamp"]).to be_kind_of(LogStash::Timestamp)
65
65
  end
66
66
  end
67
+
68
+ context "when the codec is a base_codec wrapper" do
69
+ before { config.update("codec" => BeatsInputTest::DummyCodec.new) }
70
+ it "gets the codec config name from the base codec" do
71
+ expect(subject["tags"]).to include("beats_input_codec_dummy_applied")
72
+ end
73
+ end
67
74
  end
@@ -19,10 +19,11 @@ describe "Logstash-Forwarder", :integration => true do
19
19
  end
20
20
  end
21
21
 
22
- let(:client_wait_time) { 5 }
23
22
  include FileHelpers
24
23
  include_context "beats configuration"
25
24
 
25
+ let(:client_wait_time) { 5 }
26
+
26
27
  # Filebeat related variables
27
28
  let(:cmd) { [lsf_exec, "-config", lsf_config_path] }
28
29
 
@@ -53,6 +54,7 @@ describe "Logstash-Forwarder", :integration => true do
53
54
  File.open(log_file, "a") do |f|
54
55
  f.write(events.join("\n") + "\n")
55
56
  end
57
+ sleep(1) # give some time to the clients to pick up the changes
56
58
  end
57
59
 
58
60
  after :each do
@@ -76,7 +78,6 @@ describe "Logstash-Forwarder", :integration => true do
76
78
  "ssl" => true,
77
79
  "ssl_certificate" => certificate_file,
78
80
  "ssl_key" => certificate_key_file,
79
- "target_field_for_codec" => "line"
80
81
  })
81
82
  end
82
83
 
@@ -3,7 +3,7 @@ require "flores/random"
3
3
 
4
4
  shared_examples "send events" do
5
5
  it "successfully send the events" do
6
- wait(15).for { queue.size }.to eq(number_of_events), "Expected: #{number_of_events} got: #{queue.size}, execution output:\n #{@execution_output}"
6
+ wait(20).for { queue.size }.to eq(number_of_events), "Expected: #{number_of_events} got: #{queue.size}, execution output:\n #{@execution_output}"
7
7
  expect(queue.collect { |e| e["message"] }).to eq(events)
8
8
  end
9
9
  end
@@ -43,10 +43,21 @@ shared_context "beats configuration" do
43
43
  before :each do
44
44
  beats.register
45
45
 
46
+ @abort_on_exception = Thread.abort_on_exception
47
+ Thread.abort_on_exception = true
48
+
46
49
  @server = Thread.new do
47
50
  begin
51
+ # use to know what lumberjack is actually doing
52
+ if ENV["DEBUG"]
53
+ logger = Logger.new(STDOUT)
54
+ beats.logger = Cabin::Channel.new
55
+ beats.logger.subscribe(logger)
56
+ beats.logger.level = :debug
57
+ end
58
+
48
59
  beats.run(queue)
49
- rescue
60
+ rescue => e
50
61
  retry unless beats.stop?
51
62
  end
52
63
  end
@@ -55,5 +66,8 @@ shared_context "beats configuration" do
55
66
  sleep(1) while @server.status != "run"
56
67
  end
57
68
 
58
- after(:each) { beats.stop }
69
+ after(:each) do
70
+ beats.stop
71
+ Thread.abort_on_exception = @abort_on_exception
72
+ end
59
73
  end
@@ -1,5 +1,9 @@
1
1
  require "stud/temporary"
2
- module LogStashTest
2
+
3
+
4
+ # namespace the Dummy* classes, they are reused names
5
+ # use a more specific module name to prevent clashes
6
+ module BeatsInputTest
3
7
  class Certicate
4
8
  attr_reader :ssl_key, :ssl_cert
5
9
 
@@ -20,29 +24,43 @@ module LogStashTest
20
24
  rand(2000..10000)
21
25
  end
22
26
  end
23
- end
24
27
 
25
- class DummyNeverBlockedQueue < Array
26
- def offer(element, timeout = nil)
27
- push(element)
28
+ class DummyNeverBlockedQueue < Array
29
+ def offer(element, timeout = nil)
30
+ push(element)
31
+ end
32
+
33
+ alias_method :take, :shift
28
34
  end
29
35
 
30
- alias_method :take, :shift
31
- end
36
+ class DummyConnection
37
+ def initialize(events)
38
+ @events = events
39
+ end
32
40
 
33
- class DummyConnection
34
- def initialize(events)
35
- @events = events
36
- end
41
+ def run
42
+ @events.each do |element|
43
+ yield element[:map], element[:identity_stream]
44
+ end
45
+ end
37
46
 
38
- def run
39
- @events.each do |element|
40
- yield element[:map], element[:identity_stream]
47
+ def peer
48
+ "localhost:5555"
41
49
  end
42
50
  end
43
51
 
44
- def peer
45
- "localhost:5555"
52
+ class DummyCodec
53
+ def register() end
54
+ def decode(*) end
55
+ def clone() self; end
56
+ def base_codec
57
+ self
58
+ end
59
+ def self.config_name
60
+ "dummy"
61
+ end
46
62
  end
47
63
  end
48
64
 
65
+
66
+
metadata CHANGED
@@ -1,203 +1,203 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-beats
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.7
4
+ version: 2.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-31 00:00:00.000000000 Z
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: logstash-core-plugin-api
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
14
20
  requirement: !ruby/object:Gem::Requirement
15
21
  requirements:
16
- - - "~>"
22
+ - - ~>
17
23
  - !ruby/object:Gem::Version
18
24
  version: '1.0'
19
- name: logstash-core-plugin-api
20
25
  prerelease: false
21
26
  type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: logstash-codec-plain
22
29
  version_requirements: !ruby/object:Gem::Requirement
23
30
  requirements:
24
- - - "~>"
31
+ - - '>='
25
32
  - !ruby/object:Gem::Version
26
- version: '1.0'
27
- - !ruby/object:Gem::Dependency
33
+ version: '0'
28
34
  requirement: !ruby/object:Gem::Requirement
29
35
  requirements:
30
- - - ">="
36
+ - - '>='
31
37
  - !ruby/object:Gem::Version
32
38
  version: '0'
33
- name: logstash-codec-plain
34
39
  prerelease: false
35
40
  type: :runtime
41
+ - !ruby/object:Gem::Dependency
42
+ name: concurrent-ruby
36
43
  version_requirements: !ruby/object:Gem::Requirement
37
44
  requirements:
38
- - - ">="
45
+ - - '>='
39
46
  - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
47
+ version: 0.9.2
48
+ - - <=
49
+ - !ruby/object:Gem::Version
50
+ version: 1.0.0
42
51
  requirement: !ruby/object:Gem::Requirement
43
52
  requirements:
44
- - - ">="
53
+ - - '>='
45
54
  - !ruby/object:Gem::Version
46
55
  version: 0.9.2
47
- - - "<="
56
+ - - <=
48
57
  - !ruby/object:Gem::Version
49
58
  version: 1.0.0
50
- name: concurrent-ruby
51
59
  prerelease: false
52
60
  type: :runtime
61
+ - !ruby/object:Gem::Dependency
62
+ name: thread_safe
53
63
  version_requirements: !ruby/object:Gem::Requirement
54
64
  requirements:
55
- - - ">="
65
+ - - ~>
56
66
  - !ruby/object:Gem::Version
57
- version: 0.9.2
58
- - - "<="
59
- - !ruby/object:Gem::Version
60
- version: 1.0.0
61
- - !ruby/object:Gem::Dependency
67
+ version: 0.3.5
62
68
  requirement: !ruby/object:Gem::Requirement
63
69
  requirements:
64
- - - "~>"
70
+ - - ~>
65
71
  - !ruby/object:Gem::Version
66
72
  version: 0.3.5
67
- name: thread_safe
68
73
  prerelease: false
69
74
  type: :runtime
75
+ - !ruby/object:Gem::Dependency
76
+ name: logstash-codec-multiline
70
77
  version_requirements: !ruby/object:Gem::Requirement
71
78
  requirements:
72
- - - "~>"
79
+ - - ~>
73
80
  - !ruby/object:Gem::Version
74
- version: 0.3.5
75
- - !ruby/object:Gem::Dependency
81
+ version: 2.0.5
76
82
  requirement: !ruby/object:Gem::Requirement
77
83
  requirements:
78
- - - "~>"
84
+ - - ~>
79
85
  - !ruby/object:Gem::Version
80
86
  version: 2.0.5
81
- name: logstash-codec-multiline
82
87
  prerelease: false
83
88
  type: :runtime
89
+ - !ruby/object:Gem::Dependency
90
+ name: flores
84
91
  version_requirements: !ruby/object:Gem::Requirement
85
92
  requirements:
86
- - - "~>"
93
+ - - ~>
87
94
  - !ruby/object:Gem::Version
88
- version: 2.0.5
89
- - !ruby/object:Gem::Dependency
95
+ version: 0.0.6
90
96
  requirement: !ruby/object:Gem::Requirement
91
97
  requirements:
92
- - - "~>"
98
+ - - ~>
93
99
  - !ruby/object:Gem::Version
94
100
  version: 0.0.6
95
- name: flores
96
101
  prerelease: false
97
102
  type: :development
103
+ - !ruby/object:Gem::Dependency
104
+ name: rspec
98
105
  version_requirements: !ruby/object:Gem::Requirement
99
106
  requirements:
100
- - - "~>"
107
+ - - '>='
101
108
  - !ruby/object:Gem::Version
102
- version: 0.0.6
103
- - !ruby/object:Gem::Dependency
109
+ version: '0'
104
110
  requirement: !ruby/object:Gem::Requirement
105
111
  requirements:
106
- - - ">="
112
+ - - '>='
107
113
  - !ruby/object:Gem::Version
108
114
  version: '0'
109
- name: rspec
110
115
  prerelease: false
111
116
  type: :development
117
+ - !ruby/object:Gem::Dependency
118
+ name: stud
112
119
  version_requirements: !ruby/object:Gem::Requirement
113
120
  requirements:
114
- - - ">="
121
+ - - '>='
115
122
  - !ruby/object:Gem::Version
116
123
  version: '0'
117
- - !ruby/object:Gem::Dependency
118
124
  requirement: !ruby/object:Gem::Requirement
119
125
  requirements:
120
- - - ">="
126
+ - - '>='
121
127
  - !ruby/object:Gem::Version
122
128
  version: '0'
123
- name: stud
124
129
  prerelease: false
125
130
  type: :development
131
+ - !ruby/object:Gem::Dependency
132
+ name: pry
126
133
  version_requirements: !ruby/object:Gem::Requirement
127
134
  requirements:
128
- - - ">="
135
+ - - '>='
129
136
  - !ruby/object:Gem::Version
130
137
  version: '0'
131
- - !ruby/object:Gem::Dependency
132
138
  requirement: !ruby/object:Gem::Requirement
133
139
  requirements:
134
- - - ">="
140
+ - - '>='
135
141
  - !ruby/object:Gem::Version
136
142
  version: '0'
137
- name: pry
138
143
  prerelease: false
139
144
  type: :development
145
+ - !ruby/object:Gem::Dependency
146
+ name: rspec-wait
140
147
  version_requirements: !ruby/object:Gem::Requirement
141
148
  requirements:
142
- - - ">="
149
+ - - '>='
143
150
  - !ruby/object:Gem::Version
144
151
  version: '0'
145
- - !ruby/object:Gem::Dependency
146
152
  requirement: !ruby/object:Gem::Requirement
147
153
  requirements:
148
- - - ">="
154
+ - - '>='
149
155
  - !ruby/object:Gem::Version
150
156
  version: '0'
151
- name: rspec-wait
152
157
  prerelease: false
153
158
  type: :development
159
+ - !ruby/object:Gem::Dependency
160
+ name: logstash-devutils
154
161
  version_requirements: !ruby/object:Gem::Requirement
155
162
  requirements:
156
- - - ">="
163
+ - - ~>
157
164
  - !ruby/object:Gem::Version
158
- version: '0'
159
- - !ruby/object:Gem::Dependency
165
+ version: 0.0.18
160
166
  requirement: !ruby/object:Gem::Requirement
161
167
  requirements:
162
- - - "~>"
168
+ - - ~>
163
169
  - !ruby/object:Gem::Version
164
170
  version: 0.0.18
165
- name: logstash-devutils
166
171
  prerelease: false
167
172
  type: :development
173
+ - !ruby/object:Gem::Dependency
174
+ name: logstash-codec-json
168
175
  version_requirements: !ruby/object:Gem::Requirement
169
176
  requirements:
170
- - - "~>"
177
+ - - '>='
171
178
  - !ruby/object:Gem::Version
172
- version: 0.0.18
173
- - !ruby/object:Gem::Dependency
179
+ version: '0'
174
180
  requirement: !ruby/object:Gem::Requirement
175
181
  requirements:
176
- - - ">="
182
+ - - '>='
177
183
  - !ruby/object:Gem::Version
178
184
  version: '0'
179
- name: logstash-codec-json
180
185
  prerelease: false
181
186
  type: :development
187
+ - !ruby/object:Gem::Dependency
188
+ name: childprocess
182
189
  version_requirements: !ruby/object:Gem::Requirement
183
190
  requirements:
184
- - - ">="
191
+ - - '>='
185
192
  - !ruby/object:Gem::Version
186
193
  version: '0'
187
- - !ruby/object:Gem::Dependency
188
194
  requirement: !ruby/object:Gem::Requirement
189
195
  requirements:
190
- - - ">="
196
+ - - '>='
191
197
  - !ruby/object:Gem::Version
192
198
  version: '0'
193
- name: childprocess
194
199
  prerelease: false
195
200
  type: :development
196
- version_requirements: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - ">="
199
- - !ruby/object:Gem::Version
200
- version: '0'
201
201
  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
202
202
  email: info@elastic.co
203
203
  executables: []
@@ -257,12 +257,12 @@ require_paths:
257
257
  - lib
258
258
  required_ruby_version: !ruby/object:Gem::Requirement
259
259
  requirements:
260
- - - ">="
260
+ - - '>='
261
261
  - !ruby/object:Gem::Version
262
262
  version: '0'
263
263
  required_rubygems_version: !ruby/object:Gem::Requirement
264
264
  requirements:
265
- - - ">="
265
+ - - '>='
266
266
  - !ruby/object:Gem::Version
267
267
  version: '0'
268
268
  requirements: []