fluentd 0.14.0 → 0.14.1

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.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/example/copy_roundrobin.conf +39 -0
  3. data/example/filter_stdout.conf +5 -5
  4. data/example/in_forward.conf +2 -2
  5. data/example/in_http.conf +2 -2
  6. data/example/in_syslog.conf +2 -2
  7. data/example/in_tail.conf +2 -2
  8. data/example/in_tcp.conf +2 -2
  9. data/example/in_udp.conf +2 -2
  10. data/example/out_buffered_null.conf +32 -0
  11. data/example/out_copy.conf +4 -4
  12. data/example/out_file.conf +2 -2
  13. data/example/out_forward.conf +2 -2
  14. data/example/v0_12_filter.conf +8 -8
  15. data/fluentd.gemspec +1 -1
  16. data/lib/fluent/command/fluentd.rb +6 -1
  17. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  18. data/lib/fluent/compat/input.rb +1 -0
  19. data/lib/fluent/compat/output.rb +1 -0
  20. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  21. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  22. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  23. data/lib/fluent/compat/type_converter.rb +90 -0
  24. data/lib/fluent/config/configure_proxy.rb +24 -4
  25. data/lib/fluent/config/dsl.rb +18 -1
  26. data/lib/fluent/config/v1_parser.rb +3 -2
  27. data/lib/fluent/configurable.rb +1 -1
  28. data/lib/fluent/event.rb +37 -9
  29. data/lib/fluent/mixin.rb +12 -286
  30. data/lib/fluent/plugin/buffer.rb +2 -2
  31. data/lib/fluent/plugin/in_dummy.rb +5 -1
  32. data/lib/fluent/plugin/in_gc_stat.rb +7 -37
  33. data/lib/fluent/plugin/in_http.rb +2 -0
  34. data/lib/fluent/plugin/{in_stream.rb → in_unix.rb} +0 -0
  35. data/lib/fluent/plugin/out_buffered_stdout.rb +60 -0
  36. data/lib/fluent/plugin/out_copy.rb +8 -51
  37. data/lib/fluent/plugin/out_null.rb +5 -5
  38. data/lib/fluent/plugin/out_relabel.rb +5 -5
  39. data/lib/fluent/plugin/out_roundrobin.rb +13 -40
  40. data/lib/fluent/plugin/output.rb +9 -0
  41. data/lib/fluent/plugin_helper.rb +2 -0
  42. data/lib/fluent/plugin_helper/formatter.rb +138 -0
  43. data/lib/fluent/plugin_helper/inject.rb +112 -0
  44. data/lib/fluent/plugin_helper/parser.rb +138 -0
  45. data/lib/fluent/plugin_helper/storage.rb +64 -50
  46. data/lib/fluent/process.rb +6 -1
  47. data/lib/fluent/registry.rb +1 -1
  48. data/lib/fluent/supervisor.rb +20 -2
  49. data/lib/fluent/test.rb +30 -5
  50. data/lib/fluent/test/base.rb +2 -66
  51. data/lib/fluent/test/driver/base.rb +3 -0
  52. data/lib/fluent/test/driver/base_owned.rb +106 -0
  53. data/lib/fluent/test/driver/formatter.rb +30 -0
  54. data/lib/fluent/test/driver/multi_output.rb +52 -0
  55. data/lib/fluent/test/driver/owner.rb +32 -0
  56. data/lib/fluent/test/driver/parser.rb +30 -0
  57. data/lib/fluent/test/helpers.rb +54 -0
  58. data/lib/fluent/test/log.rb +73 -0
  59. data/lib/fluent/time.rb +71 -0
  60. data/lib/fluent/version.rb +1 -1
  61. data/test/compat/test_parser.rb +82 -0
  62. data/test/config/test_configure_proxy.rb +15 -0
  63. data/test/config/test_dsl.rb +180 -2
  64. data/test/helper.rb +2 -24
  65. data/test/plugin/test_in_gc_stat.rb +6 -6
  66. data/test/plugin/test_in_http.rb +49 -32
  67. data/test/plugin/{test_in_stream.rb → test_in_unix.rb} +1 -1
  68. data/test/plugin/test_out_buffered_stdout.rb +108 -0
  69. data/test/plugin/test_out_copy.rb +88 -127
  70. data/test/plugin/test_out_null.rb +29 -0
  71. data/test/plugin/test_out_relabel.rb +28 -0
  72. data/test/plugin/test_out_roundrobin.rb +35 -29
  73. data/test/plugin/test_out_stdout.rb +4 -4
  74. data/test/plugin/test_output_as_buffered.rb +51 -0
  75. data/test/plugin/test_output_as_buffered_secondary.rb +13 -0
  76. data/test/plugin/test_parser_apache.rb +38 -0
  77. data/test/plugin/test_parser_apache2.rb +38 -0
  78. data/test/plugin/test_parser_apache_error.rb +40 -0
  79. data/test/plugin/test_parser_base.rb +32 -0
  80. data/test/plugin/test_parser_csv.rb +94 -0
  81. data/test/plugin/test_parser_json.rb +107 -0
  82. data/test/plugin/test_parser_labeled_tsv.rb +129 -0
  83. data/test/plugin/test_parser_multiline.rb +100 -0
  84. data/test/plugin/test_parser_nginx.rb +42 -0
  85. data/test/plugin/test_parser_none.rb +53 -0
  86. data/test/plugin/test_parser_regexp.rb +110 -0
  87. data/test/plugin/test_parser_syslog.rb +66 -0
  88. data/test/plugin/test_parser_time.rb +46 -0
  89. data/test/plugin/test_parser_tsv.rb +125 -0
  90. data/test/plugin_helper/test_child_process.rb +11 -2
  91. data/test/plugin_helper/test_formatter.rb +212 -0
  92. data/test/plugin_helper/test_inject.rb +388 -0
  93. data/test/plugin_helper/test_parser.rb +223 -0
  94. data/test/plugin_helper/test_retry_state.rb +40 -40
  95. data/test/plugin_helper/test_storage.rb +77 -10
  96. data/test/scripts/fluent/plugin/out_test.rb +22 -17
  97. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  98. data/test/test_event.rb +57 -0
  99. data/test/test_formatter.rb +0 -178
  100. data/test/test_output.rb +2 -152
  101. data/test/test_root_agent.rb +3 -2
  102. data/test/test_supervisor.rb +93 -26
  103. data/test/test_time_formatter.rb +186 -0
  104. metadata +69 -7
  105. data/test/test_parser.rb +0 -1087
@@ -4,16 +4,16 @@ require 'fluent/plugin/base'
4
4
 
5
5
  require 'time'
6
6
 
7
- class Fluent::PluginHelper::RetryState::RetryStateMachine
8
- def override_current_time(time)
9
- (class << self; self; end).module_eval do
10
- alias_method(:current_time_orig, :current_time)
7
+ class RetryStateHelperTest < Test::Unit::TestCase
8
+ def override_current_time(state, time)
9
+ mojule = Module.new do
11
10
  define_method(:current_time){ time }
12
11
  end
12
+ state.singleton_class.module_eval do
13
+ prepend mojule
14
+ end
13
15
  end
14
- end
15
16
 
16
- class RetryStateHelperTest < Test::Unit::TestCase
17
17
  class Dummy < Fluent::Plugin::TestBase
18
18
  helpers :retry_state
19
19
  end
@@ -55,7 +55,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
55
55
  test 'periodic retries' do
56
56
  s = @d.retry_state_create(:t2, :periodic, 3, 29, randomize: false)
57
57
  dummy_current_time = s.start
58
- s.override_current_time(dummy_current_time)
58
+ override_current_time(s, dummy_current_time)
59
59
 
60
60
  assert_equal dummy_current_time, s.current_time
61
61
  assert_equal (dummy_current_time + 29), s.timeout_at
@@ -63,7 +63,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
63
63
 
64
64
  i = 1
65
65
  while i < 9
66
- s.override_current_time(s.next_time)
66
+ override_current_time(s, s.next_time)
67
67
  s.step
68
68
  assert_equal i, s.steps
69
69
  assert_equal (s.current_time + 3), s.next_time
@@ -72,7 +72,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
72
72
  end
73
73
 
74
74
  assert_equal 9, i
75
- s.override_current_time(s.next_time)
75
+ override_current_time(s, s.next_time)
76
76
  s.step
77
77
  assert_equal s.timeout_at, s.next_time
78
78
  assert s.limit?
@@ -81,7 +81,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
81
81
  test 'periodic retries with max_steps' do
82
82
  s = @d.retry_state_create(:t2, :periodic, 3, 29, randomize: false, max_steps: 5)
83
83
  dummy_current_time = s.start
84
- s.override_current_time(dummy_current_time)
84
+ override_current_time(s, dummy_current_time)
85
85
 
86
86
  assert_equal dummy_current_time, s.current_time
87
87
  assert_equal (dummy_current_time + 29), s.timeout_at
@@ -89,7 +89,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
89
89
 
90
90
  i = 1
91
91
  while i < 5
92
- s.override_current_time(s.next_time)
92
+ override_current_time(s, s.next_time)
93
93
  s.step
94
94
  assert_equal i, s.steps
95
95
  assert_equal (s.current_time + 3), s.next_time
@@ -98,7 +98,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
98
98
  end
99
99
 
100
100
  assert_equal 5, i
101
- s.override_current_time(s.next_time)
101
+ override_current_time(s, s.next_time)
102
102
  s.step
103
103
  assert_equal (s.current_time + 3), s.next_time
104
104
  assert s.limit?
@@ -107,7 +107,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
107
107
  test 'periodic retries with secondary' do
108
108
  s = @d.retry_state_create(:t3, :periodic, 3, 100, randomize: false, secondary: true) # threshold 0.8
109
109
  dummy_current_time = s.start
110
- s.override_current_time(dummy_current_time)
110
+ override_current_time(s, dummy_current_time)
111
111
 
112
112
  assert_equal dummy_current_time, s.current_time
113
113
  assert_equal (dummy_current_time + 100), s.timeout_at
@@ -118,7 +118,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
118
118
 
119
119
  i = 1
120
120
  while i < 26
121
- s.override_current_time(s.next_time)
121
+ override_current_time(s, s.next_time)
122
122
  assert !s.secondary?
123
123
 
124
124
  s.step
@@ -129,7 +129,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
129
129
  end
130
130
 
131
131
  assert_equal 26, i
132
- s.override_current_time(s.next_time) # 78
132
+ override_current_time(s, s.next_time) # 78
133
133
  assert !s.secondary?
134
134
 
135
135
  s.step
@@ -139,7 +139,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
139
139
 
140
140
  i += 1
141
141
  assert_equal 27, i
142
- s.override_current_time(s.next_time) # 80
142
+ override_current_time(s, s.next_time) # 80
143
143
  assert s.secondary?
144
144
 
145
145
  s.step
@@ -150,7 +150,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
150
150
  i += 1
151
151
 
152
152
  while i < 33
153
- s.override_current_time(s.next_time)
153
+ override_current_time(s, s.next_time)
154
154
  assert s.secondary?
155
155
 
156
156
  s.step
@@ -160,7 +160,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
160
160
  end
161
161
 
162
162
  assert_equal 33, i
163
- s.override_current_time(s.next_time) # 98
163
+ override_current_time(s, s.next_time) # 98
164
164
  assert s.secondary?
165
165
 
166
166
  s.step
@@ -171,7 +171,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
171
171
  test 'periodic retries with secondary and specified threshold' do
172
172
  s = @d.retry_state_create(:t3, :periodic, 3, 100, randomize: false, secondary: true, secondary_threshold: 0.75)
173
173
  dummy_current_time = s.start
174
- s.override_current_time(dummy_current_time)
174
+ override_current_time(s, dummy_current_time)
175
175
 
176
176
  assert_equal dummy_current_time, s.current_time
177
177
  assert_equal (dummy_current_time + 100), s.timeout_at
@@ -181,7 +181,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
181
181
  test 'exponential backoff forever without randomization' do
182
182
  s = @d.retry_state_create(:t11, :exponential_backoff, 0.1, 300, randomize: false, forever: true, backoff_base: 2)
183
183
  dummy_current_time = s.start
184
- s.override_current_time(dummy_current_time)
184
+ override_current_time(s, dummy_current_time)
185
185
 
186
186
  assert_equal dummy_current_time, s.current_time
187
187
 
@@ -201,7 +201,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
201
201
  test 'exponential backoff with max_interval' do
202
202
  s = @d.retry_state_create(:t12, :exponential_backoff, 0.1, 300, randomize: false, forever: true, backoff_base: 2, max_interval: 100)
203
203
  dummy_current_time = s.start
204
- s.override_current_time(dummy_current_time)
204
+ override_current_time(s, dummy_current_time)
205
205
 
206
206
  assert_equal dummy_current_time, s.current_time
207
207
 
@@ -230,7 +230,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
230
230
  test 'exponential backoff with shorter timeout' do
231
231
  s = @d.retry_state_create(:t13, :exponential_backoff, 1, 12, randomize: false, backoff_base: 2, max_interval: 10)
232
232
  dummy_current_time = s.start
233
- s.override_current_time(dummy_current_time)
233
+ override_current_time(s, dummy_current_time)
234
234
 
235
235
  assert_equal dummy_current_time, s.current_time
236
236
 
@@ -241,17 +241,17 @@ class RetryStateHelperTest < Test::Unit::TestCase
241
241
 
242
242
  # 1 + 1 + 2 + 4 (=8)
243
243
 
244
- s.override_current_time(s.next_time)
244
+ override_current_time(s, s.next_time)
245
245
  s.step
246
246
  assert_equal 1, s.steps
247
247
  assert_equal (s.current_time + 1), s.next_time
248
248
 
249
- s.override_current_time(s.next_time)
249
+ override_current_time(s, s.next_time)
250
250
  s.step
251
251
  assert_equal 2, s.steps
252
252
  assert_equal (s.current_time + 2), s.next_time
253
253
 
254
- s.override_current_time(s.next_time)
254
+ override_current_time(s, s.next_time)
255
255
  s.step
256
256
  assert_equal 3, s.steps
257
257
  assert_equal (s.current_time + 4), s.next_time
@@ -260,7 +260,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
260
260
 
261
261
  # + 8 (=16) > 12
262
262
 
263
- s.override_current_time(s.next_time)
263
+ override_current_time(s, s.next_time)
264
264
  s.step
265
265
  assert_equal 4, s.steps
266
266
  assert_equal s.timeout_at, s.next_time
@@ -271,7 +271,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
271
271
  test 'exponential backoff with max_steps' do
272
272
  s = @d.retry_state_create(:t14, :exponential_backoff, 1, 120, randomize: false, backoff_base: 2, max_interval: 10, max_steps: 6)
273
273
  dummy_current_time = s.start
274
- s.override_current_time(dummy_current_time)
274
+ override_current_time(s, dummy_current_time)
275
275
 
276
276
  assert_equal dummy_current_time, s.current_time
277
277
 
@@ -280,38 +280,38 @@ class RetryStateHelperTest < Test::Unit::TestCase
280
280
  assert_equal 0, s.steps
281
281
  assert_equal (dummy_current_time + 1), s.next_time
282
282
 
283
- s.override_current_time(s.next_time)
283
+ override_current_time(s, s.next_time)
284
284
  s.step
285
285
  assert_equal 1, s.steps
286
286
  assert_equal (s.current_time + 1), s.next_time
287
287
 
288
- s.override_current_time(s.next_time)
288
+ override_current_time(s, s.next_time)
289
289
  s.step
290
290
  assert_equal 2, s.steps
291
291
  assert_equal (s.current_time + 2), s.next_time
292
292
 
293
- s.override_current_time(s.next_time)
293
+ override_current_time(s, s.next_time)
294
294
  s.step
295
295
  assert_equal 3, s.steps
296
296
  assert_equal (s.current_time + 4), s.next_time
297
297
 
298
298
  assert !s.limit?
299
299
 
300
- s.override_current_time(s.next_time)
300
+ override_current_time(s, s.next_time)
301
301
  s.step
302
302
  assert_equal 4, s.steps
303
303
  assert_equal (s.current_time + 8), s.next_time
304
304
 
305
305
  assert !s.limit?
306
306
 
307
- s.override_current_time(s.next_time)
307
+ override_current_time(s, s.next_time)
308
308
  s.step
309
309
  assert_equal 5, s.steps
310
310
  assert_equal (s.current_time + 10), s.next_time
311
311
 
312
312
  assert !s.limit?
313
313
 
314
- s.override_current_time(s.next_time)
314
+ override_current_time(s, s.next_time)
315
315
  s.step
316
316
  assert_equal 6, s.steps
317
317
  assert_equal (s.current_time + 10), s.next_time
@@ -322,7 +322,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
322
322
  test 'exponential backoff retries with secondary' do
323
323
  s = @d.retry_state_create(:t15, :exponential_backoff, 1, 100, randomize: false, backoff_base: 2, secondary: true) # threshold 0.8
324
324
  dummy_current_time = s.start
325
- s.override_current_time(dummy_current_time)
325
+ override_current_time(s, dummy_current_time)
326
326
 
327
327
  assert_equal dummy_current_time, s.current_time
328
328
  assert_equal (dummy_current_time + 100), s.timeout_at
@@ -334,7 +334,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
334
334
  # 1, 1(2), 2(4), 4(8), 8(16), 16(32), 32(64), (80), (81), (83), (87), (95), (100)
335
335
  i = 1
336
336
  while i < 7
337
- s.override_current_time(s.next_time)
337
+ override_current_time(s, s.next_time)
338
338
  assert !s.secondary?
339
339
 
340
340
  s.step
@@ -345,7 +345,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
345
345
  end
346
346
 
347
347
  assert_equal 7, i
348
- s.override_current_time(s.next_time) # 64
348
+ override_current_time(s, s.next_time) # 64
349
349
  assert !s.secondary?
350
350
 
351
351
  s.step
@@ -355,7 +355,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
355
355
 
356
356
  i += 1
357
357
  assert_equal 8, i
358
- s.override_current_time(s.next_time) # 80
358
+ override_current_time(s, s.next_time) # 80
359
359
  assert s.secondary?
360
360
 
361
361
  s.step
@@ -367,7 +367,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
367
367
  # 81, 82, 84, 88, 96, 100
368
368
  j = 1
369
369
  while j < 4
370
- s.override_current_time(s.next_time)
370
+ override_current_time(s, s.next_time)
371
371
  assert s.secondary?
372
372
  assert_equal :secondary, s.current
373
373
 
@@ -379,7 +379,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
379
379
  end
380
380
 
381
381
  assert_equal 4, j
382
- s.override_current_time(s.next_time) # 96
382
+ override_current_time(s, s.next_time) # 96
383
383
  assert s.secondary?
384
384
 
385
385
  s.step
@@ -390,7 +390,7 @@ class RetryStateHelperTest < Test::Unit::TestCase
390
390
  test 'exponential backoff retries with secondary and specified threshold' do
391
391
  s = @d.retry_state_create(:t16, :exponential_backoff, 1, 100, randomize: false, secondary: true, backoff_base: 2, secondary_threshold: 0.75)
392
392
  dummy_current_time = s.start
393
- s.override_current_time(dummy_current_time)
393
+ override_current_time(s, dummy_current_time)
394
394
 
395
395
  assert_equal dummy_current_time, s.current_time
396
396
  assert_equal (dummy_current_time + 100), s.timeout_at
@@ -169,16 +169,6 @@ class StorageHelperTest < Test::Unit::TestCase
169
169
  assert{ s.implementation.is_a? ExampleStorage }
170
170
  end
171
171
 
172
- test 'raises exception for storage creation without explicit type specification' do
173
- @d = d = Dummy.new
174
- d.configure(config_element())
175
- d.start
176
-
177
- assert_raises ArgumentError do
178
- d.storage_create(usage: 'mydata', conf: config_element('storage', 'mydata', {'@type' => 'example'}))
179
- end
180
- end
181
-
182
172
  test 'creates 2 or more storage plugin instances' do
183
173
  @d = d = Dummy.new
184
174
  conf = config_element('ROOT', '', {}, [
@@ -369,6 +359,8 @@ class StorageHelperTest < Test::Unit::TestCase
369
359
  assert_equal 1, s.implementation.load_times
370
360
  assert_equal 0, s.implementation.save_times
371
361
 
362
+ d.before_shutdown
363
+
372
364
  d.shutdown
373
365
 
374
366
  assert_equal 1, s.implementation.load_times
@@ -408,4 +400,79 @@ class StorageHelperTest < Test::Unit::TestCase
408
400
  assert_equal 0, s.implementation.data.size
409
401
  assert_equal 0, s.implementation.saved.size
410
402
  end
403
+
404
+ test 'calls lifecycle methods for all plugin instances via owner plugin' do
405
+ @d = d = Dummy.new
406
+ conf = config_element('ROOT', '', {}, [ config_element('storage', '', {'@type' => 'example'}), config_element('storage', 'e2', {'@type' => 'example'}) ])
407
+ d.configure(conf)
408
+ d.start
409
+
410
+ i1 = d.storage_create(usage: '')
411
+ i2 = d.storage_create(usage: 'e2')
412
+ i3 = d.storage_create(usage: 'e3', type: 'ex2')
413
+
414
+ assert i1.started?
415
+ assert i2.started?
416
+ assert i3.started?
417
+
418
+ assert !i1.stopped?
419
+ assert !i2.stopped?
420
+ assert !i3.stopped?
421
+
422
+ d.stop
423
+
424
+ assert i1.stopped?
425
+ assert i2.stopped?
426
+ assert i3.stopped?
427
+
428
+ assert !i1.before_shutdown?
429
+ assert !i2.before_shutdown?
430
+ assert !i3.before_shutdown?
431
+
432
+ d.before_shutdown
433
+
434
+ assert i1.before_shutdown?
435
+ assert i2.before_shutdown?
436
+ assert i3.before_shutdown?
437
+
438
+ assert !i1.shutdown?
439
+ assert !i2.shutdown?
440
+ assert !i3.shutdown?
441
+
442
+ d.shutdown
443
+
444
+ assert i1.shutdown?
445
+ assert i2.shutdown?
446
+ assert i3.shutdown?
447
+
448
+ assert !i1.after_shutdown?
449
+ assert !i2.after_shutdown?
450
+ assert !i3.after_shutdown?
451
+
452
+ d.after_shutdown
453
+
454
+ assert i1.after_shutdown?
455
+ assert i2.after_shutdown?
456
+ assert i3.after_shutdown?
457
+
458
+ assert !i1.closed?
459
+ assert !i2.closed?
460
+ assert !i3.closed?
461
+
462
+ d.close
463
+
464
+ assert i1.closed?
465
+ assert i2.closed?
466
+ assert i3.closed?
467
+
468
+ assert !i1.terminated?
469
+ assert !i2.terminated?
470
+ assert !i3.terminated?
471
+
472
+ d.terminate
473
+
474
+ assert i1.terminated?
475
+ assert i2.terminated?
476
+ assert i3.terminated?
477
+ end
411
478
  end
@@ -14,17 +14,25 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
- module Fluent
17
+ require 'fluent/plugin/output'
18
+ require 'fluent/event'
19
+
20
+ module Fluent::Plugin
18
21
  class TestOutput < Output
19
- Plugin.register_output('test', self)
22
+ Fluent::Plugin.register_output('test', self)
23
+
24
+ config_param :name, :string
25
+
26
+ config_section :buffer do
27
+ config_set_default :chunk_keys, ['tag']
28
+ end
20
29
 
21
30
  def initialize
22
31
  super
23
32
  @emit_streams = []
24
- @name = nil
25
33
  end
26
34
 
27
- attr_reader :emit_streams, :name
35
+ attr_reader :emit_streams
28
36
 
29
37
  def emits
30
38
  all = []
@@ -54,23 +62,20 @@ module Fluent
54
62
  all
55
63
  end
56
64
 
57
- def configure(conf)
58
- if name = conf['name']
59
- @name = name
60
- end
61
- end
62
-
63
- def start
64
- super
65
+ def prefer_buffered_processing
66
+ false
65
67
  end
66
68
 
67
- def shutdown
68
- super
69
+ def process(tag, es)
70
+ @emit_streams << [tag, es.to_a]
69
71
  end
70
72
 
71
- def emit(tag, es, chain)
72
- chain.next
73
- @emit_streams << [tag, es.to_a]
73
+ def write(chunk)
74
+ es = Fluent::ArrayEventStream.new
75
+ chunk.each do |time, record|
76
+ es.add(time, record)
77
+ end
78
+ @emit_streams << [tag, es]
74
79
  end
75
80
  end
76
81
  end