fluentd 1.11.5-x64-mingw32 → 1.12.4-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/.deepsource.toml +13 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- data/.github/ISSUE_TEMPLATE/config.yml +5 -0
- data/.github/workflows/linux-test.yaml +36 -0
- data/.github/workflows/macos-test.yaml +30 -0
- data/.github/workflows/stale-actions.yml +22 -0
- data/.github/workflows/windows-test.yaml +35 -0
- data/.gitlab-ci.yml +41 -19
- data/CHANGELOG.md +158 -0
- data/MAINTAINERS.md +5 -2
- data/README.md +7 -4
- data/bin/fluent-cap-ctl +7 -0
- data/bin/fluent-ctl +7 -0
- data/fluentd.gemspec +6 -4
- data/lib/fluent/capability.rb +87 -0
- data/lib/fluent/command/bundler_injection.rb +1 -1
- data/lib/fluent/command/ca_generate.rb +6 -3
- data/lib/fluent/command/cap_ctl.rb +174 -0
- data/lib/fluent/command/cat.rb +0 -1
- data/lib/fluent/command/ctl.rb +177 -0
- data/lib/fluent/command/fluentd.rb +4 -0
- data/lib/fluent/command/plugin_config_formatter.rb +18 -2
- data/lib/fluent/command/plugin_generator.rb +31 -1
- data/lib/fluent/compat/parser.rb +2 -2
- data/lib/fluent/config/section.rb +2 -2
- data/lib/fluent/config/types.rb +2 -2
- data/lib/fluent/env.rb +4 -0
- data/lib/fluent/event.rb +3 -13
- data/lib/fluent/load.rb +0 -1
- data/lib/fluent/plugin.rb +5 -0
- data/lib/fluent/plugin/buffer.rb +2 -21
- data/lib/fluent/plugin/file_wrapper.rb +39 -3
- data/lib/fluent/plugin/formatter.rb +2 -2
- data/lib/fluent/plugin/formatter_csv.rb +1 -1
- data/lib/fluent/plugin/formatter_hash.rb +1 -1
- data/lib/fluent/plugin/formatter_ltsv.rb +5 -5
- data/lib/fluent/plugin/formatter_out_file.rb +3 -3
- data/lib/fluent/plugin/formatter_single_value.rb +2 -2
- data/lib/fluent/plugin/formatter_tsv.rb +2 -2
- data/lib/fluent/plugin/in_http.rb +24 -3
- data/lib/fluent/plugin/in_monitor_agent.rb +1 -1
- data/lib/fluent/plugin/in_tail.rb +129 -41
- data/lib/fluent/plugin/in_tail/position_file.rb +53 -14
- data/lib/fluent/plugin/in_tcp.rb +1 -0
- data/lib/fluent/plugin/out_copy.rb +18 -5
- data/lib/fluent/plugin/out_exec_filter.rb +3 -3
- data/lib/fluent/plugin/out_forward.rb +61 -28
- data/lib/fluent/plugin/out_http.rb +9 -2
- data/lib/fluent/plugin/output.rb +18 -10
- data/lib/fluent/plugin/parser_csv.rb +2 -2
- data/lib/fluent/plugin/parser_syslog.rb +2 -2
- data/lib/fluent/plugin/storage_local.rb +4 -4
- data/lib/fluent/plugin_helper/http_server/compat/server.rb +1 -1
- data/lib/fluent/plugin_helper/inject.rb +4 -2
- data/lib/fluent/plugin_helper/retry_state.rb +4 -0
- data/lib/fluent/plugin_helper/server.rb +4 -2
- data/lib/fluent/plugin_helper/socket_option.rb +2 -2
- data/lib/fluent/supervisor.rb +153 -47
- data/lib/fluent/system_config.rb +2 -1
- data/lib/fluent/time.rb +58 -1
- data/lib/fluent/version.rb +1 -1
- data/lib/fluent/winsvc.rb +22 -4
- data/templates/new_gem/fluent-plugin.gemspec.erb +3 -3
- data/templates/plugin_config_formatter/param.md-table.erb +10 -0
- data/test/command/test_cap_ctl.rb +100 -0
- data/test/command/test_ctl.rb +57 -0
- data/test/command/test_fluentd.rb +38 -0
- data/test/command/test_plugin_config_formatter.rb +124 -2
- data/test/config/test_configurable.rb +1 -1
- data/test/plugin/in_tail/test_position_file.rb +100 -26
- data/test/plugin/test_file_wrapper.rb +105 -0
- data/test/plugin/test_in_exec.rb +1 -1
- data/test/plugin/test_in_http.rb +25 -0
- data/test/plugin/test_in_tail.rb +503 -42
- data/test/plugin/test_out_copy.rb +87 -0
- data/test/plugin/test_out_forward.rb +94 -6
- data/test/plugin/test_out_http.rb +20 -1
- data/test/plugin/test_output.rb +15 -3
- data/test/plugin/test_output_as_buffered_backup.rb +2 -0
- data/test/plugin/test_parser_csv.rb +14 -0
- data/test/plugin/test_parser_syslog.rb +16 -2
- data/test/plugin/test_sd_file.rb +1 -1
- data/test/plugin_helper/service_discovery/test_manager.rb +1 -1
- data/test/plugin_helper/test_child_process.rb +5 -2
- data/test/plugin_helper/test_http_server_helper.rb +4 -2
- data/test/plugin_helper/test_inject.rb +29 -0
- data/test/plugin_helper/test_server.rb +26 -7
- data/test/test_capability.rb +74 -0
- data/test/test_event.rb +16 -0
- data/test/test_formatter.rb +30 -0
- data/test/test_output.rb +2 -2
- data/test/test_supervisor.rb +133 -10
- data/test/test_time_parser.rb +109 -0
- metadata +85 -31
- data/.travis.yml +0 -57
- data/appveyor.yml +0 -28
data/lib/fluent/system_config.rb
CHANGED
@@ -27,7 +27,7 @@ module Fluent
|
|
27
27
|
:log_event_verbose, :ignore_repeated_log_interval, :ignore_same_log_interval,
|
28
28
|
:without_source, :rpc_endpoint, :enable_get_dump, :process_name,
|
29
29
|
:file_permission, :dir_permission, :counter_server, :counter_client,
|
30
|
-
:strict_config_value, :enable_msgpack_time_support
|
30
|
+
:strict_config_value, :enable_msgpack_time_support, :disable_shared_socket
|
31
31
|
]
|
32
32
|
|
33
33
|
config_param :workers, :integer, default: 1
|
@@ -45,6 +45,7 @@ module Fluent
|
|
45
45
|
config_param :process_name, :string, default: nil
|
46
46
|
config_param :strict_config_value, :bool, default: nil
|
47
47
|
config_param :enable_msgpack_time_support, :bool, default: nil
|
48
|
+
config_param :disable_shared_socket, :bool, default: nil
|
48
49
|
config_param :file_permission, default: nil do |v|
|
49
50
|
v.to_i(8)
|
50
51
|
end
|
data/lib/fluent/time.rb
CHANGED
@@ -50,6 +50,7 @@ module Fluent
|
|
50
50
|
def to_int
|
51
51
|
@sec
|
52
52
|
end
|
53
|
+
alias :to_i :to_int
|
53
54
|
|
54
55
|
def to_f
|
55
56
|
@sec + @nsec / 1_000_000_000.0
|
@@ -131,13 +132,14 @@ module Fluent
|
|
131
132
|
end
|
132
133
|
|
133
134
|
module TimeMixin
|
134
|
-
TIME_TYPES = ['string', 'unixtime', 'float']
|
135
|
+
TIME_TYPES = ['string', 'unixtime', 'float', 'mixed']
|
135
136
|
|
136
137
|
TIME_PARAMETERS = [
|
137
138
|
[:time_format, :string, {default: nil}],
|
138
139
|
[:localtime, :bool, {default: true}], # UTC if :localtime is false and :timezone is nil
|
139
140
|
[:utc, :bool, {default: false}], # to turn :localtime false
|
140
141
|
[:timezone, :string, {default: nil}],
|
142
|
+
[:time_format_fallbacks, :array, {default: []}], # try time_format, then try fallbacks
|
141
143
|
]
|
142
144
|
TIME_FULL_PARAMETERS = [
|
143
145
|
# To avoid to define :time_type twice (in plugin_helper/inject)
|
@@ -169,6 +171,12 @@ module Fluent
|
|
169
171
|
raise Fluent::ConfigError, "both of utc and localtime are specified, use only one of them"
|
170
172
|
end
|
171
173
|
|
174
|
+
if conf.has_key?('time_type') and @time_type == :mixed
|
175
|
+
if @time_format.nil? and @time_format_fallbacks.empty?
|
176
|
+
raise Fluent::ConfigError, "time_type is :mixed but time_format and time_format_fallbacks is empty."
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
172
180
|
Fluent::Timezone.validate!(@timezone) if @timezone
|
173
181
|
end
|
174
182
|
end
|
@@ -179,6 +187,7 @@ module Fluent
|
|
179
187
|
end
|
180
188
|
|
181
189
|
def time_parser_create(type: @time_type, format: @time_format, timezone: @timezone, force_localtime: false)
|
190
|
+
return MixedTimeParser.new(type, format, @localtime, timezone, @utc, force_localtime, @time_format_fallbacks) if type == :mixed
|
182
191
|
return NumericTimeParser.new(type) if type != :string
|
183
192
|
return TimeParser.new(format, true, nil) if force_localtime
|
184
193
|
|
@@ -451,4 +460,52 @@ module Fluent
|
|
451
460
|
end
|
452
461
|
end
|
453
462
|
end
|
463
|
+
|
464
|
+
# MixedTimeParser is available when time_type is set to :mixed
|
465
|
+
#
|
466
|
+
# Use Case 1: primary format is specified explicitly in time_format
|
467
|
+
# time_type mixed
|
468
|
+
# time_format %iso8601
|
469
|
+
# time_format_fallbacks unixtime
|
470
|
+
# Use Case 2: time_format is omitted
|
471
|
+
# time_type mixed
|
472
|
+
# time_format_fallbacks %iso8601, unixtime
|
473
|
+
#
|
474
|
+
class MixedTimeParser < TimeParser # to include TimeParseError
|
475
|
+
def initialize(type, format = nil, localtime = nil, timezone = nil, utc = nil, force_localtime = nil, fallbacks = [])
|
476
|
+
@parsers = []
|
477
|
+
fallbacks.unshift(format).each do |fallback|
|
478
|
+
next unless fallback
|
479
|
+
case fallback
|
480
|
+
when 'unixtime', 'float'
|
481
|
+
@parsers << NumericTimeParser.new(fallback, localtime, timezone)
|
482
|
+
else
|
483
|
+
if force_localtime
|
484
|
+
@parsers << TimeParser.new(fallback, true, nil)
|
485
|
+
else
|
486
|
+
localtime = localtime && (timezone.nil? && !utc)
|
487
|
+
@parsers << TimeParser.new(fallback, localtime, timezone)
|
488
|
+
end
|
489
|
+
end
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
def parse(value)
|
494
|
+
@parsers.each do |parser|
|
495
|
+
begin
|
496
|
+
Float(value) if parser.class == Fluent::NumericTimeParser
|
497
|
+
rescue
|
498
|
+
next
|
499
|
+
end
|
500
|
+
begin
|
501
|
+
return parser.parse(value)
|
502
|
+
rescue
|
503
|
+
# skip TimeParseError
|
504
|
+
end
|
505
|
+
end
|
506
|
+
fallback_class = @parsers.collect do |parser| parser.class end.join(",")
|
507
|
+
raise TimeParseError, "invalid time format: value = #{value}, even though fallbacks: #{fallback_class}"
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
454
511
|
end
|
data/lib/fluent/version.rb
CHANGED
data/lib/fluent/winsvc.rb
CHANGED
@@ -61,7 +61,6 @@ begin
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def service_main
|
64
|
-
|
65
64
|
@pid = service_main_start(@service_name)
|
66
65
|
while running?
|
67
66
|
sleep 10
|
@@ -69,13 +68,32 @@ begin
|
|
69
68
|
end
|
70
69
|
|
71
70
|
def service_stop
|
72
|
-
|
73
|
-
ev.set
|
74
|
-
ev.close
|
71
|
+
set_event(@service_name)
|
75
72
|
if @pid > 0
|
76
73
|
Process.waitpid(@pid)
|
77
74
|
end
|
78
75
|
end
|
76
|
+
|
77
|
+
def service_paramchange
|
78
|
+
set_event("#{@service_name}_USR2")
|
79
|
+
end
|
80
|
+
|
81
|
+
def service_user_defined_control(code)
|
82
|
+
case code
|
83
|
+
when 128
|
84
|
+
set_event("#{@service_name}_HUP")
|
85
|
+
when 129
|
86
|
+
set_event("#{@service_name}_USR1")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
def set_event(event_name)
|
93
|
+
ev = Win32::Event.open(event_name)
|
94
|
+
ev.set
|
95
|
+
ev.close
|
96
|
+
end
|
79
97
|
end
|
80
98
|
|
81
99
|
FluentdService.new(opts[:service_name]).mainloop
|
@@ -20,8 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.test_files = test_files
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
-
spec.add_development_dependency "bundler", "~>
|
24
|
-
spec.add_development_dependency "rake", "~>
|
25
|
-
spec.add_development_dependency "test-unit", "~>
|
23
|
+
spec.add_development_dependency "bundler", "~> <%= bundler_version %>"
|
24
|
+
spec.add_development_dependency "rake", "~> <%= rake_version %>"
|
25
|
+
spec.add_development_dependency "test-unit", "~> <%= test_unit_version %>"
|
26
26
|
spec.add_runtime_dependency "fluentd", [">= 0.14.10", "< 2"]
|
27
27
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%-
|
2
|
+
type = config[:type]
|
3
|
+
required_label = config[:required] ? "required" : "optional"
|
4
|
+
default = config[:default]
|
5
|
+
alias_name = config[:alias]
|
6
|
+
deprecated = config[:deprecated]
|
7
|
+
obsoleted = config[:obsoleted]
|
8
|
+
description = config[:desc]
|
9
|
+
-%>
|
10
|
+
|<%= name %>|<%= type %> (<%= required_label %>)|<%= description %><%- if type == :enum -%> (<%= config[:list].map{|x| "`#{x}`"}.join(", ") %>)<%- end -%><%- if alias_name -%><br>Alias: <%= alias_name %><%- end -%><%- if deprecated -%><br>Deprecated: <%= deprecated %><%- end -%><%- if obsoleted -%><br>Obsoleted: <%= :obsoleted %><%- end -%>|<%- if default -%>`<%= default %>`<%- end -%>|
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
require 'tempfile'
|
4
|
+
require 'fluent/command/cap_ctl'
|
5
|
+
|
6
|
+
class TestFluentCapCtl < Test::Unit::TestCase
|
7
|
+
setup do
|
8
|
+
omit "This environment does not handle Linux capability" unless defined?(CapNG)
|
9
|
+
end
|
10
|
+
|
11
|
+
sub_test_case "success" do
|
12
|
+
test "clear capability" do
|
13
|
+
logs = capture_stdout do
|
14
|
+
Fluent::CapCtl.new(["--clear"]).call
|
15
|
+
end
|
16
|
+
expression = /\AClear capabilities .*\n/m
|
17
|
+
assert_match expression, logs
|
18
|
+
end
|
19
|
+
|
20
|
+
test "add capability" do
|
21
|
+
logs = capture_stdout do
|
22
|
+
Fluent::CapCtl.new(["--add", "dac_override"]).call
|
23
|
+
end
|
24
|
+
expression = /\AUpdating .* done.\nAdding .*\n/m
|
25
|
+
assert_match expression, logs
|
26
|
+
end
|
27
|
+
|
28
|
+
test "drop capability" do
|
29
|
+
logs = capture_stdout do
|
30
|
+
Fluent::CapCtl.new(["--drop", "chown"]).call
|
31
|
+
end
|
32
|
+
expression = /\AUpdating .* done.\nDropping .*\n/m
|
33
|
+
assert_match expression, logs
|
34
|
+
end
|
35
|
+
|
36
|
+
test "get capability" do
|
37
|
+
logs = capture_stdout do
|
38
|
+
Fluent::CapCtl.new(["--get"]).call
|
39
|
+
end
|
40
|
+
expression = /\ACapabilities in .*,\nEffective: .*\nInheritable: .*\nPermitted: .*/m
|
41
|
+
assert_match expression, logs
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
sub_test_case "success with file" do
|
46
|
+
test "clear capability" do
|
47
|
+
logs = capture_stdout do
|
48
|
+
Tempfile.create("fluent-cap-") do |tempfile|
|
49
|
+
Fluent::CapCtl.new(["--clear-cap", "-f", tempfile.path]).call
|
50
|
+
end
|
51
|
+
end
|
52
|
+
expression = /\AClear capabilities .*\n/m
|
53
|
+
assert_match expression, logs
|
54
|
+
end
|
55
|
+
|
56
|
+
test "add capability" do
|
57
|
+
logs = capture_stdout do
|
58
|
+
Tempfile.create("fluent-cap-") do |tempfile|
|
59
|
+
Fluent::CapCtl.new(["--add", "dac_override", "-f", tempfile.path]).call
|
60
|
+
end
|
61
|
+
end
|
62
|
+
expression = /\AUpdating .* done.\nAdding .*\n/m
|
63
|
+
assert_match expression, logs
|
64
|
+
end
|
65
|
+
|
66
|
+
test "drop capability" do
|
67
|
+
logs = capture_stdout do
|
68
|
+
Tempfile.create("fluent-cap-") do |tempfile|
|
69
|
+
Fluent::CapCtl.new(["--drop", "chown", "-f", tempfile.path]).call
|
70
|
+
end
|
71
|
+
end
|
72
|
+
expression = /\AUpdating .* done.\nDropping .*\n/m
|
73
|
+
assert_match expression, logs
|
74
|
+
end
|
75
|
+
|
76
|
+
test "get capability" do
|
77
|
+
logs = capture_stdout do
|
78
|
+
Tempfile.create("fluent-cap-") do |tempfile|
|
79
|
+
Fluent::CapCtl.new(["--get", "-f", tempfile.path]).call
|
80
|
+
end
|
81
|
+
end
|
82
|
+
expression = /\ACapabilities in .*,\nEffective: .*\nInheritable: .*\nPermitted: .*/m
|
83
|
+
assert_match expression, logs
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
sub_test_case "invalid" do
|
88
|
+
test "add capability" do
|
89
|
+
assert_raise(ArgumentError) do
|
90
|
+
Fluent::CapCtl.new(["--add", "nonexitent"]).call
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
test "drop capability" do
|
95
|
+
assert_raise(ArgumentError) do
|
96
|
+
Fluent::CapCtl.new(["--drop", "invalid"]).call
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
require 'test-unit'
|
4
|
+
require 'win32/event' if Fluent.windows?
|
5
|
+
|
6
|
+
require 'fluent/command/ctl'
|
7
|
+
|
8
|
+
class TestFluentdCtl < ::Test::Unit::TestCase
|
9
|
+
def assert_win32_event(event_name, command, pid_or_svcname)
|
10
|
+
command, event_suffix = data
|
11
|
+
event = Win32::Event.new(event_name)
|
12
|
+
ipc = Win32::Ipc.new(event.handle)
|
13
|
+
ret = Win32::Ipc::TIMEOUT
|
14
|
+
|
15
|
+
wait_thread = Thread.new do
|
16
|
+
ret = ipc.wait(1)
|
17
|
+
end
|
18
|
+
Fluent::Ctl.new([command, pid_or_svcname]).call
|
19
|
+
wait_thread.join
|
20
|
+
assert_equal(Win32::Ipc::SIGNALED, ret)
|
21
|
+
end
|
22
|
+
|
23
|
+
data("shutdown" => ["shutdown", "TERM", ""],
|
24
|
+
"restart" => ["restart", "HUP", "HUP"],
|
25
|
+
"flush" => ["flush", "USR1", "USR1"],
|
26
|
+
"reload" => ["reload", "USR2", "USR2"])
|
27
|
+
def test_commands(data)
|
28
|
+
command, signal, event_suffix = data
|
29
|
+
|
30
|
+
if Fluent.windows?
|
31
|
+
event_name = "fluentd_54321"
|
32
|
+
event_name << "_#{event_suffix}" unless event_suffix.empty?
|
33
|
+
assert_win32_event(event_name, command, "54321")
|
34
|
+
else
|
35
|
+
got_signal = false
|
36
|
+
Signal.trap(signal) do
|
37
|
+
got_signal = true
|
38
|
+
end
|
39
|
+
Fluent::Ctl.new([command, "#{$$}"]).call
|
40
|
+
assert_true(got_signal)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
data("shutdown" => ["shutdown", ""],
|
45
|
+
"restart" => ["restart", "HUP"],
|
46
|
+
"flush" => ["flush", "USR1"],
|
47
|
+
"reload" => ["reload", "USR2"])
|
48
|
+
def test_commands_with_winsvcname(data)
|
49
|
+
omit "Only for Windows" unless Fluent.windows?
|
50
|
+
|
51
|
+
command, event_suffix = data
|
52
|
+
event_name = "testfluentdwinsvc"
|
53
|
+
event_name << "_#{event_suffix}" unless event_suffix.empty?
|
54
|
+
|
55
|
+
assert_win32_event(event_name, command, "testfluentdwinsvc")
|
56
|
+
end
|
57
|
+
end
|
@@ -878,6 +878,8 @@ CONF
|
|
878
878
|
end
|
879
879
|
|
880
880
|
test "without RUBYOPT" do
|
881
|
+
saved_ruby_opt = ENV["RUBYOPT"]
|
882
|
+
ENV["RUBYOPT"] = nil
|
881
883
|
conf = <<CONF
|
882
884
|
<source>
|
883
885
|
@type dummy
|
@@ -889,6 +891,8 @@ CONF
|
|
889
891
|
CONF
|
890
892
|
conf_path = create_conf_file('rubyopt_test.conf', conf)
|
891
893
|
assert_log_matches(create_cmdline(conf_path), '-Eascii-8bit:ascii-8bit')
|
894
|
+
ensure
|
895
|
+
ENV["RUBYOPT"] = saved_ruby_opt
|
892
896
|
end
|
893
897
|
|
894
898
|
test 'invalid values are set to RUBYOPT' do
|
@@ -912,6 +916,8 @@ CONF
|
|
912
916
|
|
913
917
|
# https://github.com/fluent/fluentd/issues/2915
|
914
918
|
test "ruby path contains spaces" do
|
919
|
+
saved_ruby_opt = ENV["RUBYOPT"]
|
920
|
+
ENV["RUBYOPT"] = nil
|
915
921
|
conf = <<CONF
|
916
922
|
<source>
|
917
923
|
@type dummy
|
@@ -940,6 +946,8 @@ CONF
|
|
940
946
|
'spawn command to main:',
|
941
947
|
'-Eascii-8bit:ascii-8bit'
|
942
948
|
)
|
949
|
+
ensure
|
950
|
+
ENV["RUBYOPT"] = saved_ruby_opt
|
943
951
|
end
|
944
952
|
|
945
953
|
test 'success to start workers when file buffer is configured in non-workers way only for specific worker' do
|
@@ -1065,4 +1073,34 @@ CONF
|
|
1065
1073
|
"secret xxxxxx", patterns_not_match: ["secret secret0", "secret secret1"])
|
1066
1074
|
end
|
1067
1075
|
end
|
1076
|
+
|
1077
|
+
sub_test_case 'sahred socket options' do
|
1078
|
+
test 'enable shared socket by default' do
|
1079
|
+
conf = ""
|
1080
|
+
conf_path = create_conf_file('empty.conf', conf)
|
1081
|
+
assert File.exist?(conf_path)
|
1082
|
+
assert_log_matches(create_cmdline(conf_path),
|
1083
|
+
patterns_not_match: ["shared socket for multiple workers is disabled"])
|
1084
|
+
end
|
1085
|
+
|
1086
|
+
test 'disable shared socket by command line option' do
|
1087
|
+
conf = ""
|
1088
|
+
conf_path = create_conf_file('empty.conf', conf)
|
1089
|
+
assert File.exist?(conf_path)
|
1090
|
+
assert_log_matches(create_cmdline(conf_path, "--disable-shared-socket"),
|
1091
|
+
"shared socket for multiple workers is disabled",)
|
1092
|
+
end
|
1093
|
+
|
1094
|
+
test 'disable shared socket by system config' do
|
1095
|
+
conf = <<CONF
|
1096
|
+
<system>
|
1097
|
+
disable_shared_socket
|
1098
|
+
</system>
|
1099
|
+
CONF
|
1100
|
+
conf_path = create_conf_file('empty.conf', conf)
|
1101
|
+
assert File.exist?(conf_path)
|
1102
|
+
assert_log_matches(create_cmdline(conf_path, "--disable-shared-socket"),
|
1103
|
+
"shared socket for multiple workers is disabled",)
|
1104
|
+
end
|
1105
|
+
end
|
1068
1106
|
end
|
@@ -56,6 +56,32 @@ class TestFluentPluginConfigFormatter < Test::Unit::TestCase
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
class FakeStorage < ::Fluent::Plugin::Storage
|
60
|
+
::Fluent::Plugin.register_storage('fake', self)
|
61
|
+
|
62
|
+
def get(key)
|
63
|
+
end
|
64
|
+
|
65
|
+
def fetch(key, defval)
|
66
|
+
end
|
67
|
+
|
68
|
+
def put(key, value)
|
69
|
+
end
|
70
|
+
|
71
|
+
def delete(key)
|
72
|
+
end
|
73
|
+
|
74
|
+
def update(key, &block)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class FakeServiceDiscovery < ::Fluent::Plugin::ServiceDiscovery
|
79
|
+
::Fluent::Plugin.register_sd('fake', self)
|
80
|
+
|
81
|
+
desc "hostname"
|
82
|
+
config_param :hostname, :string
|
83
|
+
end
|
84
|
+
|
59
85
|
class SimpleInput < ::Fluent::Plugin::Input
|
60
86
|
::Fluent::Plugin.register_input("simple", self)
|
61
87
|
helpers :inject, :compat_parameters
|
@@ -88,6 +114,13 @@ class TestFluentPluginConfigFormatter < Test::Unit::TestCase
|
|
88
114
|
end
|
89
115
|
end
|
90
116
|
|
117
|
+
class SimpleServiceDiscovery < ::Fluent::Plugin::ServiceDiscovery
|
118
|
+
::Fluent::Plugin.register_sd('simple', self)
|
119
|
+
|
120
|
+
desc "servers"
|
121
|
+
config_param :servers, :array
|
122
|
+
end
|
123
|
+
|
91
124
|
sub_test_case "json" do
|
92
125
|
data(input: [FakeInput, "input"],
|
93
126
|
output: [FakeOutput, "output"],
|
@@ -196,6 +229,52 @@ TEXT
|
|
196
229
|
assert_equal(expected, dumped_config)
|
197
230
|
end
|
198
231
|
|
232
|
+
test "input simple (table)" do
|
233
|
+
dumped_config = capture_stdout do
|
234
|
+
FluentPluginConfigFormatter.new(["--format=markdown", "--table", "input", "simple"]).call
|
235
|
+
end
|
236
|
+
expected = <<TEXT
|
237
|
+
## Plugin helpers
|
238
|
+
|
239
|
+
* [inject](https://docs.fluentd.org/v/1.0/plugin-helper-overview/api-plugin-helper-inject)
|
240
|
+
* [compat_parameters](https://docs.fluentd.org/v/1.0/plugin-helper-overview/api-plugin-helper-compat_parameters)
|
241
|
+
|
242
|
+
* See also: [Input Plugin Overview](https://docs.fluentd.org/v/1.0/input#overview)
|
243
|
+
|
244
|
+
## TestFluentPluginConfigFormatter::SimpleInput
|
245
|
+
|
246
|
+
### Configuration
|
247
|
+
|
248
|
+
|parameter|type|description|default|
|
249
|
+
|---|---|---|---|
|
250
|
+
|path|string (required)|path to something||
|
251
|
+
|
252
|
+
TEXT
|
253
|
+
assert_equal(expected, dumped_config)
|
254
|
+
end
|
255
|
+
|
256
|
+
data("abbrev" => "sd",
|
257
|
+
"normal" => "service_discovery")
|
258
|
+
test "service_discovery simple" do |data|
|
259
|
+
plugin_type = data
|
260
|
+
dumped_config = capture_stdout do
|
261
|
+
FluentPluginConfigFormatter.new(["--format=markdown", plugin_type, "simple"]).call
|
262
|
+
end
|
263
|
+
expected = <<TEXT
|
264
|
+
* See also: [ServiceDiscovery Plugin Overview](https://docs.fluentd.org/v/1.0/servicediscovery#overview)
|
265
|
+
|
266
|
+
## TestFluentPluginConfigFormatter::SimpleServiceDiscovery
|
267
|
+
|
268
|
+
### servers (array) (required)
|
269
|
+
|
270
|
+
servers
|
271
|
+
|
272
|
+
|
273
|
+
TEXT
|
274
|
+
assert_equal(expected, dumped_config)
|
275
|
+
end
|
276
|
+
|
277
|
+
|
199
278
|
test "output complex" do
|
200
279
|
dumped_config = capture_stdout do
|
201
280
|
FluentPluginConfigFormatter.new(["--format=markdown", "output", "complex"]).call
|
@@ -243,6 +322,49 @@ Default value: `normal`.
|
|
243
322
|
|
244
323
|
|
245
324
|
|
325
|
+
TEXT
|
326
|
+
assert_equal(expected, dumped_config)
|
327
|
+
end
|
328
|
+
|
329
|
+
test "output complex (table)" do
|
330
|
+
dumped_config = capture_stdout do
|
331
|
+
FluentPluginConfigFormatter.new(["--format=markdown", "--table", "output", "complex"]).call
|
332
|
+
end
|
333
|
+
expected = <<TEXT
|
334
|
+
## Plugin helpers
|
335
|
+
|
336
|
+
* [inject](https://docs.fluentd.org/v/1.0/plugin-helper-overview/api-plugin-helper-inject)
|
337
|
+
* [compat_parameters](https://docs.fluentd.org/v/1.0/plugin-helper-overview/api-plugin-helper-compat_parameters)
|
338
|
+
|
339
|
+
* See also: [Output Plugin Overview](https://docs.fluentd.org/v/1.0/output#overview)
|
340
|
+
|
341
|
+
## TestFluentPluginConfigFormatter::ComplexOutput
|
342
|
+
|
343
|
+
|
344
|
+
### \\<authentication\\> section (required) (single)
|
345
|
+
|
346
|
+
### Configuration
|
347
|
+
|
348
|
+
|parameter|type|description|default|
|
349
|
+
|---|---|---|---|
|
350
|
+
|username|string (required)|username||
|
351
|
+
|password|string (required)|password||
|
352
|
+
|
353
|
+
|
354
|
+
### \\<parent\\> section (optional) (multiple)
|
355
|
+
|
356
|
+
|
357
|
+
#### \\<child\\> section (optional) (multiple)
|
358
|
+
|
359
|
+
### Configuration
|
360
|
+
|
361
|
+
|parameter|type|description|default|
|
362
|
+
|---|---|---|---|
|
363
|
+
|names|array (required)|names||
|
364
|
+
|difficulty|enum (optional)|difficulty (`easy`, `normal`, `hard`)|`normal`|
|
365
|
+
|
366
|
+
|
367
|
+
|
246
368
|
TEXT
|
247
369
|
assert_equal(expected, dumped_config)
|
248
370
|
end
|
@@ -251,7 +373,7 @@ TEXT
|
|
251
373
|
sub_test_case "arguments" do
|
252
374
|
data do
|
253
375
|
hash = {}
|
254
|
-
["input", "output", "filter", "parser", "formatter"].each do |type|
|
376
|
+
["input", "output", "filter", "parser", "formatter", "storage", "service_discovery"].each do |type|
|
255
377
|
["txt", "json", "markdown"].each do |format|
|
256
378
|
argv = ["--format=#{format}"]
|
257
379
|
[
|
@@ -259,7 +381,7 @@ TEXT
|
|
259
381
|
["--verbose"],
|
260
382
|
["--compact"]
|
261
383
|
].each do |options|
|
262
|
-
hash[(argv + options).join(" ")] = argv + options + [type, "fake"]
|
384
|
+
hash["[#{type}] " + (argv + options).join(" ")] = argv + options + [type, "fake"]
|
263
385
|
end
|
264
386
|
end
|
265
387
|
end
|