logstash-codec-json_lines 2.0.5 → 2.1.0

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: 313c69ada5cae85d4921a4bb4d40966784a34eb4
4
- data.tar.gz: f6e4543df04605d602fd8df5bb296877ca792e43
3
+ metadata.gz: a1506140c8e501d6674a9240c5e0e943dbad0adc
4
+ data.tar.gz: 86a5df4679925793a96dd8d41093c2ca69b6dabc
5
5
  SHA512:
6
- metadata.gz: 9c6cfe1bbd4c7683077f2f8819211a0a9c78ae2a16e43d787c3155dd3ab8a9c6ca6f7b8c280d5f67159c73b3553590fbc47ca03b4c91d91c083370aab7021ce8
7
- data.tar.gz: 3aaa57ac5fa0adff86f2c1eeaef369904f7932eb16704c66d3da4563c3d0bb532c00be38c9fe6374826038acba83c19e40d482d0b20270b687e2f8e359019d1c
6
+ metadata.gz: c1f3ea023534e310a9b3215909118af6b0709f4e20ec34b450b556ac2c97f8f05ae830e46e4ada813ebb4d3b720d1fec3bce83351a9ec4eab2d307321c51084a
7
+ data.tar.gz: c97a1312cb5c1f89a0c8763e1da59f25ea2fa942a5da7008422920e51f85578ccc9981b3556bf1649d8699241b5f2b71cc5a36c310e77e2616b373ce9e483835
@@ -1,3 +1,6 @@
1
+ ## 2.1.0
2
+ - Backward compatible support for `Event#from_json` method https://github.com/logstash-plugins/logstash-codec-json_lines/pull/19
3
+
1
4
  ## 2.0.5
2
5
  - Directly use buftok to avoid indirection through the line codec https://github.com/logstash-plugins/logstash-codec-json_lines/pull/18
3
6
 
@@ -36,26 +36,34 @@ class LogStash::Codecs::JSONLines < LogStash::Codecs::Base
36
36
  @converter.logger = @logger
37
37
  end
38
38
 
39
- def decode(data)
39
+ def decode(data, &block)
40
40
  @buffer.extract(data).each do |line|
41
- yield guard(@converter.convert(line))
41
+ parse(@converter.convert(line), &block)
42
42
  end
43
- end # def decode
43
+ end
44
44
 
45
45
  def encode(event)
46
46
  # Tack on a @delimiter for now because previously most of logstash's JSON
47
47
  # outputs emitted one per line, and whitespace is OK in json.
48
48
  @on_event.call(event, "#{event.to_json}#{@delimiter}")
49
- end # def encode
49
+ end
50
50
 
51
51
  private
52
52
 
53
- def guard(data)
54
- begin
55
- LogStash::Event.new(LogStash::Json.load(data))
56
- rescue LogStash::Json::ParserError => e
57
- LogStash::Event.new("message" => data, "tags" => ["_jsonparsefailure"])
58
- end
53
+ # from_json_parse uses the Event#from_json method to deserialize and directly produce events
54
+ def from_json_parse(json, &block)
55
+ LogStash::Event.from_json(json).each { |event| yield event }
56
+ rescue LogStash::Json::ParserError
57
+ yield LogStash::Event.new("message" => json, "tags" => ["_jsonparsefailure"])
59
58
  end
60
59
 
60
+ # legacy_parse uses the LogStash::Json class to deserialize json
61
+ def legacy_parse(json, &block)
62
+ yield LogStash::Event.new(LogStash::Json.load(json))
63
+ rescue LogStash::Json::ParserError
64
+ yield LogStash::Event.new("message" => json, "tags" => ["_jsonparsefailure"])
65
+ end
66
+
67
+ alias_method :parse, LogStash::Event.respond_to?(:from_json) ? :from_json_parse : :legacy_parse
68
+
61
69
  end # class LogStash::Codecs::JSONLines
@@ -1,14 +1,14 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-codec-json_lines'
4
- s.version = '2.0.5'
4
+ s.version = '2.1.0'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "This codec will decode streamed JSON that is newline delimited."
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"
8
8
  s.authors = ["Elastic"]
9
9
  s.email = 'info@elastic.co'
10
10
  s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
11
- s.require_paths = ["lib"]
11
+ s.require_paths = ["lib"]
12
12
 
13
13
  # Files
14
14
  s.files = Dir['lib/**/*','spec/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
@@ -6,9 +6,10 @@ require "logstash/json"
6
6
  require "insist"
7
7
 
8
8
  describe LogStash::Codecs::JSONLines do
9
- subject do
10
- next LogStash::Codecs::JSONLines.new
11
- end
9
+
10
+ let(:codec_options) { {} }
11
+
12
+ shared_examples :codec do
12
13
 
13
14
  context "#decode" do
14
15
  it "should return an event from json data" do
@@ -37,9 +38,7 @@ describe LogStash::Codecs::JSONLines do
37
38
  context "when using custom delimiter" do
38
39
  let(:delimiter) { "|" }
39
40
  let(:line) { "{\"hey\":1}|{\"hey\":2}|{\"hey\":3}|" }
40
- subject do
41
- next LogStash::Codecs::JSONLines.new("delimiter" => delimiter)
42
- end
41
+ let(:codec_options) { { "delimiter" => delimiter } }
43
42
 
44
43
  it "should decode multiple lines separated by the delimiter" do
45
44
  result = []
@@ -122,9 +121,7 @@ describe LogStash::Codecs::JSONLines do
122
121
 
123
122
  context "when using custom delimiter" do
124
123
  let(:delimiter) { "|" }
125
- subject do
126
- next LogStash::Codecs::JSONLines.new("delimiter" => delimiter)
127
- end
124
+ let(:codec_options) { { "delimiter" => delimiter } }
128
125
 
129
126
  it "should decode multiple lines separated by the delimiter" do
130
127
  subject.on_event do |e, d|
@@ -170,4 +167,35 @@ describe LogStash::Codecs::JSONLines do
170
167
  expect(collector.last['field']).to eq('value2')
171
168
  end
172
169
  end
170
+
171
+ end
172
+
173
+ context "forcing legacy parsing" do
174
+ it_behaves_like :codec do
175
+ subject do
176
+ # register method is called in the constructor
177
+ LogStash::Codecs::JSONLines.new(codec_options)
178
+ end
179
+
180
+ before(:each) do
181
+ # stub codec parse method to force use of the legacy parser.
182
+ # this is very implementation specific but I am not sure how
183
+ # this can be tested otherwise.
184
+ allow(subject).to receive(:parse) do |line, &block|
185
+ subject.send(:legacy_parse, line, &block)
186
+ end
187
+ end
188
+ end
189
+ end
190
+
191
+ context "default parser choice" do
192
+ # here we cannot force the use of the Event#from_json since if this test is run in the
193
+ # legacy context (no Java Event) it will fail but if in the new context, it will be picked up.
194
+ it_behaves_like :codec do
195
+ subject do
196
+ # register method is called in the constructor
197
+ LogStash::Codecs::JSONLines.new(codec_options)
198
+ end
199
+ end
200
+ end
173
201
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-codec-json_lines
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-05 00:00:00.000000000 Z
11
+ date: 2016-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core