logstash-codec-avro 3.3.1-java → 3.4.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/docs/index.asciidoc +12 -0
- data/lib/logstash/codecs/avro.rb +19 -3
- data/logstash-codec-avro.gemspec +2 -2
- data/spec/codecs/avro_spec.rb +51 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58f5ee3b7dd49fc9d5ea8a85c8b91cd042e67027a6b80440b48f3c943f149397
|
4
|
+
data.tar.gz: f0321dffe64cc44165dd5ccfc95fb4d8b7cbcff561aa8f1a048f7c79f53881ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9af8121f74ead4621f3979b638125c209e6790248d81681fdeb060f886d0f84e79cbb560c6c009d1cc21c5e94120e484830dd26186d93a5726c08e2187ab744f
|
7
|
+
data.tar.gz: 13e6a4db21017088f70f062d054625547b728a633788fdd5478f13a81746e9f9f23840cc73140fa8b82617f827c9a746b586b5fca669db300a08ef0209b4b06d
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 3.4.1
|
2
|
+
- Fixes `(Errno::ENOENT) No such file or directory` error [#43](https://github.com/logstash-plugins/logstash-codec-avro/pull/43)
|
3
|
+
|
4
|
+
## 3.4.0
|
5
|
+
- Add `encoding` option to select the encoding of Avro payload, could be `binary` or `base64` [#39](https://github.com/logstash-plugins/logstash-codec-avro/pull/39)
|
6
|
+
|
1
7
|
## 3.3.1
|
2
8
|
- Pin avro gem to 1.10.x, as 1.11+ requires ruby 2.6+ [#37](https://github.com/logstash-plugins/logstash-codec-avro/pull/37)
|
3
9
|
|
data/docs/index.asciidoc
CHANGED
@@ -82,6 +82,7 @@ output {
|
|
82
82
|
|=======================================================================
|
83
83
|
|Setting |Input type|Required
|
84
84
|
| <<plugins-{type}s-{plugin}-ecs_compatibility>> | <<string,string>>|No
|
85
|
+
| <<plugins-{type}s-{plugin}-encoding>> | <<string,string>>, one of `["binary", "base64"]`|No
|
85
86
|
| <<plugins-{type}s-{plugin}-schema_uri>> |<<string,string>>|Yes
|
86
87
|
| <<plugins-{type}s-{plugin}-tag_on_failure>> |<<boolean,boolean>>|No
|
87
88
|
| <<plugins-{type}s-{plugin}-target>> |<<string,string>>|No
|
@@ -99,6 +100,17 @@ output {
|
|
99
100
|
|
100
101
|
Controls this plugin's compatibility with the {ecs-ref}[Elastic Common Schema (ECS)].
|
101
102
|
|
103
|
+
[id="plugins-{type}s-{plugin}-encoding"]
|
104
|
+
===== `encoding`
|
105
|
+
|
106
|
+
* Value can be any of: `binary`, `base64`
|
107
|
+
* Default value is `base64`
|
108
|
+
|
109
|
+
Set encoding for Avro's payload.
|
110
|
+
Use `base64` (default) to indicate that this codec sends or expects to receive base64-encoded bytes.
|
111
|
+
|
112
|
+
Set this option to `binary` to indicate that this codec sends or expects to receive binary Avro data.
|
113
|
+
|
102
114
|
|
103
115
|
[id="plugins-{type}s-{plugin}-schema_uri"]
|
104
116
|
===== `schema_uri`
|
data/lib/logstash/codecs/avro.rb
CHANGED
@@ -59,6 +59,14 @@ class LogStash::Codecs::Avro < LogStash::Codecs::Base
|
|
59
59
|
|
60
60
|
include LogStash::PluginMixins::EventSupport::EventFactoryAdapter
|
61
61
|
|
62
|
+
BINARY_ENCODING = "binary".freeze
|
63
|
+
BASE64_ENCODING = "base64".freeze
|
64
|
+
|
65
|
+
# Set encoding for Avro's payload.
|
66
|
+
# Use `base64` (default) encoding to convert the raw binary bytes to a `base64` encoded string.
|
67
|
+
# Set this option to `binary` to use the plain binary bytes.
|
68
|
+
config :encoding, :validate => [BINARY_ENCODING, BASE64_ENCODING], :default => BASE64_ENCODING
|
69
|
+
|
62
70
|
# schema path to fetch the schema from.
|
63
71
|
# This can be a 'http' or 'file' scheme URI
|
64
72
|
# example:
|
@@ -77,7 +85,7 @@ class LogStash::Codecs::Avro < LogStash::Codecs::Base
|
|
77
85
|
config :target, :validate => :field_reference
|
78
86
|
|
79
87
|
def open_and_read(uri_string)
|
80
|
-
open(uri_string)
|
88
|
+
URI.open(uri_string, &:read)
|
81
89
|
end
|
82
90
|
|
83
91
|
public
|
@@ -92,7 +100,11 @@ class LogStash::Codecs::Avro < LogStash::Codecs::Base
|
|
92
100
|
|
93
101
|
public
|
94
102
|
def decode(data)
|
95
|
-
|
103
|
+
if encoding == BASE64_ENCODING
|
104
|
+
datum = StringIO.new(Base64.strict_decode64(data)) rescue StringIO.new(data)
|
105
|
+
else
|
106
|
+
datum = StringIO.new(data)
|
107
|
+
end
|
96
108
|
decoder = Avro::IO::BinaryDecoder.new(datum)
|
97
109
|
datum_reader = Avro::IO::DatumReader.new(@schema)
|
98
110
|
event = targeted_event_factory.new_event(datum_reader.read(decoder))
|
@@ -113,6 +125,10 @@ class LogStash::Codecs::Avro < LogStash::Codecs::Base
|
|
113
125
|
buffer = StringIO.new
|
114
126
|
encoder = Avro::IO::BinaryEncoder.new(buffer)
|
115
127
|
dw.write(event.to_hash, encoder)
|
116
|
-
|
128
|
+
if encoding == BASE64_ENCODING
|
129
|
+
@on_event.call(event, Base64.strict_encode64(buffer.string))
|
130
|
+
else
|
131
|
+
@on_event.call(event, buffer.string)
|
132
|
+
end
|
117
133
|
end
|
118
134
|
end
|
data/logstash-codec-avro.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-codec-avro'
|
4
|
-
s.version = '3.
|
4
|
+
s.version = '3.4.1'
|
5
5
|
s.platform = 'java'
|
6
6
|
s.licenses = ['Apache-2.0']
|
7
7
|
s.summary = "Reads serialized Avro records as Logstash events"
|
8
8
|
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"
|
9
9
|
s.authors = ["Elastic"]
|
10
10
|
s.email = 'info@elastic.co'
|
11
|
-
s.homepage = "
|
11
|
+
s.homepage = "https://www.elastic.co/logstash"
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
|
14
14
|
# Files
|
data/spec/codecs/avro_spec.rb
CHANGED
@@ -55,6 +55,35 @@ describe LogStash::Codecs::Avro, :ecs_compatibility_support, :aggregate_failures
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
+
context "with binary encoding" do
|
59
|
+
let (:avro_config) { super().merge('encoding' => 'binary') }
|
60
|
+
|
61
|
+
it "should return an LogStash::Event from raw and base64 encoded avro data" do
|
62
|
+
schema = Avro::Schema.parse(avro_config['schema_uri'])
|
63
|
+
dw = Avro::IO::DatumWriter.new(schema)
|
64
|
+
buffer = StringIO.new
|
65
|
+
encoder = Avro::IO::BinaryEncoder.new(buffer)
|
66
|
+
dw.write(test_event.to_hash, encoder)
|
67
|
+
|
68
|
+
subject.decode(buffer.string) do |event|
|
69
|
+
expect(event).to be_a_kind_of(LogStash::Event)
|
70
|
+
expect(event.get("foo")).to eq(test_event.get("foo"))
|
71
|
+
expect(event.get("bar")).to eq(test_event.get("bar"))
|
72
|
+
expect(event.get('[event][original]')).to eq(buffer.string) if ecs_compatibility != :disabled
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should raise an error if base64 encoded data is provided" do
|
77
|
+
schema = Avro::Schema.parse(avro_config['schema_uri'])
|
78
|
+
dw = Avro::IO::DatumWriter.new(schema)
|
79
|
+
buffer = StringIO.new
|
80
|
+
encoder = Avro::IO::BinaryEncoder.new(buffer)
|
81
|
+
dw.write(test_event.to_hash, encoder)
|
82
|
+
|
83
|
+
expect {subject.decode(Base64.strict_encode64(buffer.string))}.to raise_error
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
58
87
|
context "#decode with tag_on_failure" do
|
59
88
|
let (:avro_config) {{ 'schema_uri' => '
|
60
89
|
{"type": "record", "name": "Test",
|
@@ -111,6 +140,28 @@ describe LogStash::Codecs::Avro, :ecs_compatibility_support, :aggregate_failures
|
|
111
140
|
insist {got_event}
|
112
141
|
end
|
113
142
|
|
143
|
+
context "with binary encoding" do
|
144
|
+
let (:avro_config) { super().merge('encoding' => 'binary') }
|
145
|
+
|
146
|
+
it "should return avro data from a LogStash::Event not base64 encoded" do
|
147
|
+
got_event = false
|
148
|
+
subject.on_event do |event, data|
|
149
|
+
schema = Avro::Schema.parse(avro_config['schema_uri'])
|
150
|
+
datum = StringIO.new(data)
|
151
|
+
decoder = Avro::IO::BinaryDecoder.new(datum)
|
152
|
+
datum_reader = Avro::IO::DatumReader.new(schema)
|
153
|
+
record = datum_reader.read(decoder)
|
154
|
+
|
155
|
+
expect(event).to be_a_kind_of(LogStash::Event)
|
156
|
+
expect(event.get("foo")).to eq(test_event.get("foo"))
|
157
|
+
expect(event.get("bar")).to eq(test_event.get("bar"))
|
158
|
+
got_event = true
|
159
|
+
end
|
160
|
+
subject.encode(test_event)
|
161
|
+
expect(got_event).to be true
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
114
165
|
context "binary data" do
|
115
166
|
|
116
167
|
let (:avro_config) {{ 'schema_uri' => '{"namespace": "com.systems.test.data",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-codec-avro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.4.1
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -133,7 +133,7 @@ files:
|
|
133
133
|
- lib/logstash/codecs/avro.rb
|
134
134
|
- logstash-codec-avro.gemspec
|
135
135
|
- spec/codecs/avro_spec.rb
|
136
|
-
homepage:
|
136
|
+
homepage: https://www.elastic.co/logstash
|
137
137
|
licenses:
|
138
138
|
- Apache-2.0
|
139
139
|
metadata:
|
@@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
154
|
- !ruby/object:Gem::Version
|
155
155
|
version: '0'
|
156
156
|
requirements: []
|
157
|
-
rubygems_version: 3.
|
157
|
+
rubygems_version: 3.2.33
|
158
158
|
signing_key:
|
159
159
|
specification_version: 4
|
160
160
|
summary: Reads serialized Avro records as Logstash events
|