fluentd 0.14.1 → 0.14.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +110 -1
  3. data/Rakefile +5 -1
  4. data/appveyor.yml +7 -1
  5. data/example/in_forward.conf +4 -0
  6. data/lib/fluent/compat/exec_util.rb +129 -0
  7. data/lib/fluent/compat/file_util.rb +54 -0
  8. data/lib/fluent/compat/filter.rb +21 -3
  9. data/lib/fluent/compat/formatter.rb +4 -2
  10. data/lib/fluent/compat/formatter_utils.rb +85 -0
  11. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +60 -0
  12. data/lib/fluent/compat/input.rb +1 -3
  13. data/lib/fluent/compat/output.rb +95 -39
  14. data/lib/fluent/compat/parser.rb +17 -0
  15. data/lib/fluent/compat/parser_utils.rb +40 -0
  16. data/lib/fluent/compat/socket_util.rb +165 -0
  17. data/lib/fluent/compat/string_util.rb +34 -0
  18. data/lib/fluent/{test/driver/owner.rb → compat/structured_format_mixin.rb} +5 -11
  19. data/lib/fluent/config/element.rb +2 -2
  20. data/lib/fluent/configurable.rb +2 -1
  21. data/lib/fluent/event.rb +61 -7
  22. data/lib/fluent/event_router.rb +1 -1
  23. data/lib/fluent/plugin.rb +7 -7
  24. data/lib/fluent/plugin/buf_file.rb +5 -2
  25. data/lib/fluent/plugin/buffer.rb +194 -64
  26. data/lib/fluent/plugin/buffer/chunk.rb +28 -3
  27. data/lib/fluent/plugin/buffer/file_chunk.rb +5 -21
  28. data/lib/fluent/plugin/buffer/memory_chunk.rb +1 -11
  29. data/lib/fluent/plugin/exec_util.rb +2 -112
  30. data/lib/fluent/plugin/file_util.rb +3 -38
  31. data/lib/fluent/plugin/file_wrapper.rb +1 -1
  32. data/lib/fluent/plugin/filter_grep.rb +3 -7
  33. data/lib/fluent/plugin/filter_record_transformer.rb +5 -5
  34. data/lib/fluent/plugin/filter_stdout.rb +18 -11
  35. data/lib/fluent/plugin/formatter.rb +0 -48
  36. data/lib/fluent/plugin/formatter_csv.rb +7 -8
  37. data/lib/fluent/plugin/formatter_hash.rb +1 -4
  38. data/lib/fluent/plugin/formatter_json.rb +1 -4
  39. data/lib/fluent/plugin/formatter_ltsv.rb +5 -6
  40. data/lib/fluent/plugin/formatter_msgpack.rb +1 -4
  41. data/lib/fluent/plugin/formatter_out_file.rb +36 -3
  42. data/lib/fluent/plugin/formatter_stdout.rb +36 -1
  43. data/lib/fluent/plugin/in_dummy.rb +9 -2
  44. data/lib/fluent/plugin/in_exec.rb +20 -57
  45. data/lib/fluent/plugin/in_forward.rb +4 -3
  46. data/lib/fluent/plugin/in_object_space.rb +8 -44
  47. data/lib/fluent/plugin/in_syslog.rb +13 -24
  48. data/lib/fluent/plugin/in_tail.rb +3 -0
  49. data/lib/fluent/plugin/out_buffered_stdout.rb +14 -4
  50. data/lib/fluent/plugin/out_exec.rb +7 -5
  51. data/lib/fluent/plugin/out_exec_filter.rb +10 -10
  52. data/lib/fluent/plugin/out_file.rb +1 -3
  53. data/lib/fluent/plugin/out_forward.rb +38 -57
  54. data/lib/fluent/plugin/out_stdout.rb +14 -5
  55. data/lib/fluent/plugin/out_stream.rb +3 -0
  56. data/lib/fluent/plugin/output.rb +31 -14
  57. data/lib/fluent/plugin/parser.rb +0 -69
  58. data/lib/fluent/plugin/parser_apache.rb +10 -6
  59. data/lib/fluent/plugin/parser_apache_error.rb +8 -3
  60. data/lib/fluent/plugin/parser_csv.rb +3 -1
  61. data/lib/fluent/plugin/parser_json.rb +1 -1
  62. data/lib/fluent/plugin/parser_multiline.rb +5 -3
  63. data/lib/fluent/plugin/parser_nginx.rb +10 -6
  64. data/lib/fluent/plugin/parser_regexp.rb +73 -0
  65. data/lib/fluent/plugin/socket_util.rb +2 -148
  66. data/lib/fluent/plugin/storage_local.rb +1 -1
  67. data/lib/fluent/plugin/string_util.rb +3 -18
  68. data/lib/fluent/plugin_helper.rb +1 -0
  69. data/lib/fluent/plugin_helper/compat_parameters.rb +166 -41
  70. data/lib/fluent/plugin_helper/formatter.rb +30 -19
  71. data/lib/fluent/plugin_helper/inject.rb +25 -12
  72. data/lib/fluent/plugin_helper/parser.rb +22 -13
  73. data/lib/fluent/plugin_helper/storage.rb +22 -13
  74. data/lib/fluent/registry.rb +19 -6
  75. data/lib/fluent/supervisor.rb +27 -1
  76. data/lib/fluent/test/driver/base.rb +16 -92
  77. data/lib/fluent/test/driver/base_owned.rb +17 -53
  78. data/lib/fluent/test/driver/base_owner.rb +125 -0
  79. data/lib/fluent/test/driver/filter.rb +24 -2
  80. data/lib/fluent/test/driver/input.rb +2 -2
  81. data/lib/fluent/test/driver/multi_output.rb +2 -2
  82. data/lib/fluent/test/driver/output.rb +3 -5
  83. data/lib/fluent/test/helpers.rb +25 -0
  84. data/lib/fluent/test/input_test.rb +4 -4
  85. data/lib/fluent/test/output_test.rb +3 -3
  86. data/lib/fluent/version.rb +1 -1
  87. data/test/config/test_element.rb +135 -6
  88. data/test/plugin/test_buf_file.rb +71 -3
  89. data/test/plugin/test_buffer.rb +305 -86
  90. data/test/plugin/test_buffer_chunk.rb +60 -2
  91. data/test/plugin/test_buffer_file_chunk.rb +4 -3
  92. data/test/plugin/test_filter_grep.rb +25 -21
  93. data/test/plugin/test_filter_record_transformer.rb +75 -67
  94. data/test/plugin/test_filter_stdout.rb +171 -74
  95. data/test/plugin/test_formatter_csv.rb +94 -0
  96. data/test/plugin/test_formatter_json.rb +30 -0
  97. data/test/plugin/test_formatter_ltsv.rb +52 -0
  98. data/test/plugin/test_formatter_msgpack.rb +28 -0
  99. data/test/plugin/test_formatter_out_file.rb +95 -0
  100. data/test/plugin/test_formatter_single_value.rb +38 -0
  101. data/test/plugin/test_in_dummy.rb +95 -0
  102. data/test/plugin/test_in_exec.rb +27 -31
  103. data/test/plugin/test_in_forward.rb +24 -0
  104. data/test/plugin/test_in_gc_stat.rb +5 -5
  105. data/test/plugin/test_in_object_space.rb +4 -4
  106. data/test/plugin/test_in_syslog.rb +60 -35
  107. data/test/plugin/test_out_buffered_stdout.rb +17 -3
  108. data/test/plugin/test_out_forward.rb +93 -5
  109. data/test/plugin/test_out_stdout.rb +14 -3
  110. data/test/plugin/test_output_as_buffered_retries.rb +20 -0
  111. data/test/plugin/test_output_as_buffered_secondary.rb +16 -0
  112. data/test/plugin/test_output_as_standard.rb +22 -22
  113. data/test/plugin/test_parser_apache.rb +13 -9
  114. data/test/plugin/test_parser_apache_error.rb +11 -6
  115. data/test/plugin/test_parser_csv.rb +35 -25
  116. data/test/plugin/test_parser_nginx.rb +11 -5
  117. data/test/plugin/test_parser_regexp.rb +235 -68
  118. data/test/plugin/test_parser_tsv.rb +54 -58
  119. data/test/plugin_helper/test_compat_parameters.rb +111 -46
  120. data/test/plugin_helper/test_formatter.rb +40 -0
  121. data/test/plugin_helper/test_inject.rb +101 -2
  122. data/test/plugin_helper/test_parser.rb +40 -0
  123. data/test/plugin_helper/test_storage.rb +43 -0
  124. data/test/test_event.rb +93 -0
  125. data/test/test_event_router.rb +13 -4
  126. data/test/test_event_time.rb +0 -3
  127. data/test/test_formatter.rb +7 -164
  128. data/test/test_plugin_classes.rb +28 -1
  129. metadata +24 -3
@@ -10,7 +10,8 @@ class BufferChunkTest < Test::Unit::TestCase
10
10
  assert{ chunk.metadata.object_id == meta.object_id }
11
11
  assert{ chunk.created_at.is_a? Time }
12
12
  assert{ chunk.modified_at.is_a? Time }
13
- assert chunk.staged?
13
+ assert chunk.unstaged?
14
+ assert !chunk.staged?
14
15
  assert !chunk.queued?
15
16
  assert !chunk.closed?
16
17
  end
@@ -20,6 +21,7 @@ class BufferChunkTest < Test::Unit::TestCase
20
21
  chunk = Fluent::Plugin::Buffer::Chunk.new(meta)
21
22
 
22
23
  assert chunk.respond_to?(:append)
24
+ assert chunk.respond_to?(:concat)
23
25
  assert chunk.respond_to?(:commit)
24
26
  assert chunk.respond_to?(:rollback)
25
27
  assert chunk.respond_to?(:bytesize)
@@ -30,7 +32,8 @@ class BufferChunkTest < Test::Unit::TestCase
30
32
  assert chunk.respond_to?(:open)
31
33
  assert chunk.respond_to?(:write_to)
32
34
  assert chunk.respond_to?(:msgpack_each)
33
- assert_raise(NotImplementedError){ chunk.append(nil) }
35
+ assert_raise(NotImplementedError){ chunk.append([]) }
36
+ assert_raise(NotImplementedError){ chunk.concat(nil, 0) }
34
37
  assert_raise(NotImplementedError){ chunk.commit }
35
38
  assert_raise(NotImplementedError){ chunk.rollback }
36
39
  assert_raise(NotImplementedError){ chunk.bytesize }
@@ -63,21 +66,76 @@ class BufferChunkTest < Test::Unit::TestCase
63
66
  sub_test_case 'minimum chunk implements #size and #open' do
64
67
  test 'chunk lifecycle' do
65
68
  c = TestChunk.new(Object.new)
69
+ assert c.unstaged?
70
+ assert !c.staged?
71
+ assert !c.queued?
72
+ assert !c.closed?
73
+ assert c.writable?
74
+
75
+ c.staged!
76
+
77
+ assert !c.unstaged?
66
78
  assert c.staged?
67
79
  assert !c.queued?
68
80
  assert !c.closed?
81
+ assert c.writable?
82
+
83
+ c.enqueued!
84
+
85
+ assert !c.unstaged?
86
+ assert !c.staged?
87
+ assert c.queued?
88
+ assert !c.closed?
89
+ assert !c.writable?
90
+
91
+ c.close
92
+
93
+ assert !c.unstaged?
94
+ assert !c.staged?
95
+ assert !c.queued?
96
+ assert c.closed?
97
+ assert !c.writable?
98
+ end
99
+
100
+ test 'chunk can be unstaged' do
101
+ c = TestChunk.new(Object.new)
102
+ assert c.unstaged?
103
+ assert !c.staged?
104
+ assert !c.queued?
105
+ assert !c.closed?
106
+ assert c.writable?
107
+
108
+ c.staged!
109
+
110
+ assert !c.unstaged?
111
+ assert c.staged?
112
+ assert !c.queued?
113
+ assert !c.closed?
114
+ assert c.writable?
115
+
116
+ c.unstaged!
117
+
118
+ assert c.unstaged?
119
+ assert !c.staged?
120
+ assert !c.queued?
121
+ assert !c.closed?
122
+ assert c.writable?
69
123
 
70
124
  c.enqueued!
71
125
 
126
+ assert !c.unstaged?
72
127
  assert !c.staged?
73
128
  assert c.queued?
74
129
  assert !c.closed?
130
+ assert !c.writable?
75
131
 
76
132
  c.close
77
133
 
134
+ assert !c.unstaged?
78
135
  assert !c.staged?
79
136
  assert !c.queued?
80
137
  assert c.closed?
138
+ assert !c.writable?
81
139
  end
82
140
 
83
141
  test 'can respond to #empty? correctly' do
@@ -49,8 +49,9 @@ class BufferFileChunkTest < Test::Unit::TestCase
49
49
  data(
50
50
  correct_staged: ['/mydir/mypath/myfile.b00ff.log', :staged],
51
51
  correct_queued: ['/mydir/mypath/myfile.q00ff.log', :queued],
52
- incorrect_staged: ['/mydir/mypath/myfile.b00ff.log/unknown', :queued],
53
- incorrect_queued: ['/mydir/mypath/myfile.q00ff.log/unknown', :queued],
52
+ incorrect_staged: ['/mydir/mypath/myfile.b00ff.log/unknown', :unknown],
53
+ incorrect_queued: ['/mydir/mypath/myfile.q00ff.log/unknown', :unknown],
54
+ output_file: ['/mydir/mypath/myfile.20160716.log', :unknown],
54
55
  )
55
56
  test 'can .assume_chunk_state' do |data|
56
57
  path, expected = data
@@ -122,7 +123,7 @@ class BufferFileChunkTest < Test::Unit::TestCase
122
123
  assert File.exist?(gen_chunk_path('b', @c.unique_id) + '.meta')
123
124
  assert{ File.stat(gen_chunk_path('b', @c.unique_id) + '.meta').mode.to_s(8).end_with?(@klass.const_get('FILE_PERMISSION').to_s(8)) }
124
125
 
125
- assert_equal :staged, @c.state
126
+ assert_equal :unstaged, @c.state
126
127
  assert @c.empty?
127
128
  end
128
129
 
@@ -1,16 +1,17 @@
1
1
  require_relative '../helper'
2
2
  require 'fluent/plugin/filter_grep'
3
+ require 'fluent/test/driver/filter'
3
4
 
4
5
  class GrepFilterTest < Test::Unit::TestCase
5
6
  include Fluent
6
7
 
7
8
  setup do
8
9
  Fluent::Test.setup
9
- @time = Fluent::Engine.now
10
+ @time = event_time
10
11
  end
11
12
 
12
13
  def create_driver(conf = '')
13
- Test::FilterTestDriver.new(GrepFilter).configure(conf, true)
14
+ Fluent::Test::Driver::Filter.new(Fluent::Plugin::GrepFilter).configure(conf)
14
15
  end
15
16
 
16
17
  sub_test_case 'configure' do
@@ -41,35 +42,36 @@ class GrepFilterTest < Test::Unit::TestCase
41
42
  ]
42
43
  end
43
44
 
44
- def emit(config, msgs)
45
+ def filter(config, msgs)
45
46
  d = create_driver(config)
46
47
  d.run {
47
48
  msgs.each { |msg|
48
- d.emit({'foo' => 'bar', 'message' => msg}, @time)
49
+ d.feed("filter.test", @time, {'foo' => 'bar', 'message' => msg})
49
50
  }
50
- }.filtered
51
+ }
52
+ d.filtered_records
51
53
  end
52
54
 
53
55
  test 'empty config' do
54
- es = emit('', messages)
55
- assert_equal(4, es.instance_variable_get(:@record_array).size)
56
+ filtered_records = filter('', messages)
57
+ assert_equal(4, filtered_records.size)
56
58
  end
57
59
 
58
60
  test 'regexpN' do
59
- es = emit('regexp1 message WARN', messages)
60
- assert_equal(3, es.instance_variable_get(:@record_array).size)
61
+ filtered_records = filter('regexp1 message WARN', messages)
62
+ assert_equal(3, filtered_records.size)
61
63
  assert_block('only WARN logs') do
62
- es.all? { |t, r|
64
+ filtered_records.all? { |r|
63
65
  !r['message'].include?('INFO')
64
66
  }
65
67
  end
66
68
  end
67
69
 
68
70
  test 'excludeN' do
69
- es = emit('exclude1 message favicon', messages)
70
- assert_equal(3, es.instance_variable_get(:@record_array).size)
71
+ filtered_records = filter('exclude1 message favicon', messages)
72
+ assert_equal(3, filtered_records.size)
71
73
  assert_block('remove favicon logs') do
72
- es.all? { |t, r|
74
+ filtered_records.all? { |r|
73
75
  !r['message'].include?('favicon')
74
76
  }
75
77
  end
@@ -84,17 +86,19 @@ class GrepFilterTest < Test::Unit::TestCase
84
86
 
85
87
  test "don't raise an exception" do
86
88
  assert_nothing_raised {
87
- emit(%[regexp1 message WARN], ["\xff".force_encoding('UTF-8')])
89
+ filter(%[regexp1 message WARN], ["\xff".force_encoding('UTF-8')])
88
90
  }
89
91
  end
90
92
  end
91
93
  end
92
94
 
93
95
  sub_test_case 'grep non-string jsonable values' do
94
- def emit(msg, config = 'regexp1 message 0')
96
+ def filter(msg, config = 'regexp1 message 0')
95
97
  d = create_driver(config)
96
- d.emit({'foo' => 'bar', 'message' => msg}, @time)
97
- d.run.filtered
98
+ d.run do
99
+ d.feed("filter.test", @time, {'foo' => 'bar', 'message' => msg})
100
+ end
101
+ d.filtered_records
98
102
  end
99
103
 
100
104
  data(
@@ -103,13 +107,13 @@ class GrepFilterTest < Test::Unit::TestCase
103
107
  'integer' => 0,
104
108
  'float' => 0.1)
105
109
  test "value" do |data|
106
- es = emit(data)
107
- assert_equal(1, es.instance_variable_get(:@record_array).size)
110
+ filtered_records = filter(data)
111
+ assert_equal(1, filtered_records.size)
108
112
  end
109
113
 
110
114
  test "value boolean" do
111
- es = emit(true, %[regexp1 message true])
112
- assert_equal(1, es.instance_variable_get(:@record_array).size)
115
+ filtered_records = filter(true, %[regexp1 message true])
116
+ assert_equal(1, filtered_records.size)
113
117
  end
114
118
  end
115
119
  end
@@ -1,5 +1,6 @@
1
1
  require_relative '../helper'
2
2
  require 'timecop'
3
+ require 'fluent/test/driver/filter'
3
4
  require 'fluent/plugin/filter_record_transformer'
4
5
 
5
6
  class RecordTransformerFilterTest < Test::Unit::TestCase
@@ -10,7 +11,7 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
10
11
  @hostname = Socket.gethostname.chomp
11
12
  @tag = 'test.tag'
12
13
  @tag_parts = @tag.split('.')
13
- @time = Time.utc(1,2,3,4,5,2010,nil,nil,nil,nil)
14
+ @time = event_time('2010-05-04 03:02:01 UTC')
14
15
  Timecop.freeze(@time)
15
16
  end
16
17
 
@@ -19,7 +20,7 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
19
20
  end
20
21
 
21
22
  def create_driver(conf = '')
22
- Test::FilterTestDriver.new(RecordTransformerFilter, @tag).configure(conf, true)
23
+ Fluent::Test::Driver::Filter.new(Fluent::Plugin::RecordTransformerFilter).configure(conf)
23
24
  end
24
25
 
25
26
  sub_test_case 'configure' do
@@ -37,13 +38,14 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
37
38
  end
38
39
 
39
40
  sub_test_case "test options" do
40
- def emit(config, msgs = [''])
41
+ def filter(config, msgs = [''])
41
42
  d = create_driver(config)
42
43
  d.run {
43
44
  msgs.each { |msg|
44
- d.emit({'foo' => 'bar', 'message' => msg}, @time)
45
+ d.feed(@tag, @time, {'foo' => 'bar', 'message' => msg})
45
46
  }
46
- }.filtered
47
+ }
48
+ d.filtered
47
49
  end
48
50
 
49
51
  CONFIG = %[
@@ -57,24 +59,24 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
57
59
 
58
60
  test 'typical usage' do
59
61
  msgs = ['1', '2']
60
- es = emit(CONFIG, msgs)
61
- es.each_with_index do |(_t, r), i|
62
+ filtered = filter(CONFIG, msgs)
63
+ filtered.each_with_index do |(_t, r), i|
62
64
  assert_equal('bar', r['foo'])
63
65
  assert_equal(@hostname, r['hostname'])
64
66
  assert_equal(@tag, r['tag'])
65
- assert_equal(@time.to_s, r['time'])
67
+ assert_equal(Time.at(@time).localtime.to_s, r['time'])
66
68
  assert_equal("#{@hostname} #{@tag_parts[-1]} #{msgs[i]}", r['message'])
67
69
  end
68
70
  end
69
71
 
70
72
  test 'remove_keys' do
71
73
  config = CONFIG + %[remove_keys foo,message]
72
- es = emit(config)
73
- es.each_with_index do |(_t, r), i|
74
+ filtered = filter(config)
75
+ filtered.each_with_index do |(_t, r), i|
74
76
  assert_not_include(r, 'foo')
75
77
  assert_equal(@hostname, r['hostname'])
76
78
  assert_equal(@tag, r['tag'])
77
- assert_equal(@time.to_s, r['time'])
79
+ assert_equal(Time.at(@time).localtime.to_s, r['time'])
78
80
  assert_not_include(r, 'message')
79
81
  end
80
82
  end
@@ -82,12 +84,12 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
82
84
  test 'renew_record' do
83
85
  config = CONFIG + %[renew_record true]
84
86
  msgs = ['1', '2']
85
- es = emit(config, msgs)
86
- es.each_with_index do |(_t, r), i|
87
+ filtered = filter(config, msgs)
88
+ filtered.each_with_index do |(_t, r), i|
87
89
  assert_not_include(r, 'foo')
88
90
  assert_equal(@hostname, r['hostname'])
89
91
  assert_equal(@tag, r['tag'])
90
- assert_equal(@time.to_s, r['time'])
92
+ assert_equal(Time.at(@time).localtime.to_s, r['time'])
91
93
  assert_equal("#{@hostname} #{@tag_parts[-1]} #{msgs[i]}", r['message'])
92
94
  end
93
95
  end
@@ -96,8 +98,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
96
98
  config = %[renew_time_key message]
97
99
  times = [ Time.local(2,2,3,4,5,2010,nil,nil,nil,nil), Time.local(3,2,3,4,5,2010,nil,nil,nil,nil) ]
98
100
  msgs = times.map{|t| t.to_f.to_s }
99
- es = emit(config, msgs)
100
- es.each_with_index do |(time, _record), i|
101
+ filtered = filter(config, msgs)
102
+ filtered.each_with_index do |(time, _record), i|
101
103
  assert_equal(times[i].to_i, time)
102
104
  assert(time.is_a?(Fluent::EventTime))
103
105
  end
@@ -106,8 +108,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
106
108
  test 'keep_keys' do
107
109
  config = %[renew_record true\nkeep_keys foo,message]
108
110
  msgs = ['1', '2']
109
- es = emit(config, msgs)
110
- es.each_with_index do |(_t, r), i|
111
+ filtered = filter(config, msgs)
112
+ filtered.each_with_index do |(_t, r), i|
111
113
  assert_equal('bar', r['foo'])
112
114
  assert_equal(msgs[i], r['message'])
113
115
  end
@@ -121,8 +123,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
121
123
  </record>
122
124
  ]
123
125
  msgs = ['1', '2']
124
- es = emit(config, msgs)
125
- es.each_with_index do |(_t, r), i|
126
+ filtered = filter(config, msgs)
127
+ filtered.each_with_index do |(_t, r), i|
126
128
  assert_equal("#{@hostname} #{@tag_parts[-1]} '#{msgs[i]}'", r['message'])
127
129
  end
128
130
  end
@@ -134,8 +136,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
134
136
  </record>
135
137
  %]
136
138
  msgs = ['1', '2']
137
- es = emit(config, msgs)
138
- es.each_with_index do |(_t, r), i|
139
+ filtered = filter(config, msgs)
140
+ filtered.each_with_index do |(_t, r), i|
139
141
  assert_equal({"k1"=>100, "k2"=>"foobar"}, r['hash_field'])
140
142
  end
141
143
  end
@@ -147,8 +149,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
147
149
  </record>
148
150
  %]
149
151
  msgs = ['1', '2']
150
- es = emit(config, msgs)
151
- es.each_with_index do |(_t, r), i|
152
+ filtered = filter(config, msgs)
153
+ filtered.each_with_index do |(_t, r), i|
152
154
  assert_equal([1,2,3], r['array_field'])
153
155
  end
154
156
  end
@@ -160,15 +162,15 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
160
162
  </record>
161
163
  %]
162
164
  msgs = ['1', '2']
163
- es = emit(config, msgs)
164
- es.each_with_index do |(_t, r), i|
165
+ filtered = filter(config, msgs)
166
+ filtered.each_with_index do |(_t, r), i|
165
167
  assert_equal({"hello"=>[1,2,3], "world"=>{"foo"=>"bar"}}, r['mixed_field'])
166
168
  end
167
169
  end
168
170
  end
169
171
 
170
172
  sub_test_case 'test placeholders' do
171
- def emit(config, msgs = [''])
173
+ def filter(config, msgs = [''])
172
174
  d = create_driver(config)
173
175
  yield d if block_given?
174
176
  d.run {
@@ -178,9 +180,10 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
178
180
  'message' => msg,
179
181
  }
180
182
  record = record.merge(msg) if msg.is_a?(Hash)
181
- d.emit(record, @time)
183
+ d.feed(@tag, @time, record)
182
184
  end
183
- }.filtered
185
+ }
186
+ d.filtered
184
187
  end
185
188
 
186
189
  %w[yes no].each do |enable_ruby|
@@ -191,8 +194,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
191
194
  message ${hostname}
192
195
  </record>
193
196
  ]
194
- es = emit(config)
195
- es.each do |t, r|
197
+ filtered = filter(config)
198
+ filtered.each do |t, r|
196
199
  assert_equal(@hostname, r['message'])
197
200
  end
198
201
  end
@@ -204,8 +207,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
204
207
  message ${tag}
205
208
  </record>
206
209
  ]
207
- es = emit(config)
208
- es.each do |t, r|
210
+ filtered = filter(config)
211
+ filtered.each do |t, r|
209
212
  assert_equal(@tag, r['message'])
210
213
  end
211
214
  end
@@ -218,8 +221,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
218
221
  </record>
219
222
  ]
220
223
  expected = "#{@tag.split('.').first} #{@tag.split('.').last}"
221
- es = emit(config)
222
- es.each do |t, r|
224
+ filtered = filter(config)
225
+ filtered.each do |t, r|
223
226
  assert_equal(expected, r['message'])
224
227
  end
225
228
  end
@@ -233,8 +236,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
233
236
  ]
234
237
  @tag = 'prefix.test.tag.suffix'
235
238
  expected = "prefix.test prefix.test.tag tag.suffix test.tag.suffix"
236
- es = emit(config)
237
- es.each do |t, r|
239
+ filtered = filter(config)
240
+ filtered.each do |t, r|
238
241
  assert_equal(expected, r['message'])
239
242
  end
240
243
  end
@@ -246,9 +249,9 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
246
249
  message ${time}
247
250
  </record>
248
251
  ]
249
- es = emit(config)
250
- es.each do |t, r|
251
- assert_equal(@time.to_s, r['message'])
252
+ filtered = filter(config)
253
+ filtered.each do |t, r|
254
+ assert_equal(Time.at(@time).localtime.to_s, r['message'])
252
255
  end
253
256
  end
254
257
 
@@ -262,8 +265,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
262
265
  </record>
263
266
  ]
264
267
  msgs = ['1', '2']
265
- es = emit(config, msgs)
266
- es.each_with_index do |(_t, r), i|
268
+ filtered = filter(config, msgs)
269
+ filtered.each_with_index do |(_t, r), i|
267
270
  assert_not_include(r, 'eventType0')
268
271
  assert_equal("bar", r['eventtype'])
269
272
  assert_equal("bar #{msgs[i]}", r['message'])
@@ -282,8 +285,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
282
285
  </record>
283
286
  ]
284
287
  msgs = ['1', '2']
285
- es = emit(config, msgs)
286
- es.each_with_index do |(_t, r), i|
288
+ filtered = filter(config, msgs)
289
+ filtered.each_with_index do |(_t, r), i|
287
290
  assert_equal({"hostname" => @hostname, "tag" => @tag, "#{@tag}" => 100}, r['hash_field'])
288
291
  end
289
292
  end
@@ -296,8 +299,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
296
299
  </record>
297
300
  ]
298
301
  msgs = ['1', '2']
299
- es = emit(config, msgs)
300
- es.each_with_index do |(_t, r), i|
302
+ filtered = filter(config, msgs)
303
+ filtered.each_with_index do |(_t, r), i|
301
304
  assert_equal([@hostname, @tag], r['array_field'])
302
305
  end
303
306
  end
@@ -310,8 +313,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
310
313
  </record>
311
314
  ]
312
315
  msgs = ['1', '2']
313
- es = emit(config, msgs)
314
- es.each_with_index do |(_t, r), i|
316
+ filtered = filter(config, msgs)
317
+ filtered.each_with_index do |(_t, r), i|
315
318
  assert_equal([{"tag" => @tag}], r['mixed_field'])
316
319
  end
317
320
  end
@@ -326,8 +329,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
326
329
  </record>
327
330
  ]
328
331
  msgs = ['1', '2']
329
- es = emit(config, msgs)
330
- es.each_with_index do |(_t, r), i|
332
+ filtered = filter(config, msgs)
333
+ filtered.each_with_index do |(_t, r), i|
331
334
  assert_equal({@hostname=>'hostname',"foo.#{@tag}"=>'tag'}, r)
332
335
  end
333
336
  end
@@ -379,8 +382,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
379
382
  with_quote: %Q{source[""]} },
380
383
  ]
381
384
  actual_results = []
382
- es = emit(config, msgs)
383
- es.each_with_index do |(_t, r), i|
385
+ filtered = filter(config, msgs)
386
+ filtered.each_with_index do |(_t, r), i|
384
387
  actual_results << {
385
388
  single: r["single"],
386
389
  multiple: r["multiple"],
@@ -433,8 +436,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
433
436
  with_suffix: "#{nil.to_s}-suffix" },
434
437
  ]
435
438
  actual_results = []
436
- es = emit(config, msgs)
437
- es.each_with_index do |(_t, r), i|
439
+ filtered = filter(config, msgs)
440
+ filtered.each_with_index do |(_t, r), i|
438
441
  actual_results << {
439
442
  single: r["single"],
440
443
  multiple: r["multiple"],
@@ -459,8 +462,9 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
459
462
  "foo.bar" => "foo.bar",
460
463
  "@timestamp" => 10,
461
464
  }
462
- es = d.run { d.emit(record, @time) }.filtered
463
- es.each do |t, r|
465
+ d.run { d.feed(@tag, @time, record) }
466
+ filtered = d.filtered
467
+ filtered.each do |t, r|
464
468
  assert { r['_timestamp'] == record['@timestamp'] }
465
469
  assert { r['_foo_bar'] == record['foo.bar'] }
466
470
  end
@@ -474,7 +478,7 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
474
478
  message ${unknown}
475
479
  </record>
476
480
  ]
477
- emit(config) { |d|
481
+ filter(config) { |d|
478
482
  mock(d.instance.log).warn("unknown placeholder `${unknown}` found")
479
483
  }
480
484
  end
@@ -486,10 +490,10 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
486
490
  message ${unknown['bar']}
487
491
  </record>
488
492
  ]
489
- es = emit(config) { |d|
493
+ filtered = filter(config) { |d|
490
494
  mock(d.instance.log).warn("failed to expand `%Q[\#{unknown['bar']}]`", anything)
491
495
  }
492
- es.each do |t, r|
496
+ filtered.each do |t, r|
493
497
  assert_nil(r['message'])
494
498
  end
495
499
  end
@@ -503,8 +507,9 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
503
507
  ]
504
508
  d = create_driver(config)
505
509
  message = {"@timestamp" => "foo"}
506
- es = d.run { d.emit(message, @time) }.filtered
507
- es.each do |t, r|
510
+ d.run { d.feed(@tag, @time, message) }
511
+ filtered = d.filtered
512
+ filtered.each do |t, r|
508
513
  assert_equal(message["@timestamp"], r['foo'])
509
514
  end
510
515
  end
@@ -520,8 +525,9 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
520
525
  ]
521
526
  d = create_driver(config)
522
527
  message = {"@timestamp" => "foo"}
523
- es = d.run { d.emit(message, @time) }.filtered
524
- es.each do |t, r|
528
+ d.run { d.feed(@tag, @time, message) }
529
+ filtered = d.filtered
530
+ filtered.each do |t, r|
525
531
  assert_equal([message["@timestamp"]], r['foo'])
526
532
  end
527
533
  end
@@ -535,8 +541,9 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
535
541
  ]
536
542
  d = create_driver(config)
537
543
  message = {"@timestamp" => "foo"}
538
- es = d.run { d.emit(message, @time) }.filtered
539
- es.each do |t, r|
544
+ d.run { d.feed(@tag, @time, message) }
545
+ filtered = d.filtered
546
+ filtered.each do |t, r|
540
547
  assert_equal(message["@timestamp"], r['foo'])
541
548
  end
542
549
  end
@@ -563,8 +570,9 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
563
570
  "@timestamp" => 10,
564
571
  "message" => "10",
565
572
  }
566
- es = d.run { d.emit(record, @time) }.filtered
567
- es.each do |t, r|
573
+ d.run { d.feed(@tag, @time, record) }
574
+ filtered = d.filtered
575
+ filtered.each do |t, r|
568
576
  assert { r['_message'] == "prefix-#{record['message']}-suffix" }
569
577
  assert { r['_time'] == Time.at(@time) }
570
578
  assert { r['_number'] == 0 }