fluent-plugin-concat 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/fluent-plugin-concat.gemspec +1 -1
- data/lib/fluent/plugin/filter_concat.rb +48 -13
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b95595a2254d2e9f69c9962e78a80fc180a823d
|
4
|
+
data.tar.gz: f66346b750f623cf21619185a3ab786b486d02f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a16c79ae6dd8c57f033ffe9f82624987e9eeaf6a4ff291e30c1c73be72f38ddc862804bc67fd557da82d3496f9743de9bfa1c965fae0f60f6d32eaecd0199647
|
7
|
+
data.tar.gz: f4bd47413c823f36775d6c5ecc2a533dd801ece990b2a39da86b74308c873ad664b1478656bd48c8e8b9a194417223741f01128380eeff082710bcd5e17cb18a
|
data/README.md
CHANGED
@@ -41,6 +41,10 @@ This is exclusive with `multiline_start_regex`.
|
|
41
41
|
The regexp to match beginning of multiline.
|
42
42
|
This is exclusive with `n_lines.`
|
43
43
|
|
44
|
+
**multiline\_end\_regexp**
|
45
|
+
|
46
|
+
The regexp to match ending of multiline.
|
47
|
+
|
44
48
|
**stream\_identity\_key**
|
45
49
|
|
46
50
|
The key to determine which stream an event belongs to.
|
@@ -10,6 +10,8 @@ module Fluent
|
|
10
10
|
config_param :n_lines, :integer, default: nil
|
11
11
|
desc "The regexp to match beginning of multiline"
|
12
12
|
config_param :multiline_start_regexp, :string, default: nil
|
13
|
+
desc "The regexp to match ending of multiline"
|
14
|
+
config_param :multiline_end_regexp, :string, default: nil
|
13
15
|
desc "The key to determine which stream an event belongs to"
|
14
16
|
config_param :stream_identity_key, :string, default: nil
|
15
17
|
|
@@ -34,16 +36,24 @@ module Fluent
|
|
34
36
|
when @n_lines
|
35
37
|
@mode = :line
|
36
38
|
when @multiline_start_regexp
|
37
|
-
@multiline_start_regexp = Regexp.compile(@multiline_start_regexp[1..-2])
|
38
39
|
@mode = :regexp
|
40
|
+
@multiline_start_regexp = Regexp.compile(@multiline_start_regexp[1..-2])
|
41
|
+
if @multiline_end_regexp
|
42
|
+
@multiline_end_regexp = Regexp.compile(@multiline_end_regexp[1..-2])
|
43
|
+
end
|
39
44
|
end
|
40
45
|
end
|
41
46
|
|
47
|
+
def shutdown
|
48
|
+
super
|
49
|
+
flush_all_buffer
|
50
|
+
end
|
51
|
+
|
42
52
|
def filter_stream(tag, es)
|
43
53
|
new_es = MultiEventStream.new
|
44
54
|
es.each do |time, record|
|
45
55
|
begin
|
46
|
-
new_record = process(record)
|
56
|
+
new_record = process(tag, time, record)
|
47
57
|
new_es.add(time, record.merge(new_record)) if new_record
|
48
58
|
rescue => e
|
49
59
|
router.emit_error_event(tag, time, record, e)
|
@@ -54,7 +64,7 @@ module Fluent
|
|
54
64
|
|
55
65
|
private
|
56
66
|
|
57
|
-
def process(record)
|
67
|
+
def process(tag, time, record)
|
58
68
|
if @stream_identity_key
|
59
69
|
stream_identity = record[@stream_identity_key]
|
60
70
|
else
|
@@ -62,19 +72,23 @@ module Fluent
|
|
62
72
|
end
|
63
73
|
case @mode
|
64
74
|
when :line
|
65
|
-
@buffer[stream_identity] << record
|
66
|
-
if @
|
75
|
+
@buffer[stream_identity] << [tag, time, record]
|
76
|
+
if @buffer[stream_identity].size >= @n_lines
|
67
77
|
return flush_buffer(stream_identity)
|
68
78
|
end
|
69
79
|
when :regexp
|
70
|
-
|
80
|
+
case
|
81
|
+
when firstline?(record[@key])
|
71
82
|
if @buffer[stream_identity].empty?
|
72
|
-
@buffer[stream_identity] << record
|
83
|
+
@buffer[stream_identity] << [tag, time, record]
|
73
84
|
else
|
74
|
-
return flush_buffer(stream_identity, record
|
85
|
+
return flush_buffer(stream_identity, [tag, time, record])
|
75
86
|
end
|
87
|
+
when lastline?(record[@key])
|
88
|
+
@buffer[stream_identity] << [tag, time, record]
|
89
|
+
return flush_buffer(stream_identity)
|
76
90
|
else
|
77
|
-
@buffer[stream_identity] << record
|
91
|
+
@buffer[stream_identity] << [tag, time, record]
|
78
92
|
end
|
79
93
|
end
|
80
94
|
nil
|
@@ -84,12 +98,33 @@ module Fluent
|
|
84
98
|
!!@multiline_start_regexp.match(text)
|
85
99
|
end
|
86
100
|
|
87
|
-
def
|
88
|
-
|
89
|
-
|
101
|
+
def lastline?(text)
|
102
|
+
@multiline_end_regexp && !!@multiline_end_regexp.match(text)
|
103
|
+
end
|
104
|
+
|
105
|
+
def flush_buffer(stream_identity, new_element = nil)
|
106
|
+
lines = @buffer[stream_identity].map{|_tag, _time, record| record[@key] }
|
107
|
+
new_record = {
|
108
|
+
@key => lines.join(@separator)
|
109
|
+
}
|
90
110
|
@buffer[stream_identity] = []
|
91
|
-
@buffer[stream_identity] <<
|
111
|
+
@buffer[stream_identity] << new_element if new_element
|
92
112
|
new_record
|
93
113
|
end
|
114
|
+
|
115
|
+
def flush_all_buffer
|
116
|
+
@buffer.each do |stream_identity, elements|
|
117
|
+
next if elements.empty?
|
118
|
+
es = MultiEventStream.new
|
119
|
+
lines = elements.map{|_tag, _time, record| record[@key] }
|
120
|
+
new_record = {
|
121
|
+
@key => lines.join(@separator)
|
122
|
+
}
|
123
|
+
tag, time, record = elements.last
|
124
|
+
es.add(time, record.merge(new_record))
|
125
|
+
router.emit_stream(tag, es)
|
126
|
+
end
|
127
|
+
@buffer.clear
|
128
|
+
end
|
94
129
|
end
|
95
130
|
end
|