logstash-codec-fluent 3.0.2-java → 3.1.1-java

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: eb123960167e676111c8e007bec4f2afa4f8e3e8
4
- data.tar.gz: 6d38eda36c07509e76c5301e9e11c45400498027
3
+ metadata.gz: 2c9c31b9f410df8d1944039aa31ea73374aa0a82
4
+ data.tar.gz: 429c22a14929f5aa6d370fe7b4047435af915e01
5
5
  SHA512:
6
- metadata.gz: fa6495a51fb97482d79ae95375f507bc2e9430b45655ec205492d3a0ec3a1b9f7bde17d6c384b64e63d3e431ba941e2c8becbb4aa435b395f6ff9bbf0222ad1e
7
- data.tar.gz: 901c19d737da2a96e8eaa0ad5515b0f92e21520b6d75871a2777b55dff46b90886fa18cf670983afe1d91fc84051eb875065560b10476760c590526a6fcc0403
6
+ metadata.gz: 9486c210461b70b5aea183e803f8574b3e4f42279dda27a02577a6f6de65eb4b4973a765a936f8af7ee14c88514aa7b06cbe2371986b22152151de2857186190
7
+ data.tar.gz: df6c52150440881313b96a28bccd70fc87a9f618770dd61122dccf1509d617f0432acd0c55e0db63aae8977fade0aeb87f5ec6142ba521b682348cf654ffbf0c
@@ -28,25 +28,17 @@ require "logstash/util"
28
28
  class LogStash::Codecs::Fluent < LogStash::Codecs::Base
29
29
  config_name "fluent"
30
30
 
31
- public
32
31
  def register
33
32
  require "msgpack"
34
33
  @decoder = MessagePack::Unpacker.new
35
34
  end
36
35
 
37
- public
38
- def decode(data)
39
- @decoder.feed(data)
40
- @decoder.each do |tag, epochtime, map|
41
- event = LogStash::Event.new(map.merge(
42
- LogStash::Event::TIMESTAMP => LogStash::Timestamp.at(epochtime),
43
- "tags" => tag
44
- ))
45
- yield event
36
+ def decode(data, &block)
37
+ @decoder.feed_each(data) do |item|
38
+ decode_event(item, &block)
46
39
  end
47
40
  end # def decode
48
41
 
49
- public
50
42
  def encode(event)
51
43
  tag = event.get("tags") || "log"
52
44
  epochtime = event.timestamp.to_i
@@ -59,4 +51,57 @@ class LogStash::Codecs::Fluent < LogStash::Codecs::Base
59
51
  @on_event.call(event, MessagePack.pack([tag, epochtime, data.merge(LogStash::Event::TIMESTAMP => event.timestamp.to_iso8601)]))
60
52
  end # def encode
61
53
 
54
+ private
55
+
56
+ def decode_event(data, &block)
57
+ tag = data[0]
58
+ entries = data[1]
59
+
60
+ case entries
61
+ when String
62
+ # PackedForward
63
+ option = data[2]
64
+ compressed = (option && option['compressed'] == 'gzip')
65
+ if compressed
66
+ raise(LogStash::Error, "PackedForward with compression is not supported")
67
+ end
68
+
69
+ entries_decoder = MessagePack::Unpacker.new
70
+ entries_decoder.feed_each(entries) do |entry|
71
+ epochtime = entry[0]
72
+ map = entry[1]
73
+ event = LogStash::Event.new(map.merge(
74
+ LogStash::Event::TIMESTAMP => LogStash::Timestamp.at(epochtime),
75
+ "tags" => [ tag ]
76
+ ))
77
+ yield event
78
+ end
79
+ when Array
80
+ # Forward
81
+ entries.each do |entry|
82
+ epochtime = entry[0]
83
+ map = entry[1]
84
+ event = LogStash::Event.new(map.merge(
85
+ LogStash::Event::TIMESTAMP => LogStash::Timestamp.at(epochtime),
86
+ "tags" => [ tag ]
87
+ ))
88
+ yield event
89
+ end
90
+ when Fixnum
91
+ # Message
92
+ epochtime = entries
93
+ map = data[2]
94
+ event = LogStash::Event.new(map.merge(
95
+ LogStash::Event::TIMESTAMP => LogStash::Timestamp.at(epochtime),
96
+ "tags" => [ tag ]
97
+ ))
98
+ yield event
99
+ else
100
+ raise(LogStash::Error, "Unknown event type")
101
+ end
102
+ rescue StandardError => e
103
+ @logger.error("Fluent parse error, original data now in message field", :error => e, :data => data)
104
+ yield LogStash::Event.new("message" => data, "tags" => [ "_fluentparsefailure" ])
105
+ end
106
+
62
107
  end # class LogStash::Codecs::Fluent
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-codec-fluent'
4
- s.version = '3.0.2'
4
+ s.version = '3.1.1'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "This codec handles fluentd's msgpack schema."
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/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -29,6 +29,6 @@ Gem::Specification.new do |s|
29
29
  s.add_runtime_dependency 'msgpack'
30
30
  end
31
31
 
32
- s.add_development_dependency 'logstash-devutils'
32
+ s.add_development_dependency 'logstash-devutils', ">= 1.0.0"
33
33
  end
34
34
 
@@ -37,7 +37,60 @@ describe LogStash::Codecs::Fluent do
37
37
 
38
38
  it "should decode without errors" do
39
39
  subject.decode(message) do |event|
40
- expect(event.get("name")).to eq("foo")
40
+ expect(event.get("name")).to eq("foo")
41
+ end
42
+ end
43
+
44
+ end
45
+
46
+ describe "event decoding (buckets of events)" do
47
+
48
+ let(:tag) { "mytag" }
49
+ let(:epochtime) { event.timestamp.to_i }
50
+ let(:data) { LogStash::Util.normalize(event.to_hash) }
51
+ let(:message) do
52
+ MessagePack.pack([tag,
53
+ [
54
+ [epochtime, data.merge(LogStash::Event::TIMESTAMP => event.timestamp.to_iso8601)],
55
+ [epochtime, data.merge(LogStash::Event::TIMESTAMP => event.timestamp.to_iso8601)],
56
+ [epochtime, data.merge(LogStash::Event::TIMESTAMP => event.timestamp.to_iso8601)]
57
+ ]
58
+ ])
59
+ end
60
+
61
+ it "should decode without errors" do
62
+ count = 0
63
+
64
+ subject.decode(message) do |event|
65
+ expect(event.get("name")).to eq("foo")
66
+ count += 1
67
+ end
68
+
69
+ expect(count).to eq(3)
70
+ end
71
+
72
+ end
73
+
74
+ describe "event decoding (broken package)" do
75
+
76
+ let(:tag) { "mytag" }
77
+ let(:epochtime) { event.timestamp.to_s }
78
+ let(:data) { LogStash::Util.normalize(event.to_hash) }
79
+ let(:message) do
80
+ MessagePack.pack([tag,
81
+ epochtime, data.merge(LogStash::Event::TIMESTAMP => event.timestamp.to_iso8601)
82
+ ])
83
+ end
84
+
85
+ it "should decode with errors" do
86
+ subject.decode(message) do |event|
87
+ expect(event.get("name")).not_to eq("foo")
88
+ end
89
+ end
90
+
91
+ it "should inject a failure event" do
92
+ subject.decode(message) do |event|
93
+ expect(event.get("tags")).to include("_fluentparsefailure")
41
94
  end
42
95
  end
43
96
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-codec-fluent
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.1.1
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-14 00:00:00.000000000 Z
11
+ date: 2017-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -49,7 +49,7 @@ dependencies:
49
49
  requirements:
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: '0'
52
+ version: 1.0.0
53
53
  name: logstash-devutils
54
54
  prerelease: false
55
55
  type: :development
@@ -57,7 +57,7 @@ dependencies:
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: '0'
60
+ version: 1.0.0
61
61
  description: This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program
62
62
  email: info@elastic.co
63
63
  executables: []
@@ -96,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  version: '0'
97
97
  requirements: []
98
98
  rubyforge_project:
99
- rubygems_version: 2.6.3
99
+ rubygems_version: 2.4.8
100
100
  signing_key:
101
101
  specification_version: 4
102
102
  summary: This codec handles fluentd's msgpack schema.