logstash-codec-multiline 2.0.5 → 2.0.6
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 +3 -0
- data/CONTRIBUTORS +1 -0
- data/logstash-codec-multiline.gemspec +1 -1
- data/spec/codecs/auto_flush_spec.rb +1 -1
- data/spec/codecs/identity_map_codec_spec.rb +4 -4
- data/spec/codecs/multiline_spec.rb +4 -4
- data/spec/supports/helpers.rb +73 -71
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb29402e4fc64969af12f38713f553e18dc57418
|
4
|
+
data.tar.gz: f8a9fb89870cc25e7a252b11c47e7c5e5dc94eb7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89e537074ac1b46b495e0ae0a926abed3a9609ef906f519e70b3b68753b4ecdebb6e4ef04cd8d926a535fc65ac2335677b85cba500d5061dbbe9e8c68364aaca
|
7
|
+
data.tar.gz: 76e16b208297f0bbeb47bb8f00daabd8b89017d7a4181478e06e72b19bfa73c99e7065ad6cc9e229786d772298c7eb0eea936f68f953aa3cbdb62ce42f12a690
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
## 2.0.6
|
2
|
+
- Isolate spec helper classes in their own namespace.
|
3
|
+
|
1
4
|
## 2.0.5
|
2
5
|
- Add auto_flush config option, with no default. If not set, no auto_flush is done.
|
3
6
|
- Add evict method to identity_map_codec that allows for an input, when done with an identity, to auto_flush and remove the identity from the map.
|
data/CONTRIBUTORS
CHANGED
@@ -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
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-codec-multiline'
|
4
|
-
s.version = '2.0.
|
4
|
+
s.version = '2.0.6'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "The multiline codec will collapse multiline messages and merge them into a single event."
|
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"
|
@@ -4,7 +4,7 @@ require "logstash/codecs/multiline"
|
|
4
4
|
require_relative "../supports/helpers.rb"
|
5
5
|
|
6
6
|
describe "AutoFlush and AutoFlushUnset" do
|
7
|
-
let(:flushable) { AutoFlushTracer.new }
|
7
|
+
let(:flushable) { Mlc::AutoFlushTracer.new }
|
8
8
|
let(:flush_wait) { 0.1 }
|
9
9
|
|
10
10
|
describe LogStash::Codecs::AutoFlush do
|
@@ -5,7 +5,7 @@ require "logstash/codecs/multiline"
|
|
5
5
|
require_relative "../supports/helpers.rb"
|
6
6
|
|
7
7
|
describe LogStash::Codecs::IdentityMapCodec do
|
8
|
-
let(:codec) { IdentityMapCodecTracer.new }
|
8
|
+
let(:codec) { Mlc::IdentityMapCodecTracer.new }
|
9
9
|
let(:logger) { codec.logger }
|
10
10
|
let(:demuxer) { described_class.new(codec) }
|
11
11
|
let(:stream1) { "stream-a" }
|
@@ -198,15 +198,15 @@ describe LogStash::Codecs::IdentityMapCodec do
|
|
198
198
|
end
|
199
199
|
|
200
200
|
describe "observer/listener based processing" do
|
201
|
-
let(:listener) { LineListener }
|
201
|
+
let(:listener) { Mlc::LineListener }
|
202
202
|
let(:queue) { [] }
|
203
203
|
let(:identity) { "stream1" }
|
204
204
|
let(:config) { {"pattern" => "^\\s", "what" => "previous"} }
|
205
|
-
let(:mlc) { MultilineRspec.new(config).tap {|c| c.register } }
|
205
|
+
let(:mlc) { Mlc::MultilineRspec.new(config).tap {|c| c.register } }
|
206
206
|
let(:imc) { described_class.new(mlc) }
|
207
207
|
|
208
208
|
before do
|
209
|
-
listener = LineListener.new(queue, imc, identity)
|
209
|
+
listener = Mlc::LineListener.new(queue, imc, identity)
|
210
210
|
listener.accept("foo")
|
211
211
|
end
|
212
212
|
|
@@ -217,14 +217,14 @@ describe LogStash::Codecs::Multiline do
|
|
217
217
|
|
218
218
|
describe "auto flushing" do
|
219
219
|
let(:config) { {} }
|
220
|
-
let(:codec) { MultilineRspec.new(config).tap {|c| c.register} }
|
220
|
+
let(:codec) { Mlc::MultilineRspec.new(config).tap {|c| c.register} }
|
221
221
|
let(:events) { [] }
|
222
222
|
let(:lines) do
|
223
223
|
{ "en.log" => ["hello world", " second line", " third line"],
|
224
224
|
"fr.log" => ["Salut le Monde", " deuxième ligne", " troisième ligne"],
|
225
225
|
"de.log" => ["Hallo Welt"] }
|
226
226
|
end
|
227
|
-
let(:listener_class) { LineListener }
|
227
|
+
let(:listener_class) { Mlc::LineListener }
|
228
228
|
let(:auto_flush_interval) { 0.5 }
|
229
229
|
|
230
230
|
let(:line_producer) do
|
@@ -249,12 +249,12 @@ describe LogStash::Codecs::Multiline do
|
|
249
249
|
|
250
250
|
context "when the auto_flush raises an exception" do
|
251
251
|
let(:errmsg) { "OMG, Daleks!" }
|
252
|
-
let(:listener_class) { LineErrorListener }
|
252
|
+
let(:listener_class) { Mlc::LineErrorListener }
|
253
253
|
|
254
254
|
it "does not build any events, logs an error and the buffer data remains" do
|
255
255
|
config.update("pattern" => "^\\s", "what" => "previous",
|
256
256
|
"auto_flush_interval" => auto_flush_interval)
|
257
|
-
codec.logger = MultilineLogTracer.new
|
257
|
+
codec.logger = Mlc::MultilineLogTracer.new
|
258
258
|
line_producer.call("en.log")
|
259
259
|
sleep(auto_flush_interval + 0.1)
|
260
260
|
msg, args = codec.logger.trace_for(:error)
|
data/spec/supports/helpers.rb
CHANGED
@@ -13,95 +13,97 @@ def decode_events
|
|
13
13
|
events
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
module Mlc
|
17
|
+
class LineListener
|
18
|
+
attr_reader :data, :path, :queue, :codec
|
19
|
+
# use attr_reader to define noop methods of Listener API
|
20
|
+
attr_reader :deleted, :created, :error, :eof #, :line
|
21
|
+
|
22
|
+
def initialize(queue, codec, path = '')
|
23
|
+
# store state from upstream
|
24
|
+
@queue = queue
|
25
|
+
@codec = codec
|
26
|
+
@path = path
|
27
|
+
end
|
28
|
+
|
29
|
+
# receives a line from some upstream source
|
30
|
+
# and sends it downstream
|
31
|
+
def accept(data)
|
32
|
+
@codec.accept dup_adding_state(data)
|
33
|
+
end
|
34
|
+
|
35
|
+
def process_event(event)
|
36
|
+
event["path"] = path
|
37
|
+
@queue << event
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_state(data)
|
41
|
+
@data = data
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# dup and add state for downstream
|
48
|
+
def dup_adding_state(line)
|
49
|
+
self.class.new(queue, codec, path).add_state(line)
|
50
|
+
end
|
26
51
|
end
|
27
52
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
53
|
+
class LineErrorListener < LineListener
|
54
|
+
def process_event(event)
|
55
|
+
raise StandardError.new("OMG, Daleks!")
|
56
|
+
end
|
32
57
|
end
|
33
58
|
|
34
|
-
|
35
|
-
|
36
|
-
|
59
|
+
class MultilineRspec < LogStash::Codecs::Multiline
|
60
|
+
def internal_buffer
|
61
|
+
@buffer
|
62
|
+
end
|
63
|
+
def buffer_size
|
64
|
+
@buffer.size
|
65
|
+
end
|
37
66
|
end
|
38
67
|
|
39
|
-
|
40
|
-
@
|
41
|
-
self
|
42
|
-
end
|
68
|
+
class TracerBase
|
69
|
+
def initialize() @tracer = []; end
|
43
70
|
|
44
|
-
|
71
|
+
def trace_for(symbol)
|
72
|
+
params = @tracer.assoc(symbol)
|
73
|
+
params.nil? ? false : params.last
|
74
|
+
end
|
45
75
|
|
46
|
-
|
47
|
-
|
48
|
-
|
76
|
+
def clear()
|
77
|
+
@tracer.clear()
|
78
|
+
end
|
49
79
|
end
|
50
|
-
end
|
51
80
|
|
52
|
-
class
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
81
|
+
class MultilineLogTracer < TracerBase
|
82
|
+
def warn(*args) @tracer.push [:warn, args]; end
|
83
|
+
def error(*args) @tracer.push [:error, args]; end
|
84
|
+
def debug(*args) @tracer.push [:debug, args]; end
|
85
|
+
def info(*args) @tracer.push [:info, args]; end
|
57
86
|
|
58
|
-
|
59
|
-
|
60
|
-
|
87
|
+
def info?() true; end
|
88
|
+
def debug?() true; end
|
89
|
+
def warn?() true; end
|
90
|
+
def error?() true; end
|
61
91
|
end
|
62
|
-
def buffer_size
|
63
|
-
@buffer.size
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
class TracerBase
|
68
|
-
def initialize() @tracer = []; end
|
69
92
|
|
70
|
-
|
71
|
-
|
72
|
-
params.nil? ? false : params.last
|
93
|
+
class AutoFlushTracer < TracerBase
|
94
|
+
def auto_flush() @tracer.push [:auto_flush, true]; end
|
73
95
|
end
|
74
96
|
|
75
|
-
|
76
|
-
|
97
|
+
class IdentityMapCodecTracer < TracerBase
|
98
|
+
def clone() self.class.new; end
|
99
|
+
def decode(data) @tracer.push [:decode, data]; end
|
100
|
+
def encode(event) @tracer.push [:encode, event]; end
|
101
|
+
def flush(&block) @tracer.push [:flush, block.call]; end
|
102
|
+
def close() @tracer.push [:close, true]; end
|
103
|
+
def logger() @logger ||= MultilineLogTracer.new; end
|
77
104
|
end
|
78
105
|
end
|
79
106
|
|
80
|
-
class MultilineLogTracer < TracerBase
|
81
|
-
def warn(*args) @tracer.push [:warn, args]; end
|
82
|
-
def error(*args) @tracer.push [:error, args]; end
|
83
|
-
def debug(*args) @tracer.push [:debug, args]; end
|
84
|
-
def info(*args) @tracer.push [:info, args]; end
|
85
|
-
|
86
|
-
def info?() true; end
|
87
|
-
def debug?() true; end
|
88
|
-
def warn?() true; end
|
89
|
-
def error?() true; end
|
90
|
-
end
|
91
|
-
|
92
|
-
class AutoFlushTracer < TracerBase
|
93
|
-
def auto_flush() @tracer.push [:auto_flush, true]; end
|
94
|
-
end
|
95
|
-
|
96
|
-
class IdentityMapCodecTracer < TracerBase
|
97
|
-
def clone() self.class.new; end
|
98
|
-
def decode(data) @tracer.push [:decode, data]; end
|
99
|
-
def encode(event) @tracer.push [:encode, event]; end
|
100
|
-
def flush(&block) @tracer.push [:flush, block.call]; end
|
101
|
-
def close() @tracer.push [:close, true]; end
|
102
|
-
def logger() @logger ||= MultilineLogTracer.new; end
|
103
|
-
end
|
104
|
-
|
105
107
|
RSpec::Matchers.define(:have_an_empty_buffer) do
|
106
108
|
match do |actual|
|
107
109
|
actual.buffer_size.zero?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-codec-multiline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logstash-core
|