fluentd 1.13.3 → 1.16.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/{bug_report.yaml → bug_report.yml} +2 -0
- data/.github/ISSUE_TEMPLATE/config.yml +2 -2
- data/.github/ISSUE_TEMPLATE/{feature_request.yaml → feature_request.yml} +1 -0
- data/.github/workflows/stale-actions.yml +11 -9
- data/.github/workflows/test.yml +32 -0
- data/CHANGELOG.md +490 -10
- data/CONTRIBUTING.md +2 -2
- data/MAINTAINERS.md +7 -5
- data/README.md +3 -23
- data/Rakefile +1 -1
- data/SECURITY.md +14 -0
- data/fluentd.gemspec +7 -8
- data/lib/fluent/command/cat.rb +13 -3
- data/lib/fluent/command/ctl.rb +6 -3
- data/lib/fluent/command/fluentd.rb +73 -65
- data/lib/fluent/command/plugin_config_formatter.rb +1 -1
- data/lib/fluent/compat/output.rb +9 -6
- data/lib/fluent/config/dsl.rb +1 -1
- data/lib/fluent/config/error.rb +12 -0
- data/lib/fluent/config/literal_parser.rb +2 -2
- data/lib/fluent/config/parser.rb +1 -1
- data/lib/fluent/config/v1_parser.rb +3 -3
- data/lib/fluent/config/yaml_parser/fluent_value.rb +47 -0
- data/lib/fluent/config/yaml_parser/loader.rb +108 -0
- data/lib/fluent/config/yaml_parser/parser.rb +166 -0
- data/lib/fluent/config/yaml_parser/section_builder.rb +107 -0
- data/lib/fluent/config/yaml_parser.rb +56 -0
- data/lib/fluent/config.rb +14 -1
- data/lib/fluent/counter/server.rb +1 -1
- data/lib/fluent/counter/validator.rb +3 -3
- data/lib/fluent/daemon.rb +2 -4
- data/lib/fluent/engine.rb +1 -1
- data/lib/fluent/env.rb +4 -0
- data/lib/fluent/error.rb +3 -0
- data/lib/fluent/event.rb +8 -4
- data/lib/fluent/event_router.rb +47 -2
- data/lib/fluent/file_wrapper.rb +137 -0
- data/lib/fluent/log/console_adapter.rb +66 -0
- data/lib/fluent/log.rb +44 -5
- data/lib/fluent/match.rb +1 -1
- data/lib/fluent/msgpack_factory.rb +6 -1
- data/lib/fluent/oj_options.rb +1 -2
- data/lib/fluent/plugin/bare_output.rb +49 -8
- data/lib/fluent/plugin/base.rb +26 -9
- data/lib/fluent/plugin/buf_file.rb +34 -5
- data/lib/fluent/plugin/buf_file_single.rb +32 -3
- data/lib/fluent/plugin/buffer/file_chunk.rb +1 -1
- data/lib/fluent/plugin/buffer.rb +216 -70
- data/lib/fluent/plugin/filter.rb +35 -1
- data/lib/fluent/plugin/filter_record_transformer.rb +1 -1
- data/lib/fluent/plugin/in_forward.rb +2 -2
- data/lib/fluent/plugin/in_http.rb +39 -10
- data/lib/fluent/plugin/in_monitor_agent.rb +4 -2
- data/lib/fluent/plugin/in_sample.rb +1 -1
- data/lib/fluent/plugin/in_syslog.rb +13 -1
- data/lib/fluent/plugin/in_tail/group_watch.rb +204 -0
- data/lib/fluent/plugin/in_tail/position_file.rb +33 -33
- data/lib/fluent/plugin/in_tail.rb +216 -84
- data/lib/fluent/plugin/in_tcp.rb +47 -2
- 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_exec_filter.rb +2 -2
- data/lib/fluent/plugin/out_file.rb +20 -2
- data/lib/fluent/plugin/out_forward/ack_handler.rb +19 -4
- data/lib/fluent/plugin/out_forward/socket_cache.rb +2 -0
- data/lib/fluent/plugin/out_forward.rb +17 -9
- data/lib/fluent/plugin/out_secondary_file.rb +39 -22
- data/lib/fluent/plugin/output.rb +167 -78
- data/lib/fluent/plugin/parser.rb +3 -4
- data/lib/fluent/plugin/parser_apache2.rb +1 -1
- data/lib/fluent/plugin/parser_json.rb +1 -1
- data/lib/fluent/plugin/parser_syslog.rb +1 -1
- data/lib/fluent/plugin/storage_local.rb +3 -5
- data/lib/fluent/plugin.rb +10 -1
- data/lib/fluent/plugin_helper/child_process.rb +3 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +8 -1
- data/lib/fluent/plugin_helper/event_loop.rb +2 -2
- data/lib/fluent/plugin_helper/http_server/server.rb +2 -1
- data/lib/fluent/plugin_helper/metrics.rb +129 -0
- data/lib/fluent/plugin_helper/record_accessor.rb +1 -1
- data/lib/fluent/plugin_helper/retry_state.rb +14 -4
- data/lib/fluent/plugin_helper/server.rb +35 -6
- data/lib/fluent/plugin_helper/service_discovery.rb +2 -2
- data/lib/fluent/plugin_helper/socket.rb +13 -2
- data/lib/fluent/plugin_helper/thread.rb +3 -3
- data/lib/fluent/plugin_helper.rb +1 -0
- data/lib/fluent/plugin_id.rb +3 -2
- data/lib/fluent/registry.rb +2 -1
- data/lib/fluent/root_agent.rb +6 -0
- data/lib/fluent/rpc.rb +4 -3
- data/lib/fluent/supervisor.rb +283 -259
- data/lib/fluent/system_config.rb +13 -3
- data/lib/fluent/test/driver/base.rb +11 -5
- data/lib/fluent/test/driver/filter.rb +4 -0
- data/lib/fluent/test/startup_shutdown.rb +6 -8
- data/lib/fluent/time.rb +21 -20
- data/lib/fluent/version.rb +1 -1
- data/lib/fluent/win32api.rb +38 -0
- data/lib/fluent/winsvc.rb +5 -8
- data/templates/new_gem/test/helper.rb.erb +0 -1
- data/test/command/test_cat.rb +31 -2
- data/test/command/test_ctl.rb +1 -2
- data/test/command/test_fluentd.rb +209 -24
- data/test/command/test_plugin_config_formatter.rb +0 -1
- data/test/compat/test_parser.rb +6 -6
- data/test/config/test_system_config.rb +13 -11
- data/test/config/test_types.rb +1 -1
- data/test/log/test_console_adapter.rb +110 -0
- data/test/plugin/in_tail/test_io_handler.rb +26 -8
- data/test/plugin/in_tail/test_position_file.rb +48 -59
- data/test/plugin/out_forward/test_ack_handler.rb +39 -0
- data/test/plugin/out_forward/test_socket_cache.rb +26 -1
- data/test/plugin/test_bare_output.rb +14 -1
- data/test/plugin/test_base.rb +133 -1
- data/test/plugin/test_buf_file.rb +62 -23
- data/test/plugin/test_buf_file_single.rb +65 -0
- data/test/plugin/test_buffer.rb +267 -3
- data/test/plugin/test_buffer_chunk.rb +11 -0
- data/test/plugin/test_filter.rb +12 -1
- data/test/plugin/test_filter_parser.rb +1 -1
- data/test/plugin/test_filter_stdout.rb +2 -2
- data/test/plugin/test_in_forward.rb +9 -11
- data/test/plugin/test_in_http.rb +65 -3
- data/test/plugin/test_in_monitor_agent.rb +216 -11
- data/test/plugin/test_in_object_space.rb +9 -3
- data/test/plugin/test_in_syslog.rb +35 -0
- data/test/plugin/test_in_tail.rb +1393 -385
- data/test/plugin/test_in_tcp.rb +87 -2
- data/test/plugin/test_in_udp.rb +28 -0
- data/test/plugin/test_in_unix.rb +2 -2
- data/test/plugin/test_input.rb +12 -1
- 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_out_exec.rb +6 -4
- data/test/plugin/test_out_exec_filter.rb +6 -2
- data/test/plugin/test_out_file.rb +34 -17
- data/test/plugin/test_out_forward.rb +78 -77
- data/test/plugin/test_out_http.rb +1 -0
- data/test/plugin/test_out_stdout.rb +2 -2
- data/test/plugin/test_output.rb +297 -12
- data/test/plugin/test_output_as_buffered.rb +44 -44
- data/test/plugin/test_output_as_buffered_compress.rb +32 -18
- data/test/plugin/test_output_as_buffered_retries.rb +54 -7
- data/test/plugin/test_output_as_buffered_secondary.rb +4 -4
- data/test/plugin/test_parser_regexp.rb +1 -6
- data/test/plugin/test_parser_syslog.rb +1 -1
- data/test/plugin_helper/test_cert_option.rb +1 -1
- data/test/plugin_helper/test_child_process.rb +38 -16
- data/test/plugin_helper/test_event_emitter.rb +29 -0
- data/test/plugin_helper/test_http_server_helper.rb +1 -1
- data/test/plugin_helper/test_metrics.rb +137 -0
- data/test/plugin_helper/test_retry_state.rb +602 -38
- data/test/plugin_helper/test_server.rb +78 -6
- data/test/plugin_helper/test_timer.rb +2 -2
- data/test/test_config.rb +191 -24
- data/test/test_event_router.rb +17 -0
- data/test/test_file_wrapper.rb +53 -0
- data/test/test_formatter.rb +24 -21
- data/test/test_log.rb +122 -40
- data/test/test_msgpack_factory.rb +32 -0
- data/test/test_plugin_classes.rb +102 -0
- data/test/test_root_agent.rb +30 -1
- data/test/test_supervisor.rb +477 -257
- data/test/test_time_parser.rb +22 -0
- metadata +55 -34
- data/.drone.yml +0 -35
- data/.github/workflows/issue-auto-closer.yml +0 -12
- data/.github/workflows/linux-test.yaml +0 -36
- data/.github/workflows/macos-test.yaml +0 -30
- data/.github/workflows/windows-test.yaml +0 -46
- data/.gitlab-ci.yml +0 -103
- data/lib/fluent/plugin/file_wrapper.rb +0 -187
- data/test/plugin/test_file_wrapper.rb +0 -126
- data/test/test_logger_initializer.rb +0 -46
data/lib/fluent/system_config.rb
CHANGED
@@ -22,15 +22,17 @@ module Fluent
|
|
22
22
|
include Configurable
|
23
23
|
|
24
24
|
SYSTEM_CONFIG_PARAMETERS = [
|
25
|
-
:workers, :root_dir, :log_level,
|
25
|
+
:workers, :restart_worker_interval, :root_dir, :log_level,
|
26
26
|
:suppress_repeated_stacktrace, :emit_error_log_interval, :suppress_config_dump,
|
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, :disable_shared_socket
|
30
|
+
:strict_config_value, :enable_msgpack_time_support, :disable_shared_socket,
|
31
|
+
:metrics, :enable_input_metrics, :enable_size_metrics, :enable_jit
|
31
32
|
]
|
32
33
|
|
33
34
|
config_param :workers, :integer, default: 1
|
35
|
+
config_param :restart_worker_interval, :time, default: 0
|
34
36
|
config_param :root_dir, :string, default: nil
|
35
37
|
config_param :log_level, :enum, list: [:trace, :debug, :info, :warn, :error, :fatal], default: 'info'
|
36
38
|
config_param :suppress_repeated_stacktrace, :bool, default: nil
|
@@ -46,6 +48,9 @@ module Fluent
|
|
46
48
|
config_param :strict_config_value, :bool, default: nil
|
47
49
|
config_param :enable_msgpack_time_support, :bool, default: nil
|
48
50
|
config_param :disable_shared_socket, :bool, default: nil
|
51
|
+
config_param :enable_input_metrics, :bool, default: nil
|
52
|
+
config_param :enable_size_metrics, :bool, default: nil
|
53
|
+
config_param :enable_jit, :bool, default: false
|
49
54
|
config_param :file_permission, default: nil do |v|
|
50
55
|
v.to_i(8)
|
51
56
|
end
|
@@ -57,7 +62,7 @@ module Fluent
|
|
57
62
|
config_param :time_format, :string, default: '%Y-%m-%d %H:%M:%S %z'
|
58
63
|
config_param :rotate_age, default: nil do |v|
|
59
64
|
if Fluent::Log::LOG_ROTATE_AGE.include?(v)
|
60
|
-
v
|
65
|
+
v
|
61
66
|
else
|
62
67
|
begin
|
63
68
|
Integer(v)
|
@@ -93,6 +98,11 @@ module Fluent
|
|
93
98
|
config_param :timeout, :time, default: nil
|
94
99
|
end
|
95
100
|
|
101
|
+
config_section :metrics, multi: false do
|
102
|
+
config_param :@type, :string, default: "local"
|
103
|
+
config_param :labels, :hash, default: {}
|
104
|
+
end
|
105
|
+
|
96
106
|
def self.create(conf, strict_config_value=false)
|
97
107
|
systems = conf.elements(name: 'system')
|
98
108
|
return SystemConfig.new if systems.empty?
|
@@ -16,6 +16,7 @@
|
|
16
16
|
|
17
17
|
require 'fluent/config'
|
18
18
|
require 'fluent/config/element'
|
19
|
+
require 'fluent/env'
|
19
20
|
require 'fluent/log'
|
20
21
|
require 'fluent/clock'
|
21
22
|
|
@@ -102,11 +103,16 @@ module Fluent
|
|
102
103
|
|
103
104
|
def instance_start
|
104
105
|
if @instance.respond_to?(:server_wait_until_start)
|
105
|
-
|
106
|
-
|
107
|
-
|
106
|
+
if Fluent.windows?
|
107
|
+
@socket_manager_server = ServerEngine::SocketManager::Server.open
|
108
|
+
@socket_manager_path = @socket_manager_server.path
|
109
|
+
else
|
110
|
+
@socket_manager_path = ServerEngine::SocketManager::Server.generate_path
|
111
|
+
if @socket_manager_path.is_a?(String) && File.exist?(@socket_manager_path)
|
112
|
+
FileUtils.rm_f @socket_manager_path
|
113
|
+
end
|
114
|
+
@socket_manager_server = ServerEngine::SocketManager::Server.open(@socket_manager_path)
|
108
115
|
end
|
109
|
-
@socket_manager_server = ServerEngine::SocketManager::Server.open(@socket_manager_path)
|
110
116
|
ENV['SERVERENGINE_SOCKETMANAGER_PATH'] = @socket_manager_path.to_s
|
111
117
|
end
|
112
118
|
|
@@ -173,7 +179,7 @@ module Fluent
|
|
173
179
|
|
174
180
|
if @socket_manager_server
|
175
181
|
@socket_manager_server.close
|
176
|
-
if @
|
182
|
+
if @socket_manager_path.is_a?(String) && File.exist?(@socket_manager_path)
|
177
183
|
FileUtils.rm_f @socket_manager_path
|
178
184
|
end
|
179
185
|
end
|
@@ -21,9 +21,8 @@ module Fluent
|
|
21
21
|
module Test
|
22
22
|
module StartupShutdown
|
23
23
|
def startup
|
24
|
-
|
25
|
-
|
26
|
-
ENV['SERVERENGINE_SOCKETMANAGER_PATH'] = socket_manager_path.to_s
|
24
|
+
@server = ServerEngine::SocketManager::Server.open
|
25
|
+
ENV['SERVERENGINE_SOCKETMANAGER_PATH'] = @server.path.to_s
|
27
26
|
end
|
28
27
|
|
29
28
|
def shutdown
|
@@ -31,15 +30,14 @@ module Fluent
|
|
31
30
|
end
|
32
31
|
|
33
32
|
def self.setup
|
34
|
-
@
|
35
|
-
|
36
|
-
ENV['SERVERENGINE_SOCKETMANAGER_PATH'] = @socket_manager_path.to_s
|
33
|
+
@server = ServerEngine::SocketManager::Server.open
|
34
|
+
ENV['SERVERENGINE_SOCKETMANAGER_PATH'] = @server.path.to_s
|
37
35
|
end
|
38
36
|
|
39
37
|
def self.teardown
|
40
38
|
@server.close
|
41
|
-
# on Windows,
|
42
|
-
FileUtils.rm_f @
|
39
|
+
# on Windows, the path is a TCP port number
|
40
|
+
FileUtils.rm_f @server.path unless Fluent.windows?
|
43
41
|
end
|
44
42
|
end
|
45
43
|
end
|
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
@@ -0,0 +1,38 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/env'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Win32API
|
21
|
+
require 'fiddle/import'
|
22
|
+
require 'fiddle/types'
|
23
|
+
extend Fiddle::Importer
|
24
|
+
|
25
|
+
if RUBY_PLATFORM.split('-')[-1] == "ucrt"
|
26
|
+
MSVCRT_DLL = 'ucrtbase.dll'
|
27
|
+
else
|
28
|
+
MSVCRT_DLL = 'msvcrt.dll'
|
29
|
+
end
|
30
|
+
|
31
|
+
dlload MSVCRT_DLL, "kernel32.dll"
|
32
|
+
include Fiddle::Win32Types
|
33
|
+
|
34
|
+
extern "intptr_t _get_osfhandle(int)"
|
35
|
+
extern "BOOL GetFileInformationByHandle(HANDLE, void *)"
|
36
|
+
extern "BOOL GetFileInformationByHandleEx(HANDLE, int, void *, DWORD)"
|
37
|
+
end if Fluent.windows?
|
38
|
+
end
|
data/lib/fluent/winsvc.rb
CHANGED
@@ -17,14 +17,12 @@
|
|
17
17
|
begin
|
18
18
|
|
19
19
|
require 'optparse'
|
20
|
-
require 'windows/debug'
|
21
|
-
require 'Windows/Library'
|
22
20
|
require 'win32/daemon'
|
23
21
|
require 'win32/event'
|
22
|
+
require 'win32/registry'
|
23
|
+
require 'serverengine'
|
24
24
|
|
25
25
|
include Win32
|
26
|
-
include Windows::Library
|
27
|
-
include Windows::Debug
|
28
26
|
|
29
27
|
op = OptionParser.new
|
30
28
|
opts = {service_name: nil}
|
@@ -37,16 +35,13 @@ begin
|
|
37
35
|
end
|
38
36
|
|
39
37
|
def read_fluentdopt(service_name)
|
40
|
-
require 'win32/Registry'
|
41
38
|
Win32::Registry::HKEY_LOCAL_MACHINE.open("SYSTEM\\CurrentControlSet\\Services\\#{service_name}") do |reg|
|
42
39
|
reg.read("fluentdopt")[1] rescue ""
|
43
40
|
end
|
44
41
|
end
|
45
42
|
|
46
43
|
def service_main_start(service_name)
|
47
|
-
ruby_path =
|
48
|
-
GetModuleFileName.call(0, ruby_path,260)
|
49
|
-
ruby_path = ruby_path.rstrip.gsub(/\\/, '/')
|
44
|
+
ruby_path = ServerEngine.ruby_bin_path
|
50
45
|
rubybin_dir = ruby_path[0, ruby_path.rindex("/")]
|
51
46
|
opt = read_fluentdopt(service_name)
|
52
47
|
Process.spawn("\"#{rubybin_dir}/ruby.exe\" \"#{rubybin_dir}/fluentd\" #{opt} -x #{service_name}")
|
@@ -84,6 +79,8 @@ begin
|
|
84
79
|
set_event("#{@service_name}_HUP")
|
85
80
|
when 129
|
86
81
|
set_event("#{@service_name}_USR1")
|
82
|
+
when 130
|
83
|
+
set_event("#{@service_name}_CONT")
|
87
84
|
end
|
88
85
|
end
|
89
86
|
|
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
|
data/test/command/test_ctl.rb
CHANGED
@@ -7,7 +7,6 @@ require 'fluent/command/ctl'
|
|
7
7
|
|
8
8
|
class TestFluentdCtl < ::Test::Unit::TestCase
|
9
9
|
def assert_win32_event(event_name, command, pid_or_svcname)
|
10
|
-
command, event_suffix = data
|
11
10
|
event = Win32::Event.new(event_name)
|
12
11
|
ipc = Win32::Ipc.new(event.handle)
|
13
12
|
ret = Win32::Ipc::TIMEOUT
|
@@ -36,7 +35,7 @@ class TestFluentdCtl < ::Test::Unit::TestCase
|
|
36
35
|
Signal.trap(signal) do
|
37
36
|
got_signal = true
|
38
37
|
end
|
39
|
-
Fluent::Ctl.new([command,
|
38
|
+
Fluent::Ctl.new([command, Process.pid.to_s]).call
|
40
39
|
assert_true(got_signal)
|
41
40
|
end
|
42
41
|
end
|