fluentd 0.14.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 +7 -0
- data/.github/ISSUE_TEMPLATE.md +6 -0
- data/.gitignore +26 -0
- data/.travis.yml +45 -0
- data/AUTHORS +2 -0
- data/CONTRIBUTING.md +35 -0
- data/COPYING +14 -0
- data/ChangeLog +276 -0
- data/Gemfile +9 -0
- data/README.md +51 -0
- data/Rakefile +53 -0
- data/Vagrantfile +17 -0
- data/appveyor.yml +41 -0
- data/bin/fluent-debug +5 -0
- data/example/copy_roundrobin.conf +39 -0
- data/example/filter_stdout.conf +22 -0
- data/example/in_forward.conf +11 -0
- data/example/in_http.conf +14 -0
- data/example/in_out_forward.conf +17 -0
- data/example/in_syslog.conf +15 -0
- data/example/in_tail.conf +14 -0
- data/example/in_tcp.conf +13 -0
- data/example/in_udp.conf +13 -0
- data/example/multi_filters.conf +61 -0
- data/example/out_buffered_null.conf +32 -0
- data/example/out_copy.conf +20 -0
- data/example/out_file.conf +13 -0
- data/example/out_forward.conf +35 -0
- data/example/out_forward_buf_file.conf +23 -0
- data/example/v0_12_filter.conf +78 -0
- data/example/v1_literal_example.conf +36 -0
- data/fluent.conf +139 -0
- data/fluentd.gemspec +51 -0
- data/lib/fluent/agent.rb +194 -0
- data/lib/fluent/command/bundler_injection.rb +45 -0
- data/lib/fluent/command/cat.rb +319 -0
- data/lib/fluent/command/debug.rb +102 -0
- data/lib/fluent/command/fluentd.rb +273 -0
- data/lib/fluent/compat/call_super_mixin.rb +67 -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 +68 -0
- data/lib/fluent/compat/formatter.rb +111 -0
- data/lib/fluent/compat/formatter_utils.rb +85 -0
- data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
- data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
- data/lib/fluent/compat/input.rb +49 -0
- data/lib/fluent/compat/output.rb +677 -0
- data/lib/fluent/compat/output_chain.rb +60 -0
- data/lib/fluent/compat/parser.rb +180 -0
- data/lib/fluent/compat/parser_utils.rb +40 -0
- data/lib/fluent/compat/propagate_default.rb +62 -0
- data/lib/fluent/compat/record_filter_mixin.rb +34 -0
- data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
- data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
- data/lib/fluent/compat/socket_util.rb +165 -0
- data/lib/fluent/compat/string_util.rb +34 -0
- data/lib/fluent/compat/structured_format_mixin.rb +26 -0
- data/lib/fluent/compat/type_converter.rb +90 -0
- data/lib/fluent/config.rb +56 -0
- data/lib/fluent/config/basic_parser.rb +123 -0
- data/lib/fluent/config/configure_proxy.rb +366 -0
- data/lib/fluent/config/dsl.rb +149 -0
- data/lib/fluent/config/element.rb +218 -0
- data/lib/fluent/config/error.rb +26 -0
- data/lib/fluent/config/literal_parser.rb +251 -0
- data/lib/fluent/config/parser.rb +107 -0
- data/lib/fluent/config/section.rb +212 -0
- data/lib/fluent/config/types.rb +136 -0
- data/lib/fluent/config/v1_parser.rb +190 -0
- data/lib/fluent/configurable.rb +176 -0
- data/lib/fluent/daemon.rb +15 -0
- data/lib/fluent/engine.rb +220 -0
- data/lib/fluent/env.rb +27 -0
- data/lib/fluent/event.rb +287 -0
- data/lib/fluent/event_router.rb +259 -0
- data/lib/fluent/filter.rb +21 -0
- data/lib/fluent/formatter.rb +23 -0
- data/lib/fluent/input.rb +21 -0
- data/lib/fluent/label.rb +38 -0
- data/lib/fluent/load.rb +36 -0
- data/lib/fluent/log.rb +445 -0
- data/lib/fluent/match.rb +141 -0
- data/lib/fluent/mixin.rb +31 -0
- data/lib/fluent/msgpack_factory.rb +62 -0
- data/lib/fluent/output.rb +26 -0
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +23 -0
- data/lib/fluent/plugin.rb +161 -0
- data/lib/fluent/plugin/bare_output.rb +63 -0
- data/lib/fluent/plugin/base.rb +130 -0
- data/lib/fluent/plugin/buf_file.rb +154 -0
- data/lib/fluent/plugin/buf_memory.rb +34 -0
- data/lib/fluent/plugin/buffer.rb +603 -0
- data/lib/fluent/plugin/buffer/chunk.rb +160 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +323 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
- data/lib/fluent/plugin/exec_util.rb +22 -0
- data/lib/fluent/plugin/file_util.rb +22 -0
- data/lib/fluent/plugin/file_wrapper.rb +120 -0
- data/lib/fluent/plugin/filter.rb +93 -0
- data/lib/fluent/plugin/filter_grep.rb +75 -0
- data/lib/fluent/plugin/filter_record_transformer.rb +342 -0
- data/lib/fluent/plugin/filter_stdout.rb +53 -0
- data/lib/fluent/plugin/formatter.rb +45 -0
- data/lib/fluent/plugin/formatter_csv.rb +47 -0
- data/lib/fluent/plugin/formatter_hash.rb +29 -0
- data/lib/fluent/plugin/formatter_json.rb +44 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +41 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +29 -0
- data/lib/fluent/plugin/formatter_out_file.rb +78 -0
- data/lib/fluent/plugin/formatter_single_value.rb +34 -0
- data/lib/fluent/plugin/formatter_stdout.rb +74 -0
- data/lib/fluent/plugin/in_debug_agent.rb +64 -0
- data/lib/fluent/plugin/in_dummy.rb +135 -0
- data/lib/fluent/plugin/in_exec.rb +149 -0
- data/lib/fluent/plugin/in_forward.rb +366 -0
- data/lib/fluent/plugin/in_gc_stat.rb +52 -0
- data/lib/fluent/plugin/in_http.rb +422 -0
- data/lib/fluent/plugin/in_monitor_agent.rb +401 -0
- data/lib/fluent/plugin/in_object_space.rb +90 -0
- data/lib/fluent/plugin/in_syslog.rb +204 -0
- data/lib/fluent/plugin/in_tail.rb +838 -0
- data/lib/fluent/plugin/in_tcp.rb +41 -0
- data/lib/fluent/plugin/in_udp.rb +37 -0
- data/lib/fluent/plugin/in_unix.rb +201 -0
- data/lib/fluent/plugin/input.rb +33 -0
- data/lib/fluent/plugin/multi_output.rb +95 -0
- data/lib/fluent/plugin/out_buffered_null.rb +59 -0
- data/lib/fluent/plugin/out_buffered_stdout.rb +70 -0
- data/lib/fluent/plugin/out_copy.rb +42 -0
- data/lib/fluent/plugin/out_exec.rb +114 -0
- data/lib/fluent/plugin/out_exec_filter.rb +393 -0
- data/lib/fluent/plugin/out_file.rb +167 -0
- data/lib/fluent/plugin/out_forward.rb +646 -0
- data/lib/fluent/plugin/out_null.rb +27 -0
- data/lib/fluent/plugin/out_relabel.rb +28 -0
- data/lib/fluent/plugin/out_roundrobin.rb +80 -0
- data/lib/fluent/plugin/out_stdout.rb +48 -0
- data/lib/fluent/plugin/out_stream.rb +130 -0
- data/lib/fluent/plugin/output.rb +1020 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
- data/lib/fluent/plugin/parser.rb +175 -0
- data/lib/fluent/plugin/parser_apache.rb +28 -0
- data/lib/fluent/plugin/parser_apache2.rb +84 -0
- data/lib/fluent/plugin/parser_apache_error.rb +26 -0
- data/lib/fluent/plugin/parser_csv.rb +33 -0
- data/lib/fluent/plugin/parser_json.rb +79 -0
- data/lib/fluent/plugin/parser_ltsv.rb +50 -0
- data/lib/fluent/plugin/parser_multiline.rb +104 -0
- data/lib/fluent/plugin/parser_nginx.rb +28 -0
- data/lib/fluent/plugin/parser_none.rb +36 -0
- data/lib/fluent/plugin/parser_regexp.rb +73 -0
- data/lib/fluent/plugin/parser_syslog.rb +82 -0
- data/lib/fluent/plugin/parser_tsv.rb +37 -0
- data/lib/fluent/plugin/socket_util.rb +22 -0
- data/lib/fluent/plugin/storage.rb +84 -0
- data/lib/fluent/plugin/storage_local.rb +132 -0
- data/lib/fluent/plugin/string_util.rb +22 -0
- data/lib/fluent/plugin_helper.rb +42 -0
- data/lib/fluent/plugin_helper/child_process.rb +298 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +224 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +80 -0
- data/lib/fluent/plugin_helper/event_loop.rb +118 -0
- data/lib/fluent/plugin_helper/formatter.rb +149 -0
- data/lib/fluent/plugin_helper/inject.rb +125 -0
- data/lib/fluent/plugin_helper/parser.rb +147 -0
- data/lib/fluent/plugin_helper/retry_state.rb +177 -0
- data/lib/fluent/plugin_helper/storage.rb +331 -0
- data/lib/fluent/plugin_helper/thread.rb +147 -0
- data/lib/fluent/plugin_helper/timer.rb +90 -0
- data/lib/fluent/plugin_id.rb +63 -0
- data/lib/fluent/process.rb +504 -0
- data/lib/fluent/registry.rb +99 -0
- data/lib/fluent/root_agent.rb +314 -0
- data/lib/fluent/rpc.rb +94 -0
- data/lib/fluent/supervisor.rb +680 -0
- data/lib/fluent/system_config.rb +122 -0
- data/lib/fluent/test.rb +56 -0
- data/lib/fluent/test/base.rb +85 -0
- data/lib/fluent/test/driver/base.rb +179 -0
- data/lib/fluent/test/driver/base_owned.rb +70 -0
- data/lib/fluent/test/driver/base_owner.rb +125 -0
- data/lib/fluent/test/driver/event_feeder.rb +98 -0
- data/lib/fluent/test/driver/filter.rb +57 -0
- data/lib/fluent/test/driver/formatter.rb +30 -0
- data/lib/fluent/test/driver/input.rb +31 -0
- data/lib/fluent/test/driver/multi_output.rb +52 -0
- data/lib/fluent/test/driver/output.rb +76 -0
- data/lib/fluent/test/driver/parser.rb +30 -0
- data/lib/fluent/test/driver/test_event_router.rb +45 -0
- data/lib/fluent/test/filter_test.rb +77 -0
- data/lib/fluent/test/formatter_test.rb +65 -0
- data/lib/fluent/test/helpers.rb +79 -0
- data/lib/fluent/test/input_test.rb +172 -0
- data/lib/fluent/test/log.rb +73 -0
- data/lib/fluent/test/output_test.rb +156 -0
- data/lib/fluent/test/parser_test.rb +70 -0
- data/lib/fluent/time.rb +175 -0
- data/lib/fluent/timezone.rb +133 -0
- data/lib/fluent/unique_id.rb +39 -0
- data/lib/fluent/version.rb +21 -0
- data/lib/fluent/winsvc.rb +71 -0
- data/test/compat/test_calls_super.rb +166 -0
- data/test/compat/test_parser.rb +82 -0
- data/test/config/assertions.rb +42 -0
- data/test/config/test_config_parser.rb +507 -0
- data/test/config/test_configurable.rb +1194 -0
- data/test/config/test_configure_proxy.rb +386 -0
- data/test/config/test_dsl.rb +415 -0
- data/test/config/test_element.rb +403 -0
- data/test/config/test_literal_parser.rb +297 -0
- data/test/config/test_section.rb +184 -0
- data/test/config/test_system_config.rb +120 -0
- data/test/config/test_types.rb +171 -0
- data/test/helper.rb +119 -0
- data/test/plugin/data/2010/01/20100102-030405.log +0 -0
- data/test/plugin/data/2010/01/20100102-030406.log +0 -0
- data/test/plugin/data/2010/01/20100102.log +0 -0
- data/test/plugin/data/log/bar +0 -0
- data/test/plugin/data/log/foo/bar.log +0 -0
- data/test/plugin/data/log/test.log +0 -0
- data/test/plugin/test_bare_output.rb +118 -0
- data/test/plugin/test_base.rb +75 -0
- data/test/plugin/test_buf_file.rb +571 -0
- data/test/plugin/test_buf_memory.rb +42 -0
- data/test/plugin/test_buffer.rb +1200 -0
- data/test/plugin/test_buffer_chunk.rb +168 -0
- data/test/plugin/test_buffer_file_chunk.rb +771 -0
- data/test/plugin/test_buffer_memory_chunk.rb +265 -0
- data/test/plugin/test_file_util.rb +96 -0
- data/test/plugin/test_filter.rb +353 -0
- data/test/plugin/test_filter_grep.rb +119 -0
- data/test/plugin/test_filter_record_transformer.rb +600 -0
- data/test/plugin/test_filter_stdout.rb +211 -0
- 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_debug_agent.rb +28 -0
- data/test/plugin/test_in_dummy.rb +188 -0
- data/test/plugin/test_in_exec.rb +133 -0
- data/test/plugin/test_in_forward.rb +635 -0
- data/test/plugin/test_in_gc_stat.rb +39 -0
- data/test/plugin/test_in_http.rb +442 -0
- data/test/plugin/test_in_monitor_agent.rb +329 -0
- data/test/plugin/test_in_object_space.rb +64 -0
- data/test/plugin/test_in_syslog.rb +205 -0
- data/test/plugin/test_in_tail.rb +1001 -0
- data/test/plugin/test_in_tcp.rb +102 -0
- data/test/plugin/test_in_udp.rb +121 -0
- data/test/plugin/test_in_unix.rb +126 -0
- data/test/plugin/test_input.rb +122 -0
- data/test/plugin/test_multi_output.rb +180 -0
- data/test/plugin/test_out_buffered_null.rb +79 -0
- data/test/plugin/test_out_buffered_stdout.rb +122 -0
- data/test/plugin/test_out_copy.rb +160 -0
- data/test/plugin/test_out_exec.rb +155 -0
- data/test/plugin/test_out_exec_filter.rb +262 -0
- data/test/plugin/test_out_file.rb +383 -0
- data/test/plugin/test_out_forward.rb +590 -0
- data/test/plugin/test_out_null.rb +29 -0
- data/test/plugin/test_out_relabel.rb +28 -0
- data/test/plugin/test_out_roundrobin.rb +146 -0
- data/test/plugin/test_out_stdout.rb +92 -0
- data/test/plugin/test_out_stream.rb +93 -0
- data/test/plugin/test_output.rb +568 -0
- data/test/plugin/test_output_as_buffered.rb +1604 -0
- data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
- data/test/plugin/test_output_as_buffered_retries.rb +839 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +817 -0
- data/test/plugin/test_output_as_standard.rb +374 -0
- data/test/plugin/test_owned_by.rb +35 -0
- data/test/plugin/test_parser_apache.rb +42 -0
- data/test/plugin/test_parser_apache2.rb +38 -0
- data/test/plugin/test_parser_apache_error.rb +45 -0
- data/test/plugin/test_parser_base.rb +32 -0
- data/test/plugin/test_parser_csv.rb +104 -0
- data/test/plugin/test_parser_json.rb +107 -0
- data/test/plugin/test_parser_labeled_tsv.rb +129 -0
- data/test/plugin/test_parser_multiline.rb +100 -0
- data/test/plugin/test_parser_nginx.rb +48 -0
- data/test/plugin/test_parser_none.rb +53 -0
- data/test/plugin/test_parser_regexp.rb +277 -0
- data/test/plugin/test_parser_syslog.rb +66 -0
- data/test/plugin/test_parser_time.rb +46 -0
- data/test/plugin/test_parser_tsv.rb +121 -0
- data/test/plugin/test_storage.rb +167 -0
- data/test/plugin/test_storage_local.rb +8 -0
- data/test/plugin/test_string_util.rb +26 -0
- data/test/plugin_helper/test_child_process.rb +608 -0
- data/test/plugin_helper/test_compat_parameters.rb +242 -0
- data/test/plugin_helper/test_event_emitter.rb +51 -0
- data/test/plugin_helper/test_event_loop.rb +52 -0
- data/test/plugin_helper/test_formatter.rb +252 -0
- data/test/plugin_helper/test_inject.rb +487 -0
- data/test/plugin_helper/test_parser.rb +263 -0
- data/test/plugin_helper/test_retry_state.rb +399 -0
- data/test/plugin_helper/test_storage.rb +521 -0
- data/test/plugin_helper/test_thread.rb +164 -0
- data/test/plugin_helper/test_timer.rb +131 -0
- data/test/scripts/exec_script.rb +32 -0
- data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
- data/test/scripts/fluent/plugin/out_test.rb +81 -0
- data/test/scripts/fluent/plugin/out_test2.rb +80 -0
- data/test/scripts/fluent/plugin/parser_known.rb +4 -0
- data/test/test_config.rb +179 -0
- data/test/test_configdsl.rb +148 -0
- data/test/test_event.rb +329 -0
- data/test/test_event_router.rb +331 -0
- data/test/test_event_time.rb +184 -0
- data/test/test_filter.rb +121 -0
- data/test/test_formatter.rb +319 -0
- data/test/test_input.rb +31 -0
- data/test/test_log.rb +572 -0
- data/test/test_match.rb +137 -0
- data/test/test_mixin.rb +351 -0
- data/test/test_output.rb +214 -0
- data/test/test_plugin_classes.rb +136 -0
- data/test/test_plugin_helper.rb +81 -0
- data/test/test_process.rb +48 -0
- data/test/test_root_agent.rb +278 -0
- data/test/test_supervisor.rb +339 -0
- data/test/test_time_formatter.rb +186 -0
- data/test/test_unique_id.rb +47 -0
- metadata +823 -0
@@ -0,0 +1,122 @@
|
|
1
|
+
#
|
2
|
+
# Fluent
|
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/configurable'
|
18
|
+
require 'fluent/config/element'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
class SystemConfig
|
22
|
+
include Configurable
|
23
|
+
|
24
|
+
config_param :log_level, default: nil do |level|
|
25
|
+
Log.str_to_level(level)
|
26
|
+
end
|
27
|
+
config_param :suppress_repeated_stacktrace, :bool, default: nil
|
28
|
+
config_param :emit_error_log_interval, :time, default: nil
|
29
|
+
config_param :suppress_config_dump, :bool, default: nil
|
30
|
+
config_param :without_source, :bool, default: nil
|
31
|
+
config_param :rpc_endpoint, :string, default: nil
|
32
|
+
config_param :enable_get_dump, :bool, default: nil
|
33
|
+
config_param :process_name, default: nil
|
34
|
+
config_param :file_permission, default: nil do |v|
|
35
|
+
v.to_i(8)
|
36
|
+
end
|
37
|
+
config_param :dir_permission, default: nil do |v|
|
38
|
+
v.to_i(8)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.create(conf)
|
42
|
+
systems = conf.elements(name: 'system')
|
43
|
+
return SystemConfig.new if systems.empty?
|
44
|
+
raise Fluent::ConfigError, "<system> is duplicated. <system> should be only one" if systems.size > 1
|
45
|
+
|
46
|
+
SystemConfig.new(systems.first)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.blank_system_config
|
50
|
+
Fluent::Config::Element.new('<SYSTEM>', '', {}, [])
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.overwrite_system_config(hash)
|
54
|
+
older = defined?($_system_config) ? $_system_config : nil
|
55
|
+
begin
|
56
|
+
$_system_config = SystemConfig.new(Fluent::Config::Element.new('system', '', hash, []))
|
57
|
+
yield
|
58
|
+
ensure
|
59
|
+
$_system_config = older
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def initialize(conf=nil)
|
64
|
+
super()
|
65
|
+
conf ||= SystemConfig.blank_system_config
|
66
|
+
configure(conf)
|
67
|
+
end
|
68
|
+
|
69
|
+
def dup
|
70
|
+
s = SystemConfig.new
|
71
|
+
s.log_level = @log_level
|
72
|
+
s.suppress_repeated_stacktrace = @suppress_repeated_stacktrace
|
73
|
+
s.emit_error_log_interval = @emit_error_log_interval
|
74
|
+
s.suppress_config_dump = @suppress_config_dump
|
75
|
+
s.without_source = @without_source
|
76
|
+
s.rpc_endpoint = @rpc_endpoint
|
77
|
+
s.enable_get_dump = @enable_get_dump
|
78
|
+
s.process_name = @process_name
|
79
|
+
s.file_permission = @file_permission
|
80
|
+
s.dir_permission = @dir_permission
|
81
|
+
|
82
|
+
s
|
83
|
+
end
|
84
|
+
|
85
|
+
def apply(supervisor)
|
86
|
+
system = self
|
87
|
+
supervisor.instance_eval {
|
88
|
+
@log.level = @log_level = system.log_level unless system.log_level.nil?
|
89
|
+
@suppress_interval = system.emit_error_log_interval unless system.emit_error_log_interval.nil?
|
90
|
+
@suppress_config_dump = system.suppress_config_dump unless system.suppress_config_dump.nil?
|
91
|
+
@suppress_repeated_stacktrace = system.suppress_repeated_stacktrace unless system.suppress_repeated_stacktrace.nil?
|
92
|
+
@without_source = system.without_source unless system.without_source.nil?
|
93
|
+
@rpc_endpoint = system.rpc_endpoint unless system.rpc_endpoint.nil?
|
94
|
+
@enable_get_dump = system.enable_get_dump unless system.enable_get_dump.nil?
|
95
|
+
@process_name = system.process_name unless system.process_name.nil?
|
96
|
+
@file_permission = system.file_permission unless system.file_permission.nil?
|
97
|
+
@dir_permission = system.dir_permission unless system.dir_permission.nil?
|
98
|
+
}
|
99
|
+
end
|
100
|
+
|
101
|
+
module Mixin
|
102
|
+
def system_config
|
103
|
+
require 'fluent/engine'
|
104
|
+
unless defined?($_system_config)
|
105
|
+
$_system_config = nil
|
106
|
+
end
|
107
|
+
(instance_variable_defined?("@_system_config") && @_system_config) ||
|
108
|
+
$_system_config || Fluent::Engine.system_config
|
109
|
+
end
|
110
|
+
|
111
|
+
def system_config_override(opts={})
|
112
|
+
require 'fluent/engine'
|
113
|
+
if !instance_variable_defined?("@_system_config") || @_system_config.nil?
|
114
|
+
@_system_config = (defined?($_system_config) && $_system_config ? $_system_config : Fluent::Engine.system_config).dup
|
115
|
+
end
|
116
|
+
opts.each_pair do |key, value|
|
117
|
+
@_system_config.send(:"#{key.to_s}=", value)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
data/lib/fluent/test.rb
ADDED
@@ -0,0 +1,56 @@
|
|
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 'test/unit'
|
18
|
+
require 'fluent/env' # for Fluent.windows?
|
19
|
+
require 'fluent/test/log'
|
20
|
+
require 'fluent/test/base'
|
21
|
+
require 'fluent/test/input_test'
|
22
|
+
require 'fluent/test/output_test'
|
23
|
+
require 'fluent/test/filter_test'
|
24
|
+
require 'fluent/test/parser_test'
|
25
|
+
require 'fluent/test/formatter_test'
|
26
|
+
require 'serverengine'
|
27
|
+
|
28
|
+
|
29
|
+
module Fluent
|
30
|
+
module Test
|
31
|
+
def self.dummy_logger
|
32
|
+
dl_opts = {log_level: ServerEngine::DaemonLogger::INFO}
|
33
|
+
logdev = Fluent::Test::DummyLogDevice.new
|
34
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
35
|
+
Fluent::Log.new(logger)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.setup
|
39
|
+
$log = dummy_logger
|
40
|
+
|
41
|
+
Fluent.__send__(:remove_const, :Engine)
|
42
|
+
engine = Fluent.const_set(:Engine, EngineClass.new).init(SystemConfig.new)
|
43
|
+
|
44
|
+
engine.define_singleton_method(:now=) {|n|
|
45
|
+
@now = n
|
46
|
+
}
|
47
|
+
engine.define_singleton_method(:now) {
|
48
|
+
@now ||= super()
|
49
|
+
}
|
50
|
+
|
51
|
+
nil
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
$log ||= Fluent::Test.dummy_logger
|
@@ -0,0 +1,85 @@
|
|
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/config'
|
18
|
+
require 'fluent/engine'
|
19
|
+
require 'fluent/system_config'
|
20
|
+
require 'fluent/test/log'
|
21
|
+
require 'serverengine'
|
22
|
+
|
23
|
+
module Fluent
|
24
|
+
module Test
|
25
|
+
class TestDriver
|
26
|
+
include ::Test::Unit::Assertions
|
27
|
+
|
28
|
+
def initialize(klass, &block)
|
29
|
+
if klass.is_a?(Class)
|
30
|
+
if block
|
31
|
+
# Create new class for test w/ overwritten methods
|
32
|
+
# klass.dup is worse because its ancestors does NOT include original class name
|
33
|
+
klass_name = klass.name
|
34
|
+
klass = Class.new(klass)
|
35
|
+
klass.define_singleton_method("name") { klass_name }
|
36
|
+
klass.module_eval(&block)
|
37
|
+
end
|
38
|
+
@instance = klass.new
|
39
|
+
else
|
40
|
+
@instance = klass
|
41
|
+
end
|
42
|
+
@instance.router = Engine.root_agent.event_router
|
43
|
+
@instance.log = TestLogger.new
|
44
|
+
Engine.root_agent.instance_variable_set(:@log, @instance.log)
|
45
|
+
|
46
|
+
@config = Config.new
|
47
|
+
end
|
48
|
+
|
49
|
+
attr_reader :instance, :config
|
50
|
+
|
51
|
+
def configure(str, use_v1 = false)
|
52
|
+
if str.is_a?(Fluent::Config::Element)
|
53
|
+
@config = str
|
54
|
+
else
|
55
|
+
@config = Config.parse(str, "(test)", "(test_dir)", use_v1)
|
56
|
+
end
|
57
|
+
if label_name = @config['@label']
|
58
|
+
Engine.root_agent.add_label(label_name)
|
59
|
+
end
|
60
|
+
@instance.configure(@config)
|
61
|
+
self
|
62
|
+
end
|
63
|
+
|
64
|
+
# num_waits is for checking thread status. This will be removed after improved plugin API
|
65
|
+
def run(num_waits = 10, &block)
|
66
|
+
@instance.start
|
67
|
+
@instance.after_start
|
68
|
+
begin
|
69
|
+
# wait until thread starts
|
70
|
+
num_waits.times { sleep 0.05 }
|
71
|
+
return yield
|
72
|
+
ensure
|
73
|
+
@instance.shutdown
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
Test::Unit::Assertions.module_eval do
|
81
|
+
def assert_equal_event_time(a, b)
|
82
|
+
assert_equal(a.sec, b.sec)
|
83
|
+
assert_equal(a.nsec, b.nsec)
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,179 @@
|
|
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/config'
|
18
|
+
require 'fluent/config/element'
|
19
|
+
require 'fluent/log'
|
20
|
+
|
21
|
+
require 'timeout'
|
22
|
+
|
23
|
+
module Fluent
|
24
|
+
module Test
|
25
|
+
module Driver
|
26
|
+
class Base
|
27
|
+
attr_reader :instance, :logs
|
28
|
+
|
29
|
+
def initialize(klass, opts: {}, &block)
|
30
|
+
if klass.is_a?(Class)
|
31
|
+
if block
|
32
|
+
# Create new class for test w/ overwritten methods
|
33
|
+
# klass.dup is worse because its ancestors does NOT include original class name
|
34
|
+
klass_name = klass.name
|
35
|
+
klass = Class.new(klass)
|
36
|
+
klass.define_singleton_method("name") { klass_name }
|
37
|
+
klass.module_eval(&block)
|
38
|
+
end
|
39
|
+
@instance = klass.new
|
40
|
+
else
|
41
|
+
@instance = klass
|
42
|
+
end
|
43
|
+
|
44
|
+
@logs = []
|
45
|
+
|
46
|
+
@run_post_conditions = []
|
47
|
+
@run_breaking_conditions = []
|
48
|
+
@broken = false
|
49
|
+
end
|
50
|
+
|
51
|
+
def configure(conf, syntax: :v1)
|
52
|
+
raise NotImplementedError
|
53
|
+
end
|
54
|
+
|
55
|
+
def end_if(&block)
|
56
|
+
raise ArgumentError, "block is not given" unless block_given?
|
57
|
+
@run_post_conditions << block
|
58
|
+
end
|
59
|
+
|
60
|
+
def break_if(&block)
|
61
|
+
raise ArgumentError, "block is not given" unless block_given?
|
62
|
+
@run_breaking_conditions << block
|
63
|
+
end
|
64
|
+
|
65
|
+
def broken?
|
66
|
+
@broken
|
67
|
+
end
|
68
|
+
|
69
|
+
def run(timeout: nil, start: true, shutdown: true, &block)
|
70
|
+
instance_start if start
|
71
|
+
|
72
|
+
if @instance.respond_to?(:thread_wait_until_start)
|
73
|
+
@instance.thread_wait_until_start
|
74
|
+
end
|
75
|
+
if @instance.respond_to?(:event_loop_wait_until_start)
|
76
|
+
@instance.event_loop_wait_until_start
|
77
|
+
end
|
78
|
+
|
79
|
+
begin
|
80
|
+
run_actual(timeout: timeout, &block)
|
81
|
+
ensure
|
82
|
+
instance_shutdown if shutdown
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def instance_start
|
87
|
+
unless @instance.started?
|
88
|
+
@instance.start
|
89
|
+
instance_hook_after_started
|
90
|
+
end
|
91
|
+
unless @instance.after_started?
|
92
|
+
@instance.after_start
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def instance_hook_after_started
|
97
|
+
# insert hooks for tests available after instance.start
|
98
|
+
end
|
99
|
+
|
100
|
+
def instance_shutdown
|
101
|
+
@instance.stop unless @instance.stopped?
|
102
|
+
@instance.before_shutdown unless @instance.before_shutdown?
|
103
|
+
@instance.shutdown unless @instance.shutdown?
|
104
|
+
|
105
|
+
if @instance.respond_to?(:event_loop_wait_until_stop)
|
106
|
+
@instance.event_loop_wait_until_stop
|
107
|
+
end
|
108
|
+
|
109
|
+
@instance.after_shutdown unless @instance.after_shutdown?
|
110
|
+
@instance.close unless @instance.closed?
|
111
|
+
|
112
|
+
if @instance.respond_to?(:thread_wait_until_stop)
|
113
|
+
@instance.thread_wait_until_stop
|
114
|
+
end
|
115
|
+
|
116
|
+
@instance.terminate unless @instance.terminated?
|
117
|
+
end
|
118
|
+
|
119
|
+
def run_actual(timeout: nil, &block)
|
120
|
+
if @instance.respond_to?(:_threads)
|
121
|
+
until @instance._threads.values.all?(&:alive?)
|
122
|
+
sleep 0.01
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
if @instance.respond_to?(:event_loop_running?)
|
127
|
+
until @instance.event_loop_running?
|
128
|
+
sleep 0.01
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
if timeout
|
133
|
+
stop_at = Time.now + timeout
|
134
|
+
@run_breaking_conditions << ->(){ Time.now >= stop_at }
|
135
|
+
end
|
136
|
+
|
137
|
+
if !block_given? && @run_post_conditions.empty? && @run_breaking_conditions.empty?
|
138
|
+
raise ArgumentError, "no stop conditions nor block specified"
|
139
|
+
end
|
140
|
+
|
141
|
+
proc = if block_given?
|
142
|
+
->(){ block.call; sleep(0.1) until stop? }
|
143
|
+
else
|
144
|
+
->(){ sleep(0.1) until stop? }
|
145
|
+
end
|
146
|
+
|
147
|
+
if timeout
|
148
|
+
begin
|
149
|
+
Timeout.timeout(timeout * 1.1) do |sec|
|
150
|
+
proc.call
|
151
|
+
end
|
152
|
+
rescue Timeout::Error
|
153
|
+
@broken = true
|
154
|
+
end
|
155
|
+
else
|
156
|
+
proc.call
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def stop?
|
161
|
+
# Should stop running if post conditions are not registered.
|
162
|
+
return true unless @run_post_conditions
|
163
|
+
|
164
|
+
# Should stop running if all of the post conditions are true.
|
165
|
+
return true if @run_post_conditions.all? {|proc| proc.call }
|
166
|
+
|
167
|
+
# Should stop running if some of the breaking conditions is true.
|
168
|
+
# In this case, some post conditions may be not true.
|
169
|
+
if @run_breaking_conditions.any? {|proc| proc.call }
|
170
|
+
@broken = true
|
171
|
+
return true
|
172
|
+
end
|
173
|
+
|
174
|
+
false
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
@@ -0,0 +1,70 @@
|
|
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/test/driver/base'
|
18
|
+
|
19
|
+
require 'fluent/plugin/base'
|
20
|
+
require 'fluent/plugin_id'
|
21
|
+
require 'fluent/log'
|
22
|
+
require 'fluent/plugin_helper'
|
23
|
+
|
24
|
+
module Fluent
|
25
|
+
module Test
|
26
|
+
module Driver
|
27
|
+
class OwnerDummy < Fluent::Plugin::Base
|
28
|
+
include PluginId
|
29
|
+
include PluginLoggerMixin
|
30
|
+
include PluginHelper::Mixin
|
31
|
+
end
|
32
|
+
|
33
|
+
class BaseOwned < Base
|
34
|
+
attr_accessor :section_name
|
35
|
+
|
36
|
+
def initialize(klass, opts: {}, &block)
|
37
|
+
super
|
38
|
+
|
39
|
+
owner = OwnerDummy.new
|
40
|
+
if opts
|
41
|
+
owner.system_config_override(opts)
|
42
|
+
end
|
43
|
+
owner.log = TestLogger.new
|
44
|
+
|
45
|
+
if @instance.respond_to?(:owner=)
|
46
|
+
@instance.owner = owner
|
47
|
+
if opts
|
48
|
+
@instance.system_config_override(opts)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
@logs = owner.log.out.logs
|
53
|
+
@section_name = ''
|
54
|
+
end
|
55
|
+
|
56
|
+
def configure(conf, syntax: :v1)
|
57
|
+
if conf.is_a?(Fluent::Config::Element)
|
58
|
+
@config = conf
|
59
|
+
elsif conf.is_a?(Hash)
|
60
|
+
@config = Fluent::Config::Element.new(@section_name, "", Hash[conf.map{|k,v| [k.to_s, v]}], [])
|
61
|
+
else
|
62
|
+
@config = Fluent::Config.parse(conf, @section_name, "", syntax: syntax)
|
63
|
+
end
|
64
|
+
@instance.configure(@config)
|
65
|
+
self
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|