logstash-input-beats 2.2.7 → 2.2.8

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: 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: []