fluent-plugin-eval-filter 0.0.3 → 0.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6765bfbe982ee8ab3f79203bc16c41905c367373
4
- data.tar.gz: cc5f7b09aae48c79710766f835fe5cf419800209
3
+ metadata.gz: d49f815a9d7d68a2b0fdf1acee1863d649329984
4
+ data.tar.gz: a0f8bebad7623fd6404cd01b5e15bcdd55f7ae16
5
5
  SHA512:
6
- metadata.gz: 05b3f8c2ea08ec5b9aa6865ce8fcee0bb1449d1ffbcbbfbc75d63127396e6b673cda42e53009a804ca47bc50681d61fdc61ca240debbf78df520bac6b3cabbdc
7
- data.tar.gz: 70701cb426b287d3494faf4803a0b50306387f8a2a768de03b17e4cea34d28c5d2bc4d44273f695387305487d8469e49bc737eb5d79a288f52dde1b45ec1d7fc
6
+ metadata.gz: b64c70845fecf3419042615aa3caab263acb2e643555b45e56b5be424ac9316c263f713107559a1068f20235c5afece00aac702ac21b4188d07319553dc3ed14
7
+ data.tar.gz: abcf947942f1aa1a30a6fb8c0daa9dee18288c91ee1e33f2326592573b39f11efb16a80726a07dcdfc06b5ba03591393ae9f9e326faa24bf913e0907eb7194f2
@@ -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-eval-filter"
7
- spec.version = "0.0.3"
7
+ spec.version = "0.0.4"
8
8
  spec.authors = ["Yuzuki Masaru"]
9
9
  spec.email = ["ephemeralsnow@gmail.com"]
10
10
  spec.description = %q{Fluentd Output eval filter plugin.}
@@ -39,8 +39,10 @@ class Fluent::EvalFilterOutput < Fluent::Output
39
39
  def emit(tag, es, chain)
40
40
  tag = handle_tag(tag)
41
41
  es.each do |time, record|
42
- result = filter_record(tag, time, record)
43
- Fluent::Engine.emit(*result) if result
42
+ results = filter_record(tag, time, record)
43
+ results.each do |result|
44
+ Fluent::Engine.emit(*result)
45
+ end
44
46
  end
45
47
  chain.next
46
48
  end
@@ -54,12 +56,16 @@ class Fluent::EvalFilterOutput < Fluent::Output
54
56
  end
55
57
 
56
58
  def filter_record(tag, time, record)
59
+ results = []
57
60
  @filters.each do |filter|
58
- filter_result = filter.call(tag, time, record)
59
- result = create_result(tag, time, record, filter_result) if filter_result
60
- return result if result
61
+ filter_results = filter.call(tag, time, record)
62
+ filter_results = [filter_results] unless filter_results.instance_of?(Enumerator)
63
+ filter_results.each do |filter_result|
64
+ result = create_result(tag, time, record, filter_result) if filter_result
65
+ results << result if result
66
+ end
61
67
  end
62
- nil
68
+ results
63
69
  end
64
70
 
65
71
  def create_result(tag, time, record, result)
@@ -184,4 +184,116 @@ class EvalFilterTest < Test::Unit::TestCase
184
184
  assert_equal "test.#{hostname}", emits[0][0]
185
185
  end
186
186
 
187
+ def test_amplify_tag_filter
188
+ d = create_driver(%[
189
+ filter1 (1..3).map { |n| tag + n.to_s }.to_enum
190
+ ])
191
+
192
+ d.run { d.emit({}) }
193
+
194
+ emits = d.emits
195
+ assert_equal 3, emits.size
196
+ p emits[0]
197
+ assert_equal "test1", emits[0][0]
198
+ p emits[1]
199
+ assert_equal "test2", emits[1][0]
200
+ p emits[2]
201
+ assert_equal "test3", emits[2][0]
202
+ end
203
+
204
+ def test_amplify_time_filter
205
+ d = create_driver(%[
206
+ filter1 (1..3).map { |n| time + n }.to_enum
207
+ ])
208
+
209
+ d.run { d.emit({}) }
210
+
211
+ emits = d.emits
212
+ assert_equal 3, emits.size
213
+ p emits[0]
214
+ assert emits[0][1] > 0
215
+ p emits[1]
216
+ assert_equal emits[0][1] + 1, emits[1][1]
217
+ p emits[2]
218
+ assert_equal emits[1][1] + 1, emits[2][1]
219
+ end
220
+
221
+ def test_amplify_record_filter
222
+ d = create_driver(%[
223
+ filter1 (1..3).map { |n| record.merge({'n' => n}) }.to_enum
224
+ ])
225
+
226
+ d.run { d.emit({'key' => 'value'}) }
227
+
228
+ emits = d.emits
229
+ assert_equal 3, emits.size
230
+ p emits[0]
231
+ assert_equal 2, emits[0][2].size
232
+ assert_equal true, emits[0][2].key?('key')
233
+ assert_equal 'value', emits[0][2]['key']
234
+ assert_equal true, emits[0][2].key?('n')
235
+ assert_equal 1, emits[0][2]['n']
236
+ p emits[1]
237
+ assert_equal 2, emits[1][2].size
238
+ assert_equal true, emits[1][2].key?('key')
239
+ assert_equal 'value', emits[1][2]['key']
240
+ assert_equal true, emits[1][2].key?('n')
241
+ assert_equal 2, emits[1][2]['n']
242
+ p emits[2]
243
+ assert_equal 2, emits[2][2].size
244
+ assert_equal true, emits[2][2].key?('key')
245
+ assert_equal 'value', emits[2][2]['key']
246
+ assert_equal true, emits[2][2].key?('n')
247
+ assert_equal 3, emits[2][2]['n']
248
+ end
249
+
250
+ def test_split_record_filter
251
+ d = create_driver(%[
252
+ filter1 record.map { |key, value| [[tag, key].join('.'), {'key' => value}] }.to_enum
253
+ ])
254
+
255
+ d.run { d.emit({'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3'}) }
256
+
257
+ emits = d.emits
258
+ assert_equal 3, emits.size
259
+ p emits[0]
260
+ assert_equal 'test.key1', emits[0][0]
261
+ assert_equal 1, emits[0][2].size
262
+ assert_equal true, emits[0][2].key?('key')
263
+ assert_equal 'value1', emits[0][2]['key']
264
+ p emits[1]
265
+ assert_equal 'test.key2', emits[1][0]
266
+ assert_equal 1, emits[1][2].size
267
+ assert_equal true, emits[1][2].key?('key')
268
+ assert_equal 'value2', emits[1][2]['key']
269
+ p emits[2]
270
+ assert_equal 'test.key3', emits[2][0]
271
+ assert_equal 1, emits[2][2].size
272
+ assert_equal true, emits[2][2].key?('key')
273
+ assert_equal 'value3', emits[2][2]['key']
274
+ end
275
+
276
+ def test_split_array_in_record_filter
277
+ d = create_driver(%[
278
+ filter1 record['array'].map { |v| {'value' => v} }.to_enum
279
+ ])
280
+
281
+ d.run { d.emit({'array' => ['test1', 'test2', 'test3']}) }
282
+
283
+ emits = d.emits
284
+ assert_equal 3, emits.size
285
+ p emits[0]
286
+ assert_equal 1, emits[0][2].size
287
+ assert_equal true, emits[0][2].key?('value')
288
+ assert_equal 'test1', emits[0][2]['value']
289
+ p emits[1]
290
+ assert_equal 1, emits[1][2].size
291
+ assert_equal true, emits[1][2].key?('value')
292
+ assert_equal 'test2', emits[1][2]['value']
293
+ p emits[2]
294
+ assert_equal 1, emits[2][2].size
295
+ assert_equal true, emits[2][2].key?('value')
296
+ assert_equal 'test3', emits[2][2]['value']
297
+ end
298
+
187
299
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-eval-filter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuzuki Masaru
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-23 00:00:00.000000000 Z
11
+ date: 2014-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd