fluentd 1.13.2-x64-mingw32 → 1.14.2-x64-mingw32
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/.drone.yml +6 -6
- data/.github/ISSUE_TEMPLATE/bug_report.yaml +1 -0
- data/.github/workflows/windows-test.yaml +3 -3
- data/CHANGELOG.md +120 -0
- data/example/v0_12_filter.conf +2 -2
- data/fluentd.gemspec +1 -1
- data/lib/fluent/command/cat.rb +13 -3
- data/lib/fluent/command/fluentd.rb +8 -0
- data/lib/fluent/compat/output.rb +9 -6
- data/lib/fluent/config/parser.rb +1 -1
- data/lib/fluent/config/v1_parser.rb +1 -1
- data/lib/fluent/event_router.rb +28 -1
- data/lib/fluent/plugin/bare_output.rb +49 -8
- data/lib/fluent/plugin/buf_file.rb +2 -2
- data/lib/fluent/plugin/buffer.rb +84 -22
- data/lib/fluent/plugin/file_wrapper.rb +22 -0
- data/lib/fluent/plugin/filter.rb +35 -1
- data/lib/fluent/plugin/in_http.rb +21 -2
- data/lib/fluent/plugin/in_monitor_agent.rb +4 -2
- data/lib/fluent/plugin/in_syslog.rb +13 -1
- data/lib/fluent/plugin/in_tail/position_file.rb +20 -18
- data/lib/fluent/plugin/in_tail.rb +46 -6
- data/lib/fluent/plugin/input.rb +39 -1
- data/lib/fluent/plugin/metrics.rb +119 -0
- data/lib/fluent/plugin/metrics_local.rb +96 -0
- data/lib/fluent/plugin/multi_output.rb +43 -6
- data/lib/fluent/plugin/out_copy.rb +1 -1
- data/lib/fluent/plugin/out_forward.rb +15 -7
- data/lib/fluent/plugin/output.rb +80 -38
- data/lib/fluent/plugin/parser_apache2.rb +1 -1
- data/lib/fluent/plugin/storage_local.rb +3 -5
- data/lib/fluent/plugin.rb +10 -1
- data/lib/fluent/plugin_helper/event_emitter.rb +8 -1
- data/lib/fluent/plugin_helper/metrics.rb +129 -0
- data/lib/fluent/plugin_helper/server.rb +4 -2
- data/lib/fluent/plugin_helper.rb +1 -0
- data/lib/fluent/plugin_id.rb +2 -1
- data/lib/fluent/root_agent.rb +6 -0
- data/lib/fluent/supervisor.rb +4 -2
- data/lib/fluent/system_config.rb +9 -1
- data/lib/fluent/time.rb +21 -20
- data/lib/fluent/version.rb +1 -1
- data/test/command/test_cat.rb +31 -2
- data/test/config/test_system_config.rb +6 -0
- data/test/plugin/in_tail/test_io_handler.rb +12 -4
- data/test/plugin/in_tail/test_position_file.rb +48 -8
- data/test/plugin/test_bare_output.rb +13 -0
- data/test/plugin/test_buffer.rb +8 -2
- data/test/plugin/test_file_wrapper.rb +11 -0
- data/test/plugin/test_filter.rb +11 -0
- data/test/plugin/test_in_http.rb +40 -0
- data/test/plugin/test_in_monitor_agent.rb +214 -8
- data/test/plugin/test_in_syslog.rb +35 -0
- data/test/plugin/test_in_tail.rb +72 -29
- data/test/plugin/test_input.rb +11 -0
- data/test/plugin/test_metrics.rb +294 -0
- data/test/plugin/test_metrics_local.rb +96 -0
- data/test/plugin/test_multi_output.rb +25 -1
- data/test/plugin/test_output.rb +16 -0
- data/test/plugin_helper/test_event_emitter.rb +29 -0
- data/test/plugin_helper/test_metrics.rb +137 -0
- data/test/test_plugin_classes.rb +102 -0
- data/test/test_root_agent.rb +30 -1
- data/test/test_time_parser.rb +22 -0
- metadata +13 -4
data/lib/fluent/time.rb
CHANGED
@@ -226,19 +226,16 @@ module Fluent
|
|
226
226
|
|
227
227
|
format_with_timezone = format && (format.include?("%z") || format.include?("%Z"))
|
228
228
|
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
when localtime then 0
|
240
|
-
else Time.now.localtime.utc_offset # utc
|
241
|
-
end
|
229
|
+
utc_offset = case
|
230
|
+
when format_with_timezone then
|
231
|
+
nil
|
232
|
+
when timezone then
|
233
|
+
Fluent::Timezone.utc_offset(timezone)
|
234
|
+
when localtime then
|
235
|
+
nil
|
236
|
+
else
|
237
|
+
0 # utc
|
238
|
+
end
|
242
239
|
|
243
240
|
strptime = format && (Strptime.new(format) rescue nil)
|
244
241
|
|
@@ -247,16 +244,20 @@ module Fluent
|
|
247
244
|
when format_with_timezone then ->(v){ Fluent::EventTime.from_time(Time.strptime(v, format)) }
|
248
245
|
when format == '%iso8601' then ->(v){ Fluent::EventTime.from_time(Time.iso8601(v)) }
|
249
246
|
when strptime then
|
250
|
-
if
|
251
|
-
->(v)
|
247
|
+
if utc_offset.nil?
|
248
|
+
->(v){ t = strptime.exec(v); Fluent::EventTime.new(t.to_i, t.nsec) }
|
249
|
+
elsif utc_offset.respond_to?(:call)
|
250
|
+
->(v) { t = strptime.exec(v); Fluent::EventTime.new(t.to_i + t.utc_offset - utc_offset.call(t), t.nsec) }
|
252
251
|
else
|
253
|
-
->(v) { t = strptime.exec(v); Fluent::EventTime.new(t.to_i +
|
252
|
+
->(v) { t = strptime.exec(v); Fluent::EventTime.new(t.to_i + t.utc_offset - utc_offset, t.nsec) }
|
254
253
|
end
|
255
|
-
when format
|
256
|
-
if
|
257
|
-
->(v){ t = Time.strptime(v, format); Fluent::EventTime.new(t.to_i
|
254
|
+
when format then
|
255
|
+
if utc_offset.nil?
|
256
|
+
->(v){ t = Time.strptime(v, format); Fluent::EventTime.new(t.to_i, t.nsec) }
|
257
|
+
elsif utc_offset.respond_to?(:call)
|
258
|
+
->(v){ t = Time.strptime(v, format); Fluent::EventTime.new(t.to_i + t.utc_offset - utc_offset.call(t), t.nsec) }
|
258
259
|
else
|
259
|
-
->(v){ t = Time.strptime(v, format); Fluent::EventTime.new(t.to_i +
|
260
|
+
->(v){ t = Time.strptime(v, format); Fluent::EventTime.new(t.to_i + t.utc_offset - utc_offset, t.nsec) }
|
260
261
|
end
|
261
262
|
else ->(v){ Fluent::EventTime.parse(v) }
|
262
263
|
end
|
data/lib/fluent/version.rb
CHANGED
data/test/command/test_cat.rb
CHANGED
@@ -69,7 +69,7 @@ class TestFluentCat < ::Test::Unit::TestCase
|
|
69
69
|
def test_cat_json
|
70
70
|
d = create_driver
|
71
71
|
d.run(expect_records: 1) do
|
72
|
-
Open3.pipeline_w("
|
72
|
+
Open3.pipeline_w("#{ServerEngine.ruby_bin_path} #{FLUENT_CAT_COMMAND} --port #{@port} json") do |stdin|
|
73
73
|
stdin.puts('{"key":"value"}')
|
74
74
|
stdin.close
|
75
75
|
end
|
@@ -86,7 +86,7 @@ class TestFluentCat < ::Test::Unit::TestCase
|
|
86
86
|
path = d.instance.write(@chunk)
|
87
87
|
d = create_driver
|
88
88
|
d.run(expect_records: 1) do
|
89
|
-
Open3.pipeline_w("
|
89
|
+
Open3.pipeline_w("#{ServerEngine.ruby_bin_path} #{FLUENT_CAT_COMMAND} --port #{@port} --format msgpack secondary") do |stdin|
|
90
90
|
stdin.write(File.read(path))
|
91
91
|
stdin.close
|
92
92
|
end
|
@@ -96,4 +96,33 @@ class TestFluentCat < ::Test::Unit::TestCase
|
|
96
96
|
[d.events.size, event.first, event.last])
|
97
97
|
end
|
98
98
|
end
|
99
|
+
|
100
|
+
sub_test_case "send specific event time" do
|
101
|
+
def test_without_event_time
|
102
|
+
event_time = Fluent::EventTime.now
|
103
|
+
d = create_driver
|
104
|
+
d.run(expect_records: 1) do
|
105
|
+
Open3.pipeline_w("#{ServerEngine.ruby_bin_path} #{FLUENT_CAT_COMMAND} --port #{@port} tag") do |stdin|
|
106
|
+
stdin.puts('{"key":"value"}')
|
107
|
+
stdin.close
|
108
|
+
end
|
109
|
+
end
|
110
|
+
event = d.events.first
|
111
|
+
assert_in_delta(event_time.to_f, event[1].to_f, 3.0) # expect command to be finished in 3 seconds
|
112
|
+
assert_equal([1, "tag", true, @record],
|
113
|
+
[d.events.size, event.first, event_time.to_f < event[1].to_f, event.last])
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_with_event_time
|
117
|
+
event_time = "2021-01-02 13:14:15.0+00:00"
|
118
|
+
d = create_driver
|
119
|
+
d.run(expect_records: 1) do
|
120
|
+
Open3.pipeline_w("#{ServerEngine.ruby_bin_path} #{FLUENT_CAT_COMMAND} --port #{@port} --event-time '#{event_time}' tag") do |stdin|
|
121
|
+
stdin.puts('{"key":"value"}')
|
122
|
+
stdin.close
|
123
|
+
end
|
124
|
+
end
|
125
|
+
assert_equal([["tag", Fluent::EventTime.parse(event_time), @record]], d.events)
|
126
|
+
end
|
127
|
+
end
|
99
128
|
end
|
@@ -28,6 +28,8 @@ module Fluent::Config
|
|
28
28
|
log_event_label: nil,
|
29
29
|
log_event_verbose: nil,
|
30
30
|
without_source: nil,
|
31
|
+
enable_input_metrics: nil,
|
32
|
+
enable_size_metrics: nil,
|
31
33
|
emit_error_log_interval: nil,
|
32
34
|
file_permission: nil,
|
33
35
|
dir_permission: nil,
|
@@ -77,6 +79,8 @@ module Fluent::Config
|
|
77
79
|
assert_nil(sc.emit_error_log_interval)
|
78
80
|
assert_nil(sc.suppress_config_dump)
|
79
81
|
assert_nil(sc.without_source)
|
82
|
+
assert_nil(sc.enable_input_metrics)
|
83
|
+
assert_nil(sc.enable_size_metrics)
|
80
84
|
assert_nil(sc.enable_msgpack_time_support)
|
81
85
|
assert_equal(:text, sc.log.format)
|
82
86
|
assert_equal('%Y-%m-%d %H:%M:%S %z', sc.log.time_format)
|
@@ -93,6 +97,8 @@ module Fluent::Config
|
|
93
97
|
'without_source' => ['without_source', true],
|
94
98
|
'strict_config_value' => ['strict_config_value', true],
|
95
99
|
'enable_msgpack_time_support' => ['enable_msgpack_time_support', true],
|
100
|
+
'enable_input_metrics' => ['enable_input_metrics', true],
|
101
|
+
'enable_size_metrics' => ['enable_size_metrics', true],
|
96
102
|
)
|
97
103
|
test "accepts parameters" do |(k, v)|
|
98
104
|
conf = parse_text(<<-EOS)
|
@@ -1,11 +1,19 @@
|
|
1
1
|
require_relative '../../helper'
|
2
2
|
|
3
3
|
require 'fluent/plugin/in_tail'
|
4
|
+
require 'fluent/plugin/metrics_local'
|
4
5
|
require 'tempfile'
|
5
6
|
|
6
7
|
class IntailIOHandlerTest < Test::Unit::TestCase
|
7
8
|
setup do
|
8
9
|
@file = Tempfile.new('intail_io_handler').binmode
|
10
|
+
opened_file_metrics = Fluent::Plugin::LocalMetrics.new
|
11
|
+
opened_file_metrics.configure(config_element('metrics', '', {}))
|
12
|
+
closed_file_metrics = Fluent::Plugin::LocalMetrics.new
|
13
|
+
closed_file_metrics.configure(config_element('metrics', '', {}))
|
14
|
+
rotated_file_metrics = Fluent::Plugin::LocalMetrics.new
|
15
|
+
rotated_file_metrics.configure(config_element('metrics', '', {}))
|
16
|
+
@metrics = Fluent::Plugin::TailInput::MetricsInfo.new(opened_file_metrics, closed_file_metrics, rotated_file_metrics)
|
9
17
|
end
|
10
18
|
|
11
19
|
teardown do
|
@@ -30,7 +38,7 @@ class IntailIOHandlerTest < Test::Unit::TestCase
|
|
30
38
|
end
|
31
39
|
|
32
40
|
returned_lines = ''
|
33
|
-
r = Fluent::Plugin::TailInput::TailWatcher::IOHandler.new(watcher, path: @file.path, read_lines_limit: 100, read_bytes_limit_per_second: -1, log: $log, open_on_every_update: false) do |lines, _watcher|
|
41
|
+
r = Fluent::Plugin::TailInput::TailWatcher::IOHandler.new(watcher, path: @file.path, read_lines_limit: 100, read_bytes_limit_per_second: -1, log: $log, open_on_every_update: false, metrics: @metrics) do |lines, _watcher|
|
34
42
|
returned_lines << lines.join
|
35
43
|
true
|
36
44
|
end
|
@@ -62,7 +70,7 @@ class IntailIOHandlerTest < Test::Unit::TestCase
|
|
62
70
|
end
|
63
71
|
|
64
72
|
returned_lines = ''
|
65
|
-
r = Fluent::Plugin::TailInput::TailWatcher::IOHandler.new(watcher, path: @file.path, read_lines_limit: 100, read_bytes_limit_per_second: -1, log: $log, open_on_every_update: true) do |lines, _watcher|
|
73
|
+
r = Fluent::Plugin::TailInput::TailWatcher::IOHandler.new(watcher, path: @file.path, read_lines_limit: 100, read_bytes_limit_per_second: -1, log: $log, open_on_every_update: true, metrics: @metrics) do |lines, _watcher|
|
66
74
|
returned_lines << lines.join
|
67
75
|
true
|
68
76
|
end
|
@@ -93,7 +101,7 @@ class IntailIOHandlerTest < Test::Unit::TestCase
|
|
93
101
|
end
|
94
102
|
|
95
103
|
returned_lines = []
|
96
|
-
r = Fluent::Plugin::TailInput::TailWatcher::IOHandler.new(watcher, path: @file.path, read_lines_limit: 5, read_bytes_limit_per_second: -1, log: $log, open_on_every_update: false) do |lines, _watcher|
|
104
|
+
r = Fluent::Plugin::TailInput::TailWatcher::IOHandler.new(watcher, path: @file.path, read_lines_limit: 5, read_bytes_limit_per_second: -1, log: $log, open_on_every_update: false, metrics: @metrics) do |lines, _watcher|
|
97
105
|
returned_lines << lines.dup
|
98
106
|
true
|
99
107
|
end
|
@@ -119,7 +127,7 @@ class IntailIOHandlerTest < Test::Unit::TestCase
|
|
119
127
|
end
|
120
128
|
|
121
129
|
returned_lines = []
|
122
|
-
r = Fluent::Plugin::TailInput::TailWatcher::IOHandler.new(watcher, path: @file.path, read_lines_limit: 5, read_bytes_limit_per_second: -1, log: $log, open_on_every_update: false) do |lines, _watcher|
|
130
|
+
r = Fluent::Plugin::TailInput::TailWatcher::IOHandler.new(watcher, path: @file.path, read_lines_limit: 5, read_bytes_limit_per_second: -1, log: $log, open_on_every_update: false, metrics: @metrics) do |lines, _watcher|
|
123
131
|
returned_lines << lines.dup
|
124
132
|
true
|
125
133
|
end
|
@@ -22,6 +22,10 @@ class IntailPositionFileTest < Test::Unit::TestCase
|
|
22
22
|
invalidpath100000000000000000000000000000000
|
23
23
|
unwatched\t#{UNWATCHED_STR}\t0000000000000000
|
24
24
|
EOF
|
25
|
+
TEST_CONTENT_PATHS = {
|
26
|
+
"valid_path" => Fluent::Plugin::TailInput::TargetInfo.new("valid_path", 1),
|
27
|
+
"inode23bit" => Fluent::Plugin::TailInput::TargetInfo.new("inode23bit", 0),
|
28
|
+
}
|
25
29
|
|
26
30
|
def write_data(f, content)
|
27
31
|
f.write(content)
|
@@ -36,7 +40,11 @@ class IntailPositionFileTest < Test::Unit::TestCase
|
|
36
40
|
|
37
41
|
test '.load' do
|
38
42
|
write_data(@file, TEST_CONTENT)
|
39
|
-
|
43
|
+
paths = {
|
44
|
+
"valid_path" => Fluent::Plugin::TailInput::TargetInfo.new("valid_path", 1),
|
45
|
+
"inode23bit" => Fluent::Plugin::TailInput::TargetInfo.new("inode23bit", 2),
|
46
|
+
}
|
47
|
+
Fluent::Plugin::TailInput::PositionFile.load(@file, false, TEST_CONTENT_PATHS, **{logger: $log})
|
40
48
|
|
41
49
|
@file.seek(0)
|
42
50
|
lines = @file.readlines
|
@@ -48,7 +56,7 @@ class IntailPositionFileTest < Test::Unit::TestCase
|
|
48
56
|
sub_test_case '#try_compact' do
|
49
57
|
test 'compact invalid and convert 32 bit inode value' do
|
50
58
|
write_data(@file, TEST_CONTENT)
|
51
|
-
Fluent::Plugin::TailInput::PositionFile.new(@file, false,
|
59
|
+
Fluent::Plugin::TailInput::PositionFile.new(@file, false, **{logger: $log}).try_compact
|
52
60
|
|
53
61
|
@file.seek(0)
|
54
62
|
lines = @file.readlines
|
@@ -62,7 +70,7 @@ class IntailPositionFileTest < Test::Unit::TestCase
|
|
62
70
|
valid_path\t0000000000000002\t0000000000000001
|
63
71
|
valid_path\t0000000000000003\t0000000000000004
|
64
72
|
EOF
|
65
|
-
Fluent::Plugin::TailInput::PositionFile.new(@file, false,
|
73
|
+
Fluent::Plugin::TailInput::PositionFile.new(@file, false, **{logger: $log}).try_compact
|
66
74
|
|
67
75
|
@file.seek(0)
|
68
76
|
lines = @file.readlines
|
@@ -71,7 +79,7 @@ class IntailPositionFileTest < Test::Unit::TestCase
|
|
71
79
|
|
72
80
|
test 'does not change when the file is changed' do
|
73
81
|
write_data(@file, TEST_CONTENT)
|
74
|
-
pf = Fluent::Plugin::TailInput::PositionFile.new(@file, false,
|
82
|
+
pf = Fluent::Plugin::TailInput::PositionFile.new(@file, false, **{logger: $log})
|
75
83
|
|
76
84
|
mock.proxy(pf).fetch_compacted_entries do |r|
|
77
85
|
@file.write("unwatched\t#{UNWATCHED_STR}\t0000000000000000\n")
|
@@ -86,7 +94,7 @@ class IntailPositionFileTest < Test::Unit::TestCase
|
|
86
94
|
end
|
87
95
|
|
88
96
|
test 'update seek position of remained position entry' do
|
89
|
-
pf = Fluent::Plugin::TailInput::PositionFile.new(@file, false,
|
97
|
+
pf = Fluent::Plugin::TailInput::PositionFile.new(@file, false, **{logger: $log})
|
90
98
|
target_info1 = Fluent::Plugin::TailInput::TargetInfo.new('path1', -1)
|
91
99
|
target_info2 = Fluent::Plugin::TailInput::TargetInfo.new('path2', -1)
|
92
100
|
target_info3 = Fluent::Plugin::TailInput::TargetInfo.new('path3', -1)
|
@@ -115,12 +123,35 @@ class IntailPositionFileTest < Test::Unit::TestCase
|
|
115
123
|
assert_equal "path3\t#{UNWATCHED_STR}\t0000000000000000\n", lines[1]
|
116
124
|
assert_equal 2, lines.size
|
117
125
|
end
|
126
|
+
|
127
|
+
test 'should ignore initial existing files on follow_inode' do
|
128
|
+
write_data(@file, TEST_CONTENT)
|
129
|
+
pos_file = Fluent::Plugin::TailInput::PositionFile.load(@file, true, TEST_CONTENT_PATHS, **{logger: $log})
|
130
|
+
@file.seek(0)
|
131
|
+
assert_equal([], @file.readlines)
|
132
|
+
|
133
|
+
@file.seek(0)
|
134
|
+
write_data(@file, TEST_CONTENT)
|
135
|
+
pos_file.try_compact
|
136
|
+
|
137
|
+
@file.seek(0)
|
138
|
+
assert_equal([
|
139
|
+
"valid_path\t0000000000000002\t0000000000000001\n",
|
140
|
+
"inode23bit\t0000000000000000\t0000000000000000\n",
|
141
|
+
],
|
142
|
+
@file.readlines)
|
143
|
+
end
|
118
144
|
end
|
119
145
|
|
120
146
|
sub_test_case '#load' do
|
121
147
|
test 'compact invalid and convert 32 bit inode value' do
|
122
148
|
write_data(@file, TEST_CONTENT)
|
123
|
-
|
149
|
+
invalid_path = "invalidpath100000000000000000000000000000000"
|
150
|
+
paths = TEST_CONTENT_PATHS.merge({
|
151
|
+
invalid_path => Fluent::Plugin::TailInput::TargetInfo.new(invalid_path, 0),
|
152
|
+
"unwatched" => Fluent::Plugin::TailInput::TargetInfo.new("unwatched", 0),
|
153
|
+
})
|
154
|
+
Fluent::Plugin::TailInput::PositionFile.load(@file, false, TEST_CONTENT_PATHS, **{logger: $log})
|
124
155
|
|
125
156
|
@file.seek(0)
|
126
157
|
lines = @file.readlines
|
@@ -129,12 +160,21 @@ class IntailPositionFileTest < Test::Unit::TestCase
|
|
129
160
|
assert_equal "inode23bit\t0000000000000000\t0000000000000000\n", lines[1]
|
130
161
|
end
|
131
162
|
|
163
|
+
test 'compact deleted paths' do
|
164
|
+
write_data(@file, TEST_CONTENT)
|
165
|
+
Fluent::Plugin::TailInput::PositionFile.load(@file, false, {}, **{logger: $log})
|
166
|
+
|
167
|
+
@file.seek(0)
|
168
|
+
lines = @file.readlines
|
169
|
+
assert_equal [], lines
|
170
|
+
end
|
171
|
+
|
132
172
|
test 'compact data if duplicated line' do
|
133
173
|
write_data(@file, <<~EOF)
|
134
174
|
valid_path\t0000000000000002\t0000000000000001
|
135
175
|
valid_path\t0000000000000003\t0000000000000004
|
136
176
|
EOF
|
137
|
-
Fluent::Plugin::TailInput::PositionFile.new(@file, false,
|
177
|
+
Fluent::Plugin::TailInput::PositionFile.new(@file, false, **{logger: $log}).load
|
138
178
|
|
139
179
|
@file.seek(0)
|
140
180
|
lines = @file.readlines
|
@@ -145,7 +185,7 @@ class IntailPositionFileTest < Test::Unit::TestCase
|
|
145
185
|
sub_test_case '#[]' do
|
146
186
|
test 'return entry' do
|
147
187
|
write_data(@file, TEST_CONTENT)
|
148
|
-
pf = Fluent::Plugin::TailInput::PositionFile.load(@file, false,
|
188
|
+
pf = Fluent::Plugin::TailInput::PositionFile.load(@file, false, TEST_CONTENT_PATHS, **{logger: $log})
|
149
189
|
|
150
190
|
valid_target_info = Fluent::Plugin::TailInput::TargetInfo.new('valid_path', File.stat(@file).ino)
|
151
191
|
f = pf[valid_target_info]
|
@@ -95,6 +95,19 @@ class BareOutputTest < Test::Unit::TestCase
|
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
|
+
test 'can use metrics plugins and fallback methods' do
|
99
|
+
@p.configure(config_element('ROOT', '', {'@log_level' => 'debug'}))
|
100
|
+
|
101
|
+
%w[num_errors_metrics emit_count_metrics emit_size_metrics emit_records_metrics].each do |metric_name|
|
102
|
+
assert_true @p.instance_variable_get(:"@#{metric_name}").is_a?(Fluent::Plugin::Metrics)
|
103
|
+
end
|
104
|
+
|
105
|
+
assert_equal 0, @p.num_errors
|
106
|
+
assert_equal 0, @p.emit_count
|
107
|
+
assert_equal 0, @p.emit_size
|
108
|
+
assert_equal 0, @p.emit_records
|
109
|
+
end
|
110
|
+
|
98
111
|
test 'can get input event stream to write' do
|
99
112
|
@p.configure(config_element('ROOT'))
|
100
113
|
@p.start
|
data/test/plugin/test_buffer.rb
CHANGED
@@ -238,8 +238,14 @@ class BufferTest < Test::Unit::TestCase
|
|
238
238
|
assert_nil @p.queue
|
239
239
|
assert_nil @p.dequeued
|
240
240
|
assert_nil @p.queued_num
|
241
|
-
|
242
|
-
|
241
|
+
assert_nil @p.stage_length_metrics
|
242
|
+
assert_nil @p.stage_size_metrics
|
243
|
+
assert_nil @p.queue_length_metrics
|
244
|
+
assert_nil @p.queue_size_metrics
|
245
|
+
assert_nil @p.available_buffer_space_ratios_metrics
|
246
|
+
assert_nil @p.total_queued_size_metrics
|
247
|
+
assert_nil @p.newest_timekey_metrics
|
248
|
+
assert_nil @p.oldest_timekey_metrics
|
243
249
|
assert_equal [], @p.timekeys
|
244
250
|
end
|
245
251
|
|
@@ -96,6 +96,17 @@ class FileWrapperTest < Test::Unit::TestCase
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
99
|
+
test 'Errno::ENOENT raised on DeletePending' do
|
100
|
+
path = "#{TMP_DIR}/deletepending.txt"
|
101
|
+
file = Fluent::WindowsFile.new(path, mode='w')
|
102
|
+
File.delete(path)
|
103
|
+
assert_raise(Errno::ENOENT) do
|
104
|
+
file.stat
|
105
|
+
ensure
|
106
|
+
file.close if file
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
99
110
|
test 'ERROR_SHARING_VIOLATION raised' do
|
100
111
|
begin
|
101
112
|
path = "#{TMP_DIR}/test_windows_file.txt"
|
data/test/plugin/test_filter.rb
CHANGED
@@ -165,6 +165,17 @@ class FilterPluginTest < Test::Unit::TestCase
|
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|
168
|
+
test 'can use metrics plugins and fallback methods' do
|
169
|
+
@p.configure(config_element('ROOT', '', {'@log_level' => 'debug'}))
|
170
|
+
|
171
|
+
%w[emit_size_metrics emit_records_metrics].each do |metric_name|
|
172
|
+
assert_true @p.instance_variable_get(:"@#{metric_name}").is_a?(Fluent::Plugin::Metrics)
|
173
|
+
end
|
174
|
+
|
175
|
+
assert_equal 0, @p.emit_size
|
176
|
+
assert_equal 0, @p.emit_records
|
177
|
+
end
|
178
|
+
|
168
179
|
test 'are available with multi worker configuration in default' do
|
169
180
|
assert @p.multi_workers_ready?
|
170
181
|
end
|
data/test/plugin/test_in_http.rb
CHANGED
@@ -856,6 +856,46 @@ class HttpInputTest < Test::Unit::TestCase
|
|
856
856
|
end
|
857
857
|
end
|
858
858
|
|
859
|
+
def test_cors_allow_credentials
|
860
|
+
d = create_driver(config + %[
|
861
|
+
cors_allow_origins ["http://foo.com"]
|
862
|
+
cors_allow_credentials
|
863
|
+
])
|
864
|
+
assert_equal true, d.instance.cors_allow_credentials
|
865
|
+
|
866
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
867
|
+
event = ["tag1", time, {"a"=>1}]
|
868
|
+
res_code = nil
|
869
|
+
res_header = nil
|
870
|
+
|
871
|
+
d.run do
|
872
|
+
res = post("/#{event[0]}", {"json"=>event[2].to_json, "time"=>time.to_i.to_s}, {"Origin"=>"http://foo.com"})
|
873
|
+
res_code = res.code
|
874
|
+
res_header = res["Access-Control-Allow-Credentials"]
|
875
|
+
end
|
876
|
+
assert_equal(
|
877
|
+
{
|
878
|
+
response_code: "200",
|
879
|
+
allow_credentials_header: "true",
|
880
|
+
events: [event]
|
881
|
+
},
|
882
|
+
{
|
883
|
+
response_code: res_code,
|
884
|
+
allow_credentials_header: res_header,
|
885
|
+
events: d.events
|
886
|
+
}
|
887
|
+
)
|
888
|
+
end
|
889
|
+
|
890
|
+
def test_cors_allow_credentials_for_wildcard_origins
|
891
|
+
assert_raise(Fluent::ConfigError) do
|
892
|
+
create_driver(config + %[
|
893
|
+
cors_allow_origins ["*"]
|
894
|
+
cors_allow_credentials
|
895
|
+
])
|
896
|
+
end
|
897
|
+
end
|
898
|
+
|
859
899
|
def test_content_encoding_gzip
|
860
900
|
d = create_driver
|
861
901
|
|