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,242 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
require 'fluent/plugin_helper/compat_parameters'
|
3
|
+
require 'fluent/plugin/base'
|
4
|
+
|
5
|
+
require 'time'
|
6
|
+
|
7
|
+
class CompatParameterTest < Test::Unit::TestCase
|
8
|
+
setup do
|
9
|
+
Fluent::Test.setup
|
10
|
+
@i = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
teardown do
|
14
|
+
if @i
|
15
|
+
@i.stop unless @i.stopped?
|
16
|
+
@i.before_shutdown unless @i.before_shutdown?
|
17
|
+
@i.shutdown unless @i.shutdown?
|
18
|
+
@i.after_shutdown unless @i.after_shutdown?
|
19
|
+
@i.close unless @i.closed?
|
20
|
+
@i.terminate unless @i.terminated?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class DummyO0 < Fluent::Plugin::Output
|
25
|
+
helpers :compat_parameters
|
26
|
+
def configure(conf)
|
27
|
+
compat_parameters_buffer(conf, default_chunk_key: '')
|
28
|
+
super
|
29
|
+
end
|
30
|
+
def write(chunk); end # dummy
|
31
|
+
end
|
32
|
+
class DummyO1 < Fluent::Plugin::Output
|
33
|
+
helpers :compat_parameters
|
34
|
+
def configure(conf)
|
35
|
+
compat_parameters_buffer(conf, default_chunk_key: 'time')
|
36
|
+
super
|
37
|
+
end
|
38
|
+
def write(chunk); end # dummy
|
39
|
+
end
|
40
|
+
class DummyO2 < Fluent::Plugin::Output
|
41
|
+
helpers :compat_parameters
|
42
|
+
def configure(conf)
|
43
|
+
compat_parameters_buffer(conf, default_chunk_key: 'time')
|
44
|
+
super
|
45
|
+
end
|
46
|
+
def write(chunk); end # dummy
|
47
|
+
end
|
48
|
+
class DummyO3 < Fluent::Plugin::Output
|
49
|
+
helpers :compat_parameters
|
50
|
+
def configure(conf)
|
51
|
+
compat_parameters_buffer(conf, default_chunk_key: 'tag')
|
52
|
+
super
|
53
|
+
end
|
54
|
+
def write(chunk); end # dummy
|
55
|
+
end
|
56
|
+
class DummyO4 < Fluent::Plugin::Output
|
57
|
+
helpers :compat_parameters, :inject, :formatter
|
58
|
+
attr_reader :f
|
59
|
+
def configure(conf)
|
60
|
+
compat_parameters_convert(conf, :buffer, :inject, :formatter, default_chunk_key: 'tag')
|
61
|
+
super
|
62
|
+
end
|
63
|
+
def start
|
64
|
+
super
|
65
|
+
@f = formatter_create()
|
66
|
+
end
|
67
|
+
def write(chunk); end # dummy
|
68
|
+
end
|
69
|
+
|
70
|
+
sub_test_case 'output plugins which does not have default chunk key' do
|
71
|
+
test 'plugin helper converts parameters into plugin configuration parameters' do
|
72
|
+
hash = {
|
73
|
+
'num_threads' => 8,
|
74
|
+
'flush_interval' => '10s',
|
75
|
+
'buffer_chunk_limit' => '8m',
|
76
|
+
'buffer_queue_limit' => '1024',
|
77
|
+
'flush_at_shutdown' => 'yes',
|
78
|
+
}
|
79
|
+
conf = config_element('ROOT', '', hash)
|
80
|
+
@i = DummyO0.new
|
81
|
+
@i.configure(conf)
|
82
|
+
|
83
|
+
assert_equal 'memory', @i.buffer_config[:@type]
|
84
|
+
assert_equal [], @i.buffer_config.chunk_keys
|
85
|
+
assert_equal 8, @i.buffer_config.flush_thread_count
|
86
|
+
assert_equal 10, @i.buffer_config.flush_interval
|
87
|
+
assert @i.buffer_config.flush_at_shutdown
|
88
|
+
|
89
|
+
assert_equal 8*1024*1024, @i.buffer.chunk_limit_size
|
90
|
+
assert_equal 1024, @i.buffer.queue_length_limit
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
sub_test_case 'output plugins which has default chunk key: time' do
|
95
|
+
test 'plugin helper converts parameters into plugin configuration parameters' do
|
96
|
+
hash = {
|
97
|
+
'buffer_type' => 'file',
|
98
|
+
'buffer_path' => '/tmp/mybuffer',
|
99
|
+
'disable_retry_limit' => 'yes',
|
100
|
+
'max_retry_wait' => '1h',
|
101
|
+
'buffer_queue_full_action' => 'block',
|
102
|
+
}
|
103
|
+
conf = config_element('ROOT', '', hash)
|
104
|
+
@i = DummyO1.new
|
105
|
+
@i.configure(conf)
|
106
|
+
|
107
|
+
assert_equal 'file', @i.buffer_config[:@type]
|
108
|
+
assert_equal 24*60*60, @i.buffer_config.timekey
|
109
|
+
assert @i.buffer_config.retry_forever
|
110
|
+
assert_equal 60*60, @i.buffer_config.retry_max_interval
|
111
|
+
assert_equal :block, @i.buffer_config.overflow_action
|
112
|
+
|
113
|
+
assert !@i.chunk_key_tag
|
114
|
+
assert_equal [], @i.chunk_keys
|
115
|
+
|
116
|
+
assert_equal '/tmp/mybuffer/buffer.*.log', @i.buffer.path
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
sub_test_case 'output plugins which does not have default chunk key' do
|
121
|
+
test 'plugin helper converts parameters into plugin configuration parameters' do
|
122
|
+
hash = {
|
123
|
+
'buffer_type' => 'file',
|
124
|
+
'buffer_path' => '/tmp/mybuffer',
|
125
|
+
'time_slice_format' => '%Y%m%d%H',
|
126
|
+
'time_slice_wait' => '10',
|
127
|
+
'retry_limit' => '1024',
|
128
|
+
'buffer_queue_full_action' => 'drop_oldest_chunk',
|
129
|
+
}
|
130
|
+
conf = config_element('ROOT', '', hash)
|
131
|
+
@i = DummyO2.new
|
132
|
+
@i.configure(conf)
|
133
|
+
|
134
|
+
assert_equal 'file', @i.buffer_config[:@type]
|
135
|
+
assert_equal 60*60, @i.buffer_config.timekey
|
136
|
+
assert_equal 10, @i.buffer_config.timekey_wait
|
137
|
+
assert_equal 1024, @i.buffer_config.retry_max_times
|
138
|
+
assert_equal :drop_oldest_chunk, @i.buffer_config.overflow_action
|
139
|
+
|
140
|
+
assert @i.chunk_key_time
|
141
|
+
assert !@i.chunk_key_tag
|
142
|
+
assert_equal [], @i.chunk_keys
|
143
|
+
|
144
|
+
assert_equal '/tmp/mybuffer/buffer.*.log', @i.buffer.path
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
sub_test_case 'output plugins which has default chunk key: tag' do
|
149
|
+
test 'plugin helper converts parameters into plugin configuration parameters' do
|
150
|
+
hash = {
|
151
|
+
'buffer_type' => 'memory',
|
152
|
+
'num_threads' => '10',
|
153
|
+
'flush_interval' => '10s',
|
154
|
+
'try_flush_interval' => '0.1',
|
155
|
+
'queued_chunk_flush_interval' => '0.5',
|
156
|
+
}
|
157
|
+
conf = config_element('ROOT', '', hash)
|
158
|
+
@i = DummyO3.new
|
159
|
+
@i.configure(conf)
|
160
|
+
|
161
|
+
assert_equal 'memory', @i.buffer_config[:@type]
|
162
|
+
assert_equal 10, @i.buffer_config.flush_thread_count
|
163
|
+
assert_equal 10, @i.buffer_config.flush_interval
|
164
|
+
assert_equal 0.1, @i.buffer_config.flush_thread_interval
|
165
|
+
assert_equal 0.5, @i.buffer_config.flush_thread_burst_interval
|
166
|
+
|
167
|
+
assert !@i.chunk_key_time
|
168
|
+
assert @i.chunk_key_tag
|
169
|
+
assert_equal [], @i.chunk_keys
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
sub_test_case 'output plugins which has default chunk key: tag, and enables inject and formatter' do
|
174
|
+
test 'plugin helper converts parameters into plugin configuration parameters for all of buffer, inject and formatter' do
|
175
|
+
hash = {
|
176
|
+
'buffer_type' => 'file',
|
177
|
+
'buffer_path' => File.expand_path('../../tmp/compat_parameters/mybuffer.*.log', __FILE__),
|
178
|
+
'num_threads' => '10',
|
179
|
+
'format' => 'ltsv',
|
180
|
+
'delimiter' => ',',
|
181
|
+
'label_delimiter' => '%',
|
182
|
+
'include_time_key' => 'true', # default time_key 'time' and default time format (iso8601: 2016-06-24T15:57:38) at localtime
|
183
|
+
'include_tag_key' => 'yes', # default tag_key 'tag'
|
184
|
+
}
|
185
|
+
conf = config_element('ROOT', '', hash)
|
186
|
+
@i = DummyO4.new
|
187
|
+
@i.configure(conf)
|
188
|
+
@i.start
|
189
|
+
@i.after_start
|
190
|
+
|
191
|
+
assert_equal 'file', @i.buffer_config[:@type]
|
192
|
+
assert_equal 10, @i.buffer_config.flush_thread_count
|
193
|
+
formatter = @i.f
|
194
|
+
assert{ formatter.is_a? Fluent::Plugin::LabeledTSVFormatter }
|
195
|
+
assert_equal ',', @i.f.delimiter
|
196
|
+
assert_equal '%', @i.f.label_delimiter
|
197
|
+
|
198
|
+
assert !@i.chunk_key_time
|
199
|
+
assert @i.chunk_key_tag
|
200
|
+
assert_equal [], @i.chunk_keys
|
201
|
+
|
202
|
+
t = event_time('2016-06-24 16:05:01') # localtime
|
203
|
+
iso8601str = Time.at(t.to_i).iso8601
|
204
|
+
formatted = @i.f.format('tag.test', t, @i.inject_values_to_record('tag.test', t, {"value" => 1}))
|
205
|
+
assert_equal "value%1,tag%tag.test,time%#{iso8601str}\n", formatted
|
206
|
+
end
|
207
|
+
|
208
|
+
test 'plugin helper setups time injecting as unix time (integer from epoch)' do
|
209
|
+
hash = {
|
210
|
+
'buffer_type' => 'file',
|
211
|
+
'buffer_path' => File.expand_path('../../tmp/compat_parameters/mybuffer.*.log', __FILE__),
|
212
|
+
'num_threads' => '10',
|
213
|
+
'format' => 'ltsv',
|
214
|
+
'delimiter' => ',',
|
215
|
+
'label_delimiter' => '%',
|
216
|
+
'include_time_key' => 'true', # default time_key 'time' and default time format (iso8601: 2016-06-24T15:57:38) at localtime
|
217
|
+
'include_tag_key' => 'yes', # default tag_key 'tag'
|
218
|
+
}
|
219
|
+
conf = config_element('ROOT', '', hash)
|
220
|
+
@i = DummyO4.new
|
221
|
+
@i.configure(conf)
|
222
|
+
@i.start
|
223
|
+
@i.after_start
|
224
|
+
|
225
|
+
assert_equal 'file', @i.buffer_config[:@type]
|
226
|
+
assert_equal 10, @i.buffer_config.flush_thread_count
|
227
|
+
formatter = @i.f
|
228
|
+
assert{ formatter.is_a? Fluent::Plugin::LabeledTSVFormatter }
|
229
|
+
assert_equal ',', @i.f.delimiter
|
230
|
+
assert_equal '%', @i.f.label_delimiter
|
231
|
+
|
232
|
+
assert !@i.chunk_key_time
|
233
|
+
assert @i.chunk_key_tag
|
234
|
+
assert_equal [], @i.chunk_keys
|
235
|
+
|
236
|
+
t = event_time('2016-06-24 16:05:01') # localtime
|
237
|
+
iso8601str = Time.at(t.to_i).iso8601
|
238
|
+
formatted = @i.f.format('tag.test', t, @i.inject_values_to_record('tag.test', t, {"value" => 1}))
|
239
|
+
assert_equal "value%1,tag%tag.test,time%#{iso8601str}\n", formatted
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
require 'fluent/plugin_helper/event_emitter'
|
3
|
+
require 'fluent/plugin/base'
|
4
|
+
|
5
|
+
class EventEmitterTest < Test::Unit::TestCase
|
6
|
+
setup do
|
7
|
+
Fluent::Test.setup
|
8
|
+
end
|
9
|
+
|
10
|
+
class Dummy0 < Fluent::Plugin::TestBase
|
11
|
+
end
|
12
|
+
|
13
|
+
class Dummy < Fluent::Plugin::TestBase
|
14
|
+
helpers :event_emitter
|
15
|
+
end
|
16
|
+
|
17
|
+
test 'can be instantiated to be able to emit with router' do
|
18
|
+
d0 = Dummy0.new
|
19
|
+
assert d0.respond_to?(:has_router?)
|
20
|
+
assert !d0.has_router?
|
21
|
+
assert !d0.respond_to?(:router)
|
22
|
+
|
23
|
+
d1 = Dummy.new
|
24
|
+
assert d1.respond_to?(:has_router?)
|
25
|
+
assert d1.has_router?
|
26
|
+
assert d1.respond_to?(:router)
|
27
|
+
d1.stop; d1.shutdown; d1.close; d1.terminate
|
28
|
+
end
|
29
|
+
|
30
|
+
test 'can be configured with valid router' do
|
31
|
+
d1 = Dummy.new
|
32
|
+
assert d1.has_router?
|
33
|
+
assert_nil d1.router
|
34
|
+
|
35
|
+
assert_nothing_raised do
|
36
|
+
d1.configure(config_element())
|
37
|
+
end
|
38
|
+
|
39
|
+
assert d1.router
|
40
|
+
|
41
|
+
d1.shutdown
|
42
|
+
|
43
|
+
assert d1.router
|
44
|
+
|
45
|
+
d1.close
|
46
|
+
|
47
|
+
assert_nil d1.router
|
48
|
+
|
49
|
+
d1.terminate
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
require 'fluent/plugin_helper/event_loop'
|
3
|
+
require 'fluent/plugin/base'
|
4
|
+
|
5
|
+
class EventLoopTest < Test::Unit::TestCase
|
6
|
+
class Dummy < Fluent::Plugin::TestBase
|
7
|
+
helpers :event_loop
|
8
|
+
def configure(conf)
|
9
|
+
super
|
10
|
+
@_event_loop_run_timeout = 0.1
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
test 'can be instantiated to be able to create event loop' do
|
15
|
+
d1 = Dummy.new
|
16
|
+
assert d1.respond_to?(:event_loop_attach)
|
17
|
+
assert d1.respond_to?(:event_loop_running?)
|
18
|
+
assert d1.respond_to?(:_event_loop)
|
19
|
+
assert d1._event_loop
|
20
|
+
assert !d1.event_loop_running?
|
21
|
+
end
|
22
|
+
|
23
|
+
test 'can be configured' do
|
24
|
+
d1 = Dummy.new
|
25
|
+
assert_nothing_raised do
|
26
|
+
d1.configure(config_element())
|
27
|
+
end
|
28
|
+
assert d1.plugin_id
|
29
|
+
assert d1.log
|
30
|
+
end
|
31
|
+
|
32
|
+
test 'can run event loop by start, stop by shutdown/close and clear by terminate' do
|
33
|
+
d1 = Dummy.new
|
34
|
+
d1.configure(config_element())
|
35
|
+
assert !d1.event_loop_running?
|
36
|
+
|
37
|
+
d1.start
|
38
|
+
d1.event_loop_wait_until_start
|
39
|
+
|
40
|
+
assert d1.event_loop_running?
|
41
|
+
assert_equal 1, d1._event_loop.watchers.size
|
42
|
+
|
43
|
+
d1.shutdown
|
44
|
+
d1.close
|
45
|
+
|
46
|
+
assert !d1.event_loop_running?
|
47
|
+
|
48
|
+
d1.terminate
|
49
|
+
|
50
|
+
assert_nil d1._event_loop
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,252 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
require 'fluent/plugin_helper/formatter'
|
3
|
+
require 'fluent/plugin/base'
|
4
|
+
|
5
|
+
class FormatterHelperTest < Test::Unit::TestCase
|
6
|
+
class ExampleFormatter < Fluent::Plugin::Formatter
|
7
|
+
Fluent::Plugin.register_formatter('example', self)
|
8
|
+
def format(tag, time, record)
|
9
|
+
"#{tag},#{time.to_i},#{record.keys.sort.join(',')}" # hey, you miss values! :P
|
10
|
+
end
|
11
|
+
end
|
12
|
+
class Example2Formatter < Fluent::Plugin::Formatter
|
13
|
+
Fluent::Plugin.register_formatter('example2', self)
|
14
|
+
def format(tag, time, record)
|
15
|
+
"#{tag},#{time.to_i},#{record.values.sort.join(',')}" # key...
|
16
|
+
end
|
17
|
+
end
|
18
|
+
class Dummy < Fluent::Plugin::TestBase
|
19
|
+
helpers :formatter
|
20
|
+
end
|
21
|
+
|
22
|
+
class Dummy2 < Fluent::Plugin::TestBase
|
23
|
+
helpers :formatter
|
24
|
+
config_section :format do
|
25
|
+
config_set_default :@type, 'example2'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
setup do
|
30
|
+
@d = nil
|
31
|
+
end
|
32
|
+
|
33
|
+
teardown do
|
34
|
+
if @d
|
35
|
+
@d.stop unless @d.stopped?
|
36
|
+
@d.shutdown unless @d.shutdown?
|
37
|
+
@d.close unless @d.closed?
|
38
|
+
@d.terminate unless @d.terminated?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
test 'can be initialized without any formatters at first' do
|
43
|
+
d = Dummy.new
|
44
|
+
assert_equal 0, d._formatters.size
|
45
|
+
end
|
46
|
+
|
47
|
+
test 'can override default configuration parameters, but not overwrite whole definition' do
|
48
|
+
d = Dummy.new
|
49
|
+
assert_equal [], d.formatter_configs
|
50
|
+
|
51
|
+
d = Dummy2.new
|
52
|
+
d.configure(config_element('ROOT', '', {}, [config_element('format', '', {}, [])]))
|
53
|
+
assert_raise NoMethodError do
|
54
|
+
d.format
|
55
|
+
end
|
56
|
+
assert_equal 1, d.formatter_configs.size
|
57
|
+
assert_equal 'example2', d.formatter_configs.first[:@type]
|
58
|
+
end
|
59
|
+
|
60
|
+
test 'creates instance of type specified by conf, or default_type if @type is missing in conf' do
|
61
|
+
d = Dummy2.new
|
62
|
+
d.configure(config_element())
|
63
|
+
i = d.formatter_create(conf: config_element('format', '', {'@type' => 'example'}), default_type: 'example2')
|
64
|
+
assert{ i.is_a?(ExampleFormatter) }
|
65
|
+
|
66
|
+
d = Dummy2.new
|
67
|
+
d.configure(config_element())
|
68
|
+
i = d.formatter_create(conf: nil, default_type: 'example2')
|
69
|
+
assert{ i.is_a?(Example2Formatter) }
|
70
|
+
end
|
71
|
+
|
72
|
+
test 'raises config error if config section is specified, but @type is not specified' do
|
73
|
+
d = Dummy2.new
|
74
|
+
d.configure(config_element())
|
75
|
+
assert_raise Fluent::ConfigError.new("@type is required in <format>") do
|
76
|
+
d.formatter_create(conf: config_element('format', '', {}), default_type: 'example2')
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
test 'can be configured without format sections' do
|
81
|
+
d = Dummy.new
|
82
|
+
assert_nothing_raised do
|
83
|
+
d.configure(config_element())
|
84
|
+
end
|
85
|
+
assert_equal 0, d._formatters.size
|
86
|
+
end
|
87
|
+
|
88
|
+
test 'can be configured with a format section' do
|
89
|
+
d = Dummy.new
|
90
|
+
conf = config_element('ROOT', '', {}, [
|
91
|
+
config_element('format', '', {'@type' => 'example'})
|
92
|
+
])
|
93
|
+
assert_nothing_raised do
|
94
|
+
d.configure(conf)
|
95
|
+
end
|
96
|
+
assert_equal 1, d._formatters.size
|
97
|
+
assert{ d._formatters.values.all?{ |formatter| !formatter.started? } }
|
98
|
+
end
|
99
|
+
|
100
|
+
test 'can be configured with 2 or more format sections with different usages with each other' do
|
101
|
+
d = Dummy.new
|
102
|
+
conf = config_element('ROOT', '', {}, [
|
103
|
+
config_element('format', 'default', {'@type' => 'example'}),
|
104
|
+
config_element('format', 'extra', {'@type' => 'example2'}),
|
105
|
+
])
|
106
|
+
assert_nothing_raised do
|
107
|
+
d.configure(conf)
|
108
|
+
end
|
109
|
+
assert_equal 2, d._formatters.size
|
110
|
+
assert{ d._formatters.values.all?{ |formatter| !formatter.started? } }
|
111
|
+
end
|
112
|
+
|
113
|
+
test 'cannot be configured with 2 format sections with same usage' do
|
114
|
+
d = Dummy.new
|
115
|
+
conf = config_element('ROOT', '', {}, [
|
116
|
+
config_element('format', 'default', {'@type' => 'example'}),
|
117
|
+
config_element('format', 'extra', {'@type' => 'example2'}),
|
118
|
+
config_element('format', 'extra', {'@type' => 'example2'}),
|
119
|
+
])
|
120
|
+
assert_raises Fluent::ConfigError do
|
121
|
+
d.configure(conf)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
test 'creates a format plugin instance which is already configured without usage' do
|
126
|
+
@d = d = Dummy.new
|
127
|
+
conf = config_element('ROOT', '', {}, [
|
128
|
+
config_element('format', '', {'@type' => 'example'})
|
129
|
+
])
|
130
|
+
d.configure(conf)
|
131
|
+
d.start
|
132
|
+
|
133
|
+
formatter = d.formatter_create
|
134
|
+
assert{ formatter.is_a? ExampleFormatter }
|
135
|
+
assert formatter.started?
|
136
|
+
end
|
137
|
+
|
138
|
+
test 'creates a formatter plugin instance which is already configured with usage' do
|
139
|
+
@d = d = Dummy.new
|
140
|
+
conf = config_element('ROOT', '', {}, [
|
141
|
+
config_element('format', 'mydata', {'@type' => 'example'})
|
142
|
+
])
|
143
|
+
d.configure(conf)
|
144
|
+
d.start
|
145
|
+
|
146
|
+
formatter = d.formatter_create(usage: 'mydata')
|
147
|
+
assert{ formatter.is_a? ExampleFormatter }
|
148
|
+
assert formatter.started?
|
149
|
+
end
|
150
|
+
|
151
|
+
test 'creates a formatter plugin without configurations' do
|
152
|
+
@d = d = Dummy.new
|
153
|
+
d.configure(config_element())
|
154
|
+
d.start
|
155
|
+
|
156
|
+
formatter = d.formatter_create(usage: 'mydata', type: 'example', conf: config_element('format', 'mydata'))
|
157
|
+
assert{ formatter.is_a? ExampleFormatter }
|
158
|
+
assert formatter.started?
|
159
|
+
end
|
160
|
+
|
161
|
+
test 'creates 2 or more formatter plugin instances' do
|
162
|
+
@d = d = Dummy.new
|
163
|
+
conf = config_element('ROOT', '', {}, [
|
164
|
+
config_element('format', 'mydata', {'@type' => 'example'}),
|
165
|
+
config_element('format', 'secret', {'@type' => 'example2'})
|
166
|
+
])
|
167
|
+
d.configure(conf)
|
168
|
+
d.start
|
169
|
+
|
170
|
+
p1 = d.formatter_create(usage: 'mydata')
|
171
|
+
p2 = d.formatter_create(usage: 'secret')
|
172
|
+
assert{ p1.is_a? ExampleFormatter }
|
173
|
+
assert p1.started?
|
174
|
+
assert{ p2.is_a? Example2Formatter }
|
175
|
+
assert p2.started?
|
176
|
+
end
|
177
|
+
|
178
|
+
test 'calls lifecycle methods for all plugin instances via owner plugin' do
|
179
|
+
@d = d = Dummy.new
|
180
|
+
conf = config_element('ROOT', '', {}, [ config_element('format', '', {'@type' => 'example'}), config_element('format', 'e2', {'@type' => 'example'}) ])
|
181
|
+
d.configure(conf)
|
182
|
+
d.start
|
183
|
+
|
184
|
+
i1 = d.formatter_create(usage: '')
|
185
|
+
i2 = d.formatter_create(usage: 'e2')
|
186
|
+
i3 = d.formatter_create(usage: 'e3', type: 'example2')
|
187
|
+
|
188
|
+
assert i1.started?
|
189
|
+
assert i2.started?
|
190
|
+
assert i3.started?
|
191
|
+
|
192
|
+
assert !i1.stopped?
|
193
|
+
assert !i2.stopped?
|
194
|
+
assert !i3.stopped?
|
195
|
+
|
196
|
+
d.stop
|
197
|
+
|
198
|
+
assert i1.stopped?
|
199
|
+
assert i2.stopped?
|
200
|
+
assert i3.stopped?
|
201
|
+
|
202
|
+
assert !i1.before_shutdown?
|
203
|
+
assert !i2.before_shutdown?
|
204
|
+
assert !i3.before_shutdown?
|
205
|
+
|
206
|
+
d.before_shutdown
|
207
|
+
|
208
|
+
assert i1.before_shutdown?
|
209
|
+
assert i2.before_shutdown?
|
210
|
+
assert i3.before_shutdown?
|
211
|
+
|
212
|
+
assert !i1.shutdown?
|
213
|
+
assert !i2.shutdown?
|
214
|
+
assert !i3.shutdown?
|
215
|
+
|
216
|
+
d.shutdown
|
217
|
+
|
218
|
+
assert i1.shutdown?
|
219
|
+
assert i2.shutdown?
|
220
|
+
assert i3.shutdown?
|
221
|
+
|
222
|
+
assert !i1.after_shutdown?
|
223
|
+
assert !i2.after_shutdown?
|
224
|
+
assert !i3.after_shutdown?
|
225
|
+
|
226
|
+
d.after_shutdown
|
227
|
+
|
228
|
+
assert i1.after_shutdown?
|
229
|
+
assert i2.after_shutdown?
|
230
|
+
assert i3.after_shutdown?
|
231
|
+
|
232
|
+
assert !i1.closed?
|
233
|
+
assert !i2.closed?
|
234
|
+
assert !i3.closed?
|
235
|
+
|
236
|
+
d.close
|
237
|
+
|
238
|
+
assert i1.closed?
|
239
|
+
assert i2.closed?
|
240
|
+
assert i3.closed?
|
241
|
+
|
242
|
+
assert !i1.terminated?
|
243
|
+
assert !i2.terminated?
|
244
|
+
assert !i3.terminated?
|
245
|
+
|
246
|
+
d.terminate
|
247
|
+
|
248
|
+
assert i1.terminated?
|
249
|
+
assert i2.terminated?
|
250
|
+
assert i3.terminated?
|
251
|
+
end
|
252
|
+
end
|