fluent-plugin-concat 0.2.1 → 0.3.0
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/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
|