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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab2756baf7697fc5f22d31a25bc1d93206dbc7e3
4
- data.tar.gz: de0b4dfce0995316546e180ad3454453c2af476f
3
+ metadata.gz: 7b95595a2254d2e9f69c9962e78a80fc180a823d
4
+ data.tar.gz: f66346b750f623cf21619185a3ab786b486d02f3
5
5
  SHA512:
6
- metadata.gz: a5e9dfa61b84279df61639b4698fb0a762301dc427c2ee95a6d314a7e6804fdc799a3c35cd7988781c8ab1c24607b2617bac18976c74634fa8f3a31d8f669581
7
- data.tar.gz: 05b1ba5590e8581db137768bc91bcc34f9b8358d4741758d8283c26d1b7b40b0d6b0b33ad4a218977dc50a47eb1cd6be6e8c76408f3e33afcd99cf92352c0c4e
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.
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fluent-plugin-concat"
7
- spec.version = "0.2.1"
7
+ spec.version = "0.3.0"
8
8
  spec.authors = ["Kenji Okimoto"]
9
9
  spec.email = ["okimoto@clear-code.com"]
10
10
 
@@ -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[@key]
66
- if @n_lines && @buffer[stream_identity].size >= @n_lines
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
- if firstline?(record[@key])
80
+ case
81
+ when firstline?(record[@key])
71
82
  if @buffer[stream_identity].empty?
72
- @buffer[stream_identity] << record[@key]
83
+ @buffer[stream_identity] << [tag, time, record]
73
84
  else
74
- return flush_buffer(stream_identity, record[@key])
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[@key]
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 flush_buffer(stream_identity, new_message = nil)
88
- new_record = {}
89
- new_record[@key] = @buffer[stream_identity].join(@separator)
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] << new_message if new_message
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-concat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenji Okimoto