logstash-codec-json 1.0.0 → 1.0.1

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: 301db44dac7fae7150d3192cedfc924aede32ecc
4
- data.tar.gz: 3655a1837f16ee061573a65e17582c87f6c72397
3
+ metadata.gz: 9295eea7f1cd9ae7339dbc10ef81cf23b6ce1d36
4
+ data.tar.gz: bcd279ad1a9df82528d42ba132dd15bc4b824996
5
5
  SHA512:
6
- metadata.gz: 654736689c2cffe29aa09dc2df93825f8c617a6ddac5dec1e14104de6b34b6ec06f868b0b7068a719c0abb6e8befcd1eb99dc5178d64ad1e356f3943fa393dda
7
- data.tar.gz: 77fc0dc02e502d549a32c8bacc77c03f34e9999f2f53281817a21e0c26f42a7182825bfbedee93ead67b4d1667d1d5503039d37f526be9c7231a025752eb863d
6
+ metadata.gz: 6de6306fad4704d91654c976b9cbde23b4028c72d9053b581fbe75f194f1c9e357ac12b50bf39e07956894e72cc7d33cffe58c102906bbb4ab88b5dc449e630b
7
+ data.tar.gz: c4bc2c043c6df6643835cfffcb952165218ada149fc5ed9dbd37333ef9aa185a5ea610d41dad0eb854d722cdcbeee720f6fc78a861131889ac70390df87bda14
data/CHANGELOG.md CHANGED
@@ -0,0 +1,2 @@
1
+ * 1.0.1
2
+ - Handle JSON arrays at source root by emitting multiple events
@@ -4,7 +4,9 @@ require "logstash/util/charset"
4
4
  require "logstash/json"
5
5
 
6
6
  # This codec may be used to decode (via inputs) and encode (via outputs)
7
- # full JSON messages. If you are streaming JSON messages delimited
7
+ # full JSON messages. If the data being sent is a JSON array at its root multiple events will be created (one per element).
8
+ #
9
+ # If you are streaming JSON messages delimited
8
10
  # by '\n' then see the `json_lines` codec.
9
11
  #
10
12
  # Encoding will result in a compact JSON representation (no line terminators or indentation)
@@ -37,7 +39,13 @@ class LogStash::Codecs::JSON < LogStash::Codecs::Base
37
39
  def decode(data)
38
40
  data = @converter.convert(data)
39
41
  begin
40
- yield LogStash::Event.new(LogStash::Json.load(data))
42
+ decoded = LogStash::Json.load(data)
43
+ if decoded.is_a?(Array)
44
+ decoded.each {|item| yield(LogStash::Event.new(item)) }
45
+ else
46
+ yield LogStash::Event.new(decoded)
47
+ end
48
+
41
49
  rescue LogStash::Json::ParserError => e
42
50
  @logger.info("JSON parse failure. Falling back to plain-text", :error => e, :data => data)
43
51
  yield LogStash::Event.new("message" => data, "tags" => ["_jsonparsefailure"])
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-codec-json'
4
- s.version = '1.0.0'
4
+ s.version = '1.0.1'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "This codec may be used to decode (via inputs) and encode (via outputs) full JSON messages"
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"
@@ -52,6 +52,34 @@ describe LogStash::Codecs::JSON do
52
52
  end
53
53
  end
54
54
 
55
+ context "processing JSON with an array root" do
56
+ let(:data) {
57
+ [
58
+ {"foo" => "bar"},
59
+ {"foo" => "baz"}
60
+ ]
61
+ }
62
+ let(:data_json) {
63
+ LogStash::Json.dump(data)
64
+ }
65
+
66
+ it "should yield multiple events" do
67
+ count = 0
68
+ subject.decode(data_json) do |event|
69
+ count += 1
70
+ end
71
+ expect(count).to eql(data.count)
72
+ end
73
+
74
+ it "should yield the correct objects" do
75
+ index = 0
76
+ subject.decode(data_json) do |event|
77
+ expect(event.to_hash).to include(data[index])
78
+ index += 1
79
+ end
80
+ end
81
+ end
82
+
55
83
  context "processing weird binary blobs" do
56
84
  it "falls back to plain text and doesn't crash (LOGSTASH-1595)" do
57
85
  decoded = false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-codec-json
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-24 00:00:00.000000000 Z
11
+ date: 2015-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core
@@ -83,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  version: '0'
84
84
  requirements: []
85
85
  rubyforge_project:
86
- rubygems_version: 2.2.2
86
+ rubygems_version: 2.1.9
87
87
  signing_key:
88
88
  specification_version: 4
89
89
  summary: This codec may be used to decode (via inputs) and encode (via outputs) full JSON messages