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.
- checksums.yaml +4 -4
- data/ChangeLog +110 -1
- data/Rakefile +5 -1
- data/appveyor.yml +7 -1
- data/example/in_forward.conf +4 -0
- data/lib/fluent/compat/exec_util.rb +129 -0
- data/lib/fluent/compat/file_util.rb +54 -0
- data/lib/fluent/compat/filter.rb +21 -3
- data/lib/fluent/compat/formatter.rb +4 -2
- data/lib/fluent/compat/formatter_utils.rb +85 -0
- data/lib/fluent/compat/handle_tag_and_time_mixin.rb +60 -0
- data/lib/fluent/compat/input.rb +1 -3
- data/lib/fluent/compat/output.rb +95 -39
- data/lib/fluent/compat/parser.rb +17 -0
- data/lib/fluent/compat/parser_utils.rb +40 -0
- data/lib/fluent/compat/socket_util.rb +165 -0
- data/lib/fluent/compat/string_util.rb +34 -0
- data/lib/fluent/{test/driver/owner.rb → compat/structured_format_mixin.rb} +5 -11
- data/lib/fluent/config/element.rb +2 -2
- data/lib/fluent/configurable.rb +2 -1
- data/lib/fluent/event.rb +61 -7
- data/lib/fluent/event_router.rb +1 -1
- data/lib/fluent/plugin.rb +7 -7
- data/lib/fluent/plugin/buf_file.rb +5 -2
- data/lib/fluent/plugin/buffer.rb +194 -64
- data/lib/fluent/plugin/buffer/chunk.rb +28 -3
- data/lib/fluent/plugin/buffer/file_chunk.rb +5 -21
- data/lib/fluent/plugin/buffer/memory_chunk.rb +1 -11
- data/lib/fluent/plugin/exec_util.rb +2 -112
- data/lib/fluent/plugin/file_util.rb +3 -38
- data/lib/fluent/plugin/file_wrapper.rb +1 -1
- data/lib/fluent/plugin/filter_grep.rb +3 -7
- data/lib/fluent/plugin/filter_record_transformer.rb +5 -5
- data/lib/fluent/plugin/filter_stdout.rb +18 -11
- data/lib/fluent/plugin/formatter.rb +0 -48
- data/lib/fluent/plugin/formatter_csv.rb +7 -8
- data/lib/fluent/plugin/formatter_hash.rb +1 -4
- data/lib/fluent/plugin/formatter_json.rb +1 -4
- data/lib/fluent/plugin/formatter_ltsv.rb +5 -6
- data/lib/fluent/plugin/formatter_msgpack.rb +1 -4
- data/lib/fluent/plugin/formatter_out_file.rb +36 -3
- data/lib/fluent/plugin/formatter_stdout.rb +36 -1
- data/lib/fluent/plugin/in_dummy.rb +9 -2
- data/lib/fluent/plugin/in_exec.rb +20 -57
- data/lib/fluent/plugin/in_forward.rb +4 -3
- data/lib/fluent/plugin/in_object_space.rb +8 -44
- data/lib/fluent/plugin/in_syslog.rb +13 -24
- data/lib/fluent/plugin/in_tail.rb +3 -0
- data/lib/fluent/plugin/out_buffered_stdout.rb +14 -4
- data/lib/fluent/plugin/out_exec.rb +7 -5
- data/lib/fluent/plugin/out_exec_filter.rb +10 -10
- data/lib/fluent/plugin/out_file.rb +1 -3
- data/lib/fluent/plugin/out_forward.rb +38 -57
- data/lib/fluent/plugin/out_stdout.rb +14 -5
- data/lib/fluent/plugin/out_stream.rb +3 -0
- data/lib/fluent/plugin/output.rb +31 -14
- data/lib/fluent/plugin/parser.rb +0 -69
- data/lib/fluent/plugin/parser_apache.rb +10 -6
- data/lib/fluent/plugin/parser_apache_error.rb +8 -3
- data/lib/fluent/plugin/parser_csv.rb +3 -1
- data/lib/fluent/plugin/parser_json.rb +1 -1
- data/lib/fluent/plugin/parser_multiline.rb +5 -3
- data/lib/fluent/plugin/parser_nginx.rb +10 -6
- data/lib/fluent/plugin/parser_regexp.rb +73 -0
- data/lib/fluent/plugin/socket_util.rb +2 -148
- data/lib/fluent/plugin/storage_local.rb +1 -1
- data/lib/fluent/plugin/string_util.rb +3 -18
- data/lib/fluent/plugin_helper.rb +1 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +166 -41
- data/lib/fluent/plugin_helper/formatter.rb +30 -19
- data/lib/fluent/plugin_helper/inject.rb +25 -12
- data/lib/fluent/plugin_helper/parser.rb +22 -13
- data/lib/fluent/plugin_helper/storage.rb +22 -13
- data/lib/fluent/registry.rb +19 -6
- data/lib/fluent/supervisor.rb +27 -1
- data/lib/fluent/test/driver/base.rb +16 -92
- data/lib/fluent/test/driver/base_owned.rb +17 -53
- data/lib/fluent/test/driver/base_owner.rb +125 -0
- data/lib/fluent/test/driver/filter.rb +24 -2
- data/lib/fluent/test/driver/input.rb +2 -2
- data/lib/fluent/test/driver/multi_output.rb +2 -2
- data/lib/fluent/test/driver/output.rb +3 -5
- data/lib/fluent/test/helpers.rb +25 -0
- data/lib/fluent/test/input_test.rb +4 -4
- data/lib/fluent/test/output_test.rb +3 -3
- data/lib/fluent/version.rb +1 -1
- data/test/config/test_element.rb +135 -6
- data/test/plugin/test_buf_file.rb +71 -3
- data/test/plugin/test_buffer.rb +305 -86
- data/test/plugin/test_buffer_chunk.rb +60 -2
- data/test/plugin/test_buffer_file_chunk.rb +4 -3
- data/test/plugin/test_filter_grep.rb +25 -21
- data/test/plugin/test_filter_record_transformer.rb +75 -67
- data/test/plugin/test_filter_stdout.rb +171 -74
- data/test/plugin/test_formatter_csv.rb +94 -0
- data/test/plugin/test_formatter_json.rb +30 -0
- data/test/plugin/test_formatter_ltsv.rb +52 -0
- data/test/plugin/test_formatter_msgpack.rb +28 -0
- data/test/plugin/test_formatter_out_file.rb +95 -0
- data/test/plugin/test_formatter_single_value.rb +38 -0
- data/test/plugin/test_in_dummy.rb +95 -0
- data/test/plugin/test_in_exec.rb +27 -31
- data/test/plugin/test_in_forward.rb +24 -0
- data/test/plugin/test_in_gc_stat.rb +5 -5
- data/test/plugin/test_in_object_space.rb +4 -4
- data/test/plugin/test_in_syslog.rb +60 -35
- data/test/plugin/test_out_buffered_stdout.rb +17 -3
- data/test/plugin/test_out_forward.rb +93 -5
- data/test/plugin/test_out_stdout.rb +14 -3
- data/test/plugin/test_output_as_buffered_retries.rb +20 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +16 -0
- data/test/plugin/test_output_as_standard.rb +22 -22
- data/test/plugin/test_parser_apache.rb +13 -9
- data/test/plugin/test_parser_apache_error.rb +11 -6
- data/test/plugin/test_parser_csv.rb +35 -25
- data/test/plugin/test_parser_nginx.rb +11 -5
- data/test/plugin/test_parser_regexp.rb +235 -68
- data/test/plugin/test_parser_tsv.rb +54 -58
- data/test/plugin_helper/test_compat_parameters.rb +111 -46
- data/test/plugin_helper/test_formatter.rb +40 -0
- data/test/plugin_helper/test_inject.rb +101 -2
- data/test/plugin_helper/test_parser.rb +40 -0
- data/test/plugin_helper/test_storage.rb +43 -0
- data/test/test_event.rb +93 -0
- data/test/test_event_router.rb +13 -4
- data/test/test_event_time.rb +0 -3
- data/test/test_formatter.rb +7 -164
- data/test/test_plugin_classes.rb +28 -1
- 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.
|
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(
|
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', :
|
53
|
-
incorrect_queued: ['/mydir/mypath/myfile.q00ff.log/unknown', :
|
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 :
|
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 =
|
10
|
+
@time = event_time
|
10
11
|
end
|
11
12
|
|
12
13
|
def create_driver(conf = '')
|
13
|
-
Test::
|
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
|
45
|
+
def filter(config, msgs)
|
45
46
|
d = create_driver(config)
|
46
47
|
d.run {
|
47
48
|
msgs.each { |msg|
|
48
|
-
d.
|
49
|
+
d.feed("filter.test", @time, {'foo' => 'bar', 'message' => msg})
|
49
50
|
}
|
50
|
-
}
|
51
|
+
}
|
52
|
+
d.filtered_records
|
51
53
|
end
|
52
54
|
|
53
55
|
test 'empty config' do
|
54
|
-
|
55
|
-
assert_equal(4,
|
56
|
+
filtered_records = filter('', messages)
|
57
|
+
assert_equal(4, filtered_records.size)
|
56
58
|
end
|
57
59
|
|
58
60
|
test 'regexpN' do
|
59
|
-
|
60
|
-
assert_equal(3,
|
61
|
+
filtered_records = filter('regexp1 message WARN', messages)
|
62
|
+
assert_equal(3, filtered_records.size)
|
61
63
|
assert_block('only WARN logs') do
|
62
|
-
|
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
|
-
|
70
|
-
assert_equal(3,
|
71
|
+
filtered_records = filter('exclude1 message favicon', messages)
|
72
|
+
assert_equal(3, filtered_records.size)
|
71
73
|
assert_block('remove favicon logs') do
|
72
|
-
|
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
|
-
|
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
|
96
|
+
def filter(msg, config = 'regexp1 message 0')
|
95
97
|
d = create_driver(config)
|
96
|
-
d.
|
97
|
-
|
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
|
-
|
107
|
-
assert_equal(1,
|
110
|
+
filtered_records = filter(data)
|
111
|
+
assert_equal(1, filtered_records.size)
|
108
112
|
end
|
109
113
|
|
110
114
|
test "value boolean" do
|
111
|
-
|
112
|
-
assert_equal(1,
|
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 =
|
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::
|
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
|
41
|
+
def filter(config, msgs = [''])
|
41
42
|
d = create_driver(config)
|
42
43
|
d.run {
|
43
44
|
msgs.each { |msg|
|
44
|
-
d.
|
45
|
+
d.feed(@tag, @time, {'foo' => 'bar', 'message' => msg})
|
45
46
|
}
|
46
|
-
}
|
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
|
-
|
61
|
-
|
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
|
-
|
73
|
-
|
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
|
-
|
86
|
-
|
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
|
-
|
100
|
-
|
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
|
-
|
110
|
-
|
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
|
-
|
125
|
-
|
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
|
-
|
138
|
-
|
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
|
-
|
151
|
-
|
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
|
-
|
164
|
-
|
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
|
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.
|
183
|
+
d.feed(@tag, @time, record)
|
182
184
|
end
|
183
|
-
}
|
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
|
-
|
195
|
-
|
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
|
-
|
208
|
-
|
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
|
-
|
222
|
-
|
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
|
-
|
237
|
-
|
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
|
-
|
250
|
-
|
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
|
-
|
266
|
-
|
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
|
-
|
286
|
-
|
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
|
-
|
300
|
-
|
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
|
-
|
314
|
-
|
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
|
-
|
330
|
-
|
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
|
-
|
383
|
-
|
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
|
-
|
437
|
-
|
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
|
-
|
463
|
-
|
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
|
-
|
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
|
-
|
493
|
+
filtered = filter(config) { |d|
|
490
494
|
mock(d.instance.log).warn("failed to expand `%Q[\#{unknown['bar']}]`", anything)
|
491
495
|
}
|
492
|
-
|
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
|
-
|
507
|
-
|
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
|
-
|
524
|
-
|
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
|
-
|
539
|
-
|
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
|
-
|
567
|
-
|
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 }
|