fluentd 0.12.40 → 1.6.2
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 +5 -5
- data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +13 -0
- data/.gitignore +5 -0
- data/.gitlab/cicd-template.yaml +10 -0
- data/.gitlab-ci.yml +147 -0
- data/.travis.yml +56 -20
- data/ADOPTERS.md +5 -0
- data/CHANGELOG.md +1369 -0
- data/CONTRIBUTING.md +16 -5
- data/GOVERNANCE.md +55 -0
- data/Gemfile +5 -0
- data/GithubWorkflow.md +78 -0
- data/LICENSE +202 -0
- data/MAINTAINERS.md +7 -0
- data/README.md +23 -11
- data/Rakefile +48 -2
- data/Vagrantfile +17 -0
- data/appveyor.yml +37 -0
- data/bin/fluent-binlog-reader +7 -0
- data/bin/fluent-ca-generate +6 -0
- data/bin/fluent-plugin-config-format +5 -0
- data/bin/fluent-plugin-generate +5 -0
- data/bin/fluentd +3 -0
- data/code-of-conduct.md +3 -0
- data/example/copy_roundrobin.conf +39 -0
- data/example/counter.conf +18 -0
- data/example/in_dummy_blocks.conf +17 -0
- data/example/in_dummy_with_compression.conf +23 -0
- data/example/in_forward.conf +7 -0
- data/example/in_forward_client.conf +37 -0
- data/example/in_forward_shared_key.conf +15 -0
- data/example/in_forward_tls.conf +14 -0
- data/example/in_forward_users.conf +24 -0
- data/example/in_forward_workers.conf +21 -0
- data/example/in_http.conf +3 -1
- data/example/in_out_forward.conf +17 -0
- data/example/logevents.conf +25 -0
- data/example/multi_filters.conf +61 -0
- data/example/out_exec_filter.conf +42 -0
- data/example/out_forward.conf +13 -13
- data/example/out_forward_buf_file.conf +23 -0
- data/example/out_forward_client.conf +109 -0
- data/example/out_forward_heartbeat_none.conf +16 -0
- data/example/out_forward_shared_key.conf +36 -0
- data/example/out_forward_tls.conf +18 -0
- data/example/out_forward_users.conf +65 -0
- data/example/out_null.conf +36 -0
- data/example/secondary_file.conf +42 -0
- data/example/suppress_config_dump.conf +7 -0
- data/example/worker_section.conf +36 -0
- data/fluent.conf +29 -0
- data/fluentd.gemspec +21 -11
- data/lib/fluent/agent.rb +67 -90
- data/lib/fluent/clock.rb +62 -0
- data/lib/fluent/command/binlog_reader.rb +244 -0
- data/lib/fluent/command/ca_generate.rb +181 -0
- data/lib/fluent/command/cat.rb +42 -18
- data/lib/fluent/command/debug.rb +12 -10
- data/lib/fluent/command/fluentd.rb +153 -5
- data/lib/fluent/command/plugin_config_formatter.rb +292 -0
- data/lib/fluent/command/plugin_generator.rb +324 -0
- data/lib/fluent/compat/call_super_mixin.rb +67 -0
- data/lib/fluent/compat/detach_process_mixin.rb +33 -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 +718 -0
- data/lib/fluent/compat/output_chain.rb +60 -0
- data/lib/fluent/compat/parser.rb +310 -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/configure_proxy.rb +210 -62
- data/lib/fluent/config/dsl.rb +12 -5
- data/lib/fluent/config/element.rb +107 -9
- data/lib/fluent/config/literal_parser.rb +9 -3
- data/lib/fluent/config/parser.rb +4 -4
- data/lib/fluent/config/section.rb +51 -14
- data/lib/fluent/config/types.rb +28 -13
- data/lib/fluent/config/v1_parser.rb +3 -5
- data/lib/fluent/config.rb +23 -20
- data/lib/fluent/configurable.rb +79 -21
- data/lib/fluent/counter/base_socket.rb +46 -0
- data/lib/fluent/counter/client.rb +297 -0
- data/lib/fluent/counter/error.rb +86 -0
- data/lib/fluent/counter/mutex_hash.rb +163 -0
- data/lib/fluent/counter/server.rb +273 -0
- data/lib/fluent/counter/store.rb +205 -0
- data/lib/fluent/counter/validator.rb +145 -0
- data/lib/fluent/counter.rb +23 -0
- data/lib/fluent/daemon.rb +15 -0
- data/lib/fluent/engine.rb +102 -65
- data/lib/fluent/env.rb +7 -3
- data/lib/fluent/error.rb +30 -0
- data/lib/fluent/event.rb +197 -21
- data/lib/fluent/event_router.rb +93 -10
- data/lib/fluent/filter.rb +2 -50
- data/lib/fluent/formatter.rb +4 -293
- data/lib/fluent/input.rb +2 -32
- data/lib/fluent/label.rb +10 -2
- data/lib/fluent/load.rb +3 -3
- data/lib/fluent/log.rb +348 -81
- data/lib/fluent/match.rb +37 -36
- data/lib/fluent/mixin.rb +12 -176
- data/lib/fluent/msgpack_factory.rb +62 -0
- data/lib/fluent/output.rb +10 -612
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +4 -800
- data/lib/fluent/plugin/bare_output.rb +63 -0
- data/lib/fluent/plugin/base.rb +192 -0
- data/lib/fluent/plugin/buf_file.rb +128 -174
- data/lib/fluent/plugin/buf_memory.rb +9 -92
- data/lib/fluent/plugin/buffer/chunk.rb +221 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +383 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
- data/lib/fluent/plugin/buffer.rb +779 -0
- data/lib/fluent/plugin/compressable.rb +92 -0
- data/lib/fluent/plugin/exec_util.rb +3 -108
- data/lib/fluent/plugin/file_util.rb +4 -34
- data/lib/fluent/plugin/file_wrapper.rb +120 -0
- data/lib/fluent/plugin/filter.rb +93 -0
- data/lib/fluent/plugin/filter_grep.rb +117 -34
- data/lib/fluent/plugin/filter_parser.rb +85 -62
- data/lib/fluent/plugin/filter_record_transformer.rb +27 -39
- data/lib/fluent/plugin/filter_stdout.rb +15 -12
- data/lib/fluent/plugin/formatter.rb +50 -0
- data/lib/fluent/plugin/formatter_csv.rb +52 -0
- data/lib/fluent/plugin/formatter_hash.rb +33 -0
- data/lib/fluent/plugin/formatter_json.rb +55 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
- data/lib/fluent/plugin/formatter_out_file.rb +51 -0
- data/lib/fluent/plugin/formatter_single_value.rb +34 -0
- data/lib/fluent/plugin/formatter_stdout.rb +76 -0
- data/lib/fluent/plugin/formatter_tsv.rb +38 -0
- data/lib/fluent/plugin/in_debug_agent.rb +17 -6
- data/lib/fluent/plugin/in_dummy.rb +47 -20
- data/lib/fluent/plugin/in_exec.rb +55 -123
- data/lib/fluent/plugin/in_forward.rb +299 -216
- data/lib/fluent/plugin/in_gc_stat.rb +14 -36
- data/lib/fluent/plugin/in_http.rb +204 -91
- data/lib/fluent/plugin/in_monitor_agent.rb +186 -258
- data/lib/fluent/plugin/in_object_space.rb +13 -41
- data/lib/fluent/plugin/in_syslog.rb +112 -134
- data/lib/fluent/plugin/in_tail.rb +408 -745
- data/lib/fluent/plugin/in_tcp.rb +66 -9
- data/lib/fluent/plugin/in_udp.rb +60 -11
- data/lib/fluent/plugin/{in_stream.rb → in_unix.rb} +8 -4
- data/lib/fluent/plugin/input.rb +37 -0
- data/lib/fluent/plugin/multi_output.rb +158 -0
- data/lib/fluent/plugin/out_copy.rb +23 -35
- data/lib/fluent/plugin/out_exec.rb +67 -70
- data/lib/fluent/plugin/out_exec_filter.rb +204 -271
- data/lib/fluent/plugin/out_file.rb +267 -73
- data/lib/fluent/plugin/out_forward.rb +854 -325
- data/lib/fluent/plugin/out_null.rb +42 -9
- data/lib/fluent/plugin/out_relabel.rb +9 -5
- data/lib/fluent/plugin/out_roundrobin.rb +18 -37
- data/lib/fluent/plugin/out_secondary_file.rb +133 -0
- data/lib/fluent/plugin/out_stdout.rb +43 -10
- data/lib/fluent/plugin/out_stream.rb +7 -2
- data/lib/fluent/plugin/output.rb +1498 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
- data/lib/fluent/plugin/parser.rb +191 -0
- data/lib/fluent/plugin/parser_apache.rb +28 -0
- data/lib/fluent/plugin/parser_apache2.rb +88 -0
- data/lib/fluent/plugin/parser_apache_error.rb +26 -0
- data/lib/fluent/plugin/parser_csv.rb +39 -0
- data/lib/fluent/plugin/parser_json.rb +94 -0
- data/lib/fluent/plugin/parser_ltsv.rb +49 -0
- data/lib/fluent/plugin/parser_msgpack.rb +50 -0
- data/lib/fluent/plugin/parser_multiline.rb +106 -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 +68 -0
- data/lib/fluent/plugin/parser_syslog.rb +142 -0
- data/lib/fluent/plugin/parser_tsv.rb +42 -0
- data/lib/fluent/plugin/socket_util.rb +3 -143
- data/lib/fluent/plugin/storage.rb +84 -0
- data/lib/fluent/plugin/storage_local.rb +164 -0
- data/lib/fluent/plugin/string_util.rb +3 -15
- data/lib/fluent/plugin.rb +122 -121
- data/lib/fluent/plugin_helper/cert_option.rb +178 -0
- data/lib/fluent/plugin_helper/child_process.rb +364 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +333 -0
- data/lib/fluent/plugin_helper/counter.rb +51 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +93 -0
- data/lib/fluent/plugin_helper/event_loop.rb +170 -0
- data/lib/fluent/plugin_helper/extract.rb +104 -0
- data/lib/fluent/plugin_helper/formatter.rb +147 -0
- data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
- data/lib/fluent/plugin_helper/http_server/compat/server.rb +81 -0
- data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
- data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
- data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
- data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
- data/lib/fluent/plugin_helper/http_server/server.rb +87 -0
- data/lib/fluent/plugin_helper/http_server.rb +76 -0
- data/lib/fluent/plugin_helper/inject.rb +151 -0
- data/lib/fluent/plugin_helper/parser.rb +147 -0
- data/lib/fluent/plugin_helper/record_accessor.rb +210 -0
- data/lib/fluent/plugin_helper/retry_state.rb +205 -0
- data/lib/fluent/plugin_helper/server.rb +807 -0
- data/lib/fluent/plugin_helper/socket.rb +250 -0
- data/lib/fluent/plugin_helper/socket_option.rb +80 -0
- data/lib/fluent/plugin_helper/storage.rb +349 -0
- data/lib/fluent/plugin_helper/thread.rb +179 -0
- data/lib/fluent/plugin_helper/timer.rb +92 -0
- data/lib/fluent/plugin_helper.rb +73 -0
- data/lib/fluent/plugin_id.rb +80 -0
- data/lib/fluent/process.rb +3 -489
- data/lib/fluent/registry.rb +52 -10
- data/lib/fluent/root_agent.rb +204 -42
- data/lib/fluent/supervisor.rb +597 -359
- data/lib/fluent/system_config.rb +131 -42
- data/lib/fluent/test/base.rb +6 -54
- data/lib/fluent/test/driver/base.rb +224 -0
- data/lib/fluent/test/driver/base_owned.rb +70 -0
- data/lib/fluent/test/driver/base_owner.rb +135 -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 +53 -0
- data/lib/fluent/test/driver/output.rb +102 -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 +0 -1
- data/lib/fluent/test/formatter_test.rb +4 -1
- data/lib/fluent/test/helpers.rb +58 -10
- data/lib/fluent/test/input_test.rb +27 -19
- data/lib/fluent/test/log.rb +79 -0
- data/lib/fluent/test/output_test.rb +28 -39
- data/lib/fluent/test/parser_test.rb +3 -1
- data/lib/fluent/test/startup_shutdown.rb +46 -0
- data/lib/fluent/test.rb +33 -1
- data/lib/fluent/time.rb +450 -1
- data/lib/fluent/timezone.rb +27 -3
- data/lib/fluent/{status.rb → unique_id.rb} +15 -24
- data/lib/fluent/version.rb +1 -1
- data/lib/fluent/winsvc.rb +85 -0
- data/templates/new_gem/Gemfile +3 -0
- data/templates/new_gem/README.md.erb +43 -0
- data/templates/new_gem/Rakefile +13 -0
- data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
- data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
- data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
- data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
- data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
- data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
- data/templates/new_gem/test/helper.rb.erb +8 -0
- data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
- data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
- data/templates/plugin_config_formatter/param.md.erb +34 -0
- data/templates/plugin_config_formatter/section.md.erb +12 -0
- data/test/command/test_binlog_reader.rb +346 -0
- data/test/command/test_ca_generate.rb +70 -0
- data/test/command/test_fluentd.rb +901 -0
- data/test/command/test_plugin_config_formatter.rb +276 -0
- data/test/command/test_plugin_generator.rb +92 -0
- data/test/compat/test_calls_super.rb +166 -0
- data/test/compat/test_parser.rb +92 -0
- data/test/config/test_config_parser.rb +126 -2
- data/test/config/test_configurable.rb +946 -187
- data/test/config/test_configure_proxy.rb +424 -74
- data/test/config/test_dsl.rb +11 -11
- data/test/config/test_element.rb +500 -0
- data/test/config/test_literal_parser.rb +8 -0
- data/test/config/test_plugin_configuration.rb +56 -0
- data/test/config/test_section.rb +79 -7
- data/test/config/test_system_config.rb +122 -35
- data/test/config/test_types.rb +38 -0
- data/test/counter/test_client.rb +559 -0
- data/test/counter/test_error.rb +44 -0
- data/test/counter/test_mutex_hash.rb +179 -0
- data/test/counter/test_server.rb +589 -0
- data/test/counter/test_store.rb +258 -0
- data/test/counter/test_validator.rb +137 -0
- data/test/helper.rb +89 -6
- data/test/helpers/fuzzy_assert.rb +89 -0
- data/test/plugin/test_bare_output.rb +118 -0
- data/test/plugin/test_base.rb +115 -0
- data/test/plugin/test_buf_file.rb +823 -460
- data/test/plugin/test_buf_memory.rb +32 -194
- data/test/plugin/test_buffer.rb +1233 -0
- data/test/plugin/test_buffer_chunk.rb +198 -0
- data/test/plugin/test_buffer_file_chunk.rb +844 -0
- data/test/plugin/test_buffer_memory_chunk.rb +338 -0
- data/test/plugin/test_compressable.rb +84 -0
- data/test/plugin/test_filter.rb +357 -0
- data/test/plugin/test_filter_grep.rb +540 -29
- data/test/plugin/test_filter_parser.rb +439 -452
- data/test/plugin/test_filter_record_transformer.rb +123 -166
- data/test/plugin/test_filter_stdout.rb +160 -72
- data/test/plugin/test_formatter_csv.rb +111 -0
- data/test/plugin/test_formatter_hash.rb +35 -0
- data/test/plugin/test_formatter_json.rb +51 -0
- data/test/plugin/test_formatter_ltsv.rb +62 -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_formatter_tsv.rb +68 -0
- data/test/plugin/test_in_debug_agent.rb +24 -1
- data/test/plugin/test_in_dummy.rb +111 -18
- data/test/plugin/test_in_exec.rb +200 -113
- data/test/plugin/test_in_forward.rb +990 -387
- data/test/plugin/test_in_gc_stat.rb +10 -8
- data/test/plugin/test_in_http.rb +600 -224
- data/test/plugin/test_in_monitor_agent.rb +690 -0
- data/test/plugin/test_in_object_space.rb +24 -8
- data/test/plugin/test_in_syslog.rb +154 -215
- data/test/plugin/test_in_tail.rb +1006 -707
- data/test/plugin/test_in_tcp.rb +125 -48
- data/test/plugin/test_in_udp.rb +204 -63
- data/test/plugin/{test_in_stream.rb → test_in_unix.rb} +14 -13
- data/test/plugin/test_input.rb +126 -0
- data/test/plugin/test_metadata.rb +89 -0
- data/test/plugin/test_multi_output.rb +180 -0
- data/test/plugin/test_out_copy.rb +117 -112
- data/test/plugin/test_out_exec.rb +258 -53
- data/test/plugin/test_out_exec_filter.rb +538 -115
- data/test/plugin/test_out_file.rb +865 -178
- data/test/plugin/test_out_forward.rb +998 -210
- data/test/plugin/test_out_null.rb +105 -0
- data/test/plugin/test_out_relabel.rb +28 -0
- data/test/plugin/test_out_roundrobin.rb +36 -29
- data/test/plugin/test_out_secondary_file.rb +458 -0
- data/test/plugin/test_out_stdout.rb +135 -37
- data/test/plugin/test_out_stream.rb +18 -0
- data/test/plugin/test_output.rb +984 -0
- data/test/plugin/test_output_as_buffered.rb +2021 -0
- data/test/plugin/test_output_as_buffered_backup.rb +312 -0
- data/test/plugin/test_output_as_buffered_compress.rb +165 -0
- data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
- data/test/plugin/test_output_as_buffered_retries.rb +911 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +874 -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.rb +359 -0
- data/test/plugin/test_parser_apache.rb +42 -0
- data/test/plugin/test_parser_apache2.rb +47 -0
- data/test/plugin/test_parser_apache_error.rb +45 -0
- data/test/plugin/test_parser_csv.rb +103 -0
- data/test/plugin/test_parser_json.rb +138 -0
- data/test/plugin/test_parser_labeled_tsv.rb +145 -0
- data/test/plugin/test_parser_multiline.rb +100 -0
- data/test/plugin/test_parser_nginx.rb +88 -0
- data/test/plugin/test_parser_none.rb +52 -0
- data/test/plugin/test_parser_regexp.rb +289 -0
- data/test/plugin/test_parser_syslog.rb +441 -0
- data/test/plugin/test_parser_tsv.rb +122 -0
- data/test/plugin/test_storage.rb +167 -0
- data/test/plugin/test_storage_local.rb +335 -0
- data/test/plugin_helper/data/cert/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
- data/test/plugin_helper/data/cert/cert.pem +19 -0
- data/test/plugin_helper/http_server/test_app.rb +65 -0
- data/test/plugin_helper/http_server/test_route.rb +32 -0
- data/test/plugin_helper/test_cert_option.rb +16 -0
- data/test/plugin_helper/test_child_process.rb +794 -0
- data/test/plugin_helper/test_compat_parameters.rb +353 -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_extract.rb +194 -0
- data/test/plugin_helper/test_formatter.rb +255 -0
- data/test/plugin_helper/test_http_server_helper.rb +205 -0
- data/test/plugin_helper/test_inject.rb +519 -0
- data/test/plugin_helper/test_parser.rb +264 -0
- data/test/plugin_helper/test_record_accessor.rb +197 -0
- data/test/plugin_helper/test_retry_state.rb +442 -0
- data/test/plugin_helper/test_server.rb +1714 -0
- data/test/plugin_helper/test_storage.rb +542 -0
- data/test/plugin_helper/test_thread.rb +164 -0
- data/test/plugin_helper/test_timer.rb +132 -0
- data/test/scripts/exec_script.rb +0 -6
- data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
- data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
- data/test/scripts/fluent/plugin/out_test.rb +23 -15
- data/test/scripts/fluent/plugin/out_test2.rb +80 -0
- data/test/test_clock.rb +164 -0
- data/test/test_config.rb +16 -7
- data/test/test_configdsl.rb +2 -2
- data/test/test_event.rb +360 -13
- data/test/test_event_router.rb +108 -11
- data/test/test_event_time.rb +199 -0
- data/test/test_filter.rb +48 -6
- data/test/test_formatter.rb +11 -391
- data/test/test_input.rb +1 -1
- data/test/test_log.rb +591 -31
- data/test/test_mixin.rb +1 -1
- data/test/test_output.rb +121 -185
- data/test/test_plugin.rb +251 -0
- data/test/test_plugin_classes.rb +177 -10
- data/test/test_plugin_helper.rb +81 -0
- data/test/test_plugin_id.rb +101 -0
- data/test/test_process.rb +8 -42
- data/test/test_root_agent.rb +766 -21
- data/test/test_supervisor.rb +481 -0
- data/test/test_test_drivers.rb +135 -0
- data/test/test_time_formatter.rb +282 -0
- data/test/test_time_parser.rb +231 -0
- data/test/test_unique_id.rb +47 -0
- metadata +454 -60
- data/COPYING +0 -14
- data/ChangeLog +0 -666
- data/lib/fluent/buffer.rb +0 -365
- data/lib/fluent/plugin/in_status.rb +0 -76
- data/test/plugin/test_in_status.rb +0 -38
- data/test/test_buffer.rb +0 -624
- data/test/test_parser.rb +0 -1305
data/test/test_root_agent.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
require 'fluent/event_router'
|
3
3
|
require 'fluent/system_config'
|
4
|
+
require 'timecop'
|
4
5
|
require_relative 'test_plugin_classes'
|
5
6
|
|
6
7
|
class RootAgentTest < ::Test::Unit::TestCase
|
@@ -8,7 +9,7 @@ class RootAgentTest < ::Test::Unit::TestCase
|
|
8
9
|
include FluentTest
|
9
10
|
|
10
11
|
def test_initialize
|
11
|
-
ra = RootAgent.new
|
12
|
+
ra = RootAgent.new(log: $log)
|
12
13
|
assert_equal 0, ra.instance_variable_get(:@suppress_emit_error_log_interval)
|
13
14
|
assert_nil ra.instance_variable_get(:@next_emit_error_log_time)
|
14
15
|
end
|
@@ -19,7 +20,7 @@ class RootAgentTest < ::Test::Unit::TestCase
|
|
19
20
|
)
|
20
21
|
def test_initialize_with_opt(data)
|
21
22
|
opt, expected = data
|
22
|
-
ra = RootAgent.new(SystemConfig.new(opt))
|
23
|
+
ra = RootAgent.new(log: $log, system_config: SystemConfig.new(opt))
|
23
24
|
expected.each { |k, v|
|
24
25
|
assert_equal v, ra.instance_variable_get(k)
|
25
26
|
}
|
@@ -27,7 +28,7 @@ class RootAgentTest < ::Test::Unit::TestCase
|
|
27
28
|
|
28
29
|
sub_test_case 'configure' do
|
29
30
|
setup do
|
30
|
-
@ra = RootAgent.new
|
31
|
+
@ra = RootAgent.new(log: $log)
|
31
32
|
stub(Engine).root_agent { @ra }
|
32
33
|
end
|
33
34
|
|
@@ -43,9 +44,6 @@ class RootAgentTest < ::Test::Unit::TestCase
|
|
43
44
|
assert_empty ra.labels
|
44
45
|
assert_empty ra.outputs
|
45
46
|
assert_empty ra.filters
|
46
|
-
[:@started_inputs, :@started_outputs, :@started_filters].each { |k|
|
47
|
-
assert_empty ra.instance_variable_get(k)
|
48
|
-
}
|
49
47
|
assert_nil ra.context
|
50
48
|
assert_nil ra.error_collector
|
51
49
|
end
|
@@ -92,6 +90,41 @@ EOC
|
|
92
90
|
end
|
93
91
|
end
|
94
92
|
|
93
|
+
test 'raises configuration error if there are two same label section' do
|
94
|
+
conf = <<-EOC
|
95
|
+
<source>
|
96
|
+
@type test_in
|
97
|
+
@label @test
|
98
|
+
</source>
|
99
|
+
<label @test>
|
100
|
+
@type test_out
|
101
|
+
</label>
|
102
|
+
<label @test>
|
103
|
+
@type test_out
|
104
|
+
</label>
|
105
|
+
EOC
|
106
|
+
errmsg = "Section <label @test> appears twice"
|
107
|
+
assert_raise Fluent::ConfigError.new(errmsg) do
|
108
|
+
configure_ra(conf)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
test 'raises configuration error if there are not match sections in label section' do
|
113
|
+
conf = <<-EOC
|
114
|
+
<source>
|
115
|
+
@type test_in
|
116
|
+
@label @test
|
117
|
+
</source>
|
118
|
+
<label @test>
|
119
|
+
@type test_out
|
120
|
+
</label>
|
121
|
+
EOC
|
122
|
+
errmsg = "Missing <match> sections in <label @test> section"
|
123
|
+
assert_raise Fluent::ConfigError.new(errmsg) do
|
124
|
+
configure_ra(conf)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
95
128
|
test 'with plugins' do
|
96
129
|
# check @type and type in one configuration
|
97
130
|
conf = <<-EOC
|
@@ -122,11 +155,8 @@ EOC
|
|
122
155
|
EOC
|
123
156
|
ra = configure_ra(conf)
|
124
157
|
assert_kind_of FluentTestInput, ra.inputs.first
|
125
|
-
assert_kind_of RelabelOutput, ra.outputs.first
|
158
|
+
assert_kind_of Plugin::RelabelOutput, ra.outputs.first
|
126
159
|
assert_kind_of FluentTestFilter, ra.filters.first
|
127
|
-
[:@started_inputs, :@started_outputs, :@started_filters].each { |k|
|
128
|
-
assert_empty ra.instance_variable_get(k)
|
129
|
-
}
|
130
160
|
assert ra.error_collector
|
131
161
|
|
132
162
|
%W(@test @ERROR).each { |label_symbol|
|
@@ -139,15 +169,21 @@ EOC
|
|
139
169
|
assert_equal ra, test_label.root_agent
|
140
170
|
|
141
171
|
error_label = ra.labels['@ERROR']
|
142
|
-
assert_kind_of NullOutput, error_label.outputs.first
|
172
|
+
assert_kind_of Fluent::Plugin::NullOutput, error_label.outputs.first
|
143
173
|
assert_kind_of RootAgent::RootAgentProxyWithoutErrorCollector, error_label.root_agent
|
144
174
|
end
|
145
175
|
end
|
146
176
|
|
147
177
|
sub_test_case 'start/shutdown' do
|
148
|
-
|
149
|
-
|
150
|
-
|
178
|
+
def setup_root_agent(conf)
|
179
|
+
ra = RootAgent.new(log: $log)
|
180
|
+
stub(Engine).root_agent { ra }
|
181
|
+
ra.configure(Config.parse(conf, "(test)", "(test_dir)", true))
|
182
|
+
ra
|
183
|
+
end
|
184
|
+
|
185
|
+
test 'plugin status' do
|
186
|
+
ra = setup_root_agent(<<-EOC)
|
151
187
|
<source>
|
152
188
|
@type test_in
|
153
189
|
@id test_in
|
@@ -160,20 +196,729 @@ EOC
|
|
160
196
|
@type test_out
|
161
197
|
@id test_out
|
162
198
|
</match>
|
199
|
+
EOC
|
200
|
+
ra.start
|
201
|
+
assert_true ra.inputs.first.started
|
202
|
+
assert_true ra.filters.first.started
|
203
|
+
assert_true ra.outputs.first.started
|
204
|
+
|
205
|
+
ra.shutdown
|
206
|
+
assert_false ra.inputs.first.started
|
207
|
+
assert_false ra.filters.first.started
|
208
|
+
assert_false ra.outputs.first.started
|
209
|
+
end
|
210
|
+
|
211
|
+
test 'output plugin threads should run before input plugin is blocked with buffer full' do
|
212
|
+
ra = setup_root_agent(<<-EOC)
|
213
|
+
<source>
|
214
|
+
@type test_in_gen
|
215
|
+
@id test_in_gen
|
216
|
+
</source>
|
217
|
+
<match **>
|
218
|
+
@type test_out_buffered
|
219
|
+
@id test_out_buffered
|
220
|
+
<buffer>
|
221
|
+
chunk_limit_size 1k
|
222
|
+
queue_limit_length 2
|
223
|
+
flush_thread_count 2
|
224
|
+
overflow_action block
|
225
|
+
</buffer>
|
226
|
+
</match>
|
227
|
+
EOC
|
228
|
+
waiting(5) { ra.start }
|
229
|
+
assert_true ra.inputs.first.started
|
230
|
+
assert_true ra.outputs.first.started
|
231
|
+
|
232
|
+
ra.shutdown
|
233
|
+
assert_false ra.inputs.first.started
|
234
|
+
assert_false ra.outputs.first.started
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
sub_test_case 'configured with label and secondary plugin' do
|
239
|
+
setup do
|
240
|
+
@ra = RootAgent.new(log: $log)
|
241
|
+
stub(Engine).root_agent{ @ra }
|
242
|
+
@ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
|
243
|
+
<source>
|
244
|
+
@type test_in
|
245
|
+
@label @route_a
|
246
|
+
</source>
|
247
|
+
<label @route_a>
|
248
|
+
<match a.**>
|
249
|
+
@type test_out_buffered
|
250
|
+
<secondary>
|
251
|
+
@type test_out_emit
|
252
|
+
</secondary>
|
253
|
+
</match>
|
254
|
+
</label>
|
255
|
+
<label @route_b>
|
256
|
+
<match b.**>
|
257
|
+
@type test_out
|
258
|
+
</match>
|
259
|
+
</label>
|
260
|
+
EOC
|
261
|
+
end
|
262
|
+
|
263
|
+
test 'secondary plugin has an event router for the label which the plugin is in' do
|
264
|
+
assert_equal 1, @ra.inputs.size
|
265
|
+
assert_equal 2, @ra.labels.size
|
266
|
+
assert_equal ['@route_a', '@route_b'], @ra.labels.keys
|
267
|
+
assert_equal '@route_a', @ra.labels['@route_a'].context
|
268
|
+
assert_equal '@route_b', @ra.labels['@route_b'].context
|
269
|
+
|
270
|
+
c1 = @ra.labels['@route_a']
|
271
|
+
|
272
|
+
assert_equal 1, c1.outputs.size
|
273
|
+
assert !c1.outputs.first.has_router?
|
274
|
+
|
275
|
+
assert c1.outputs.first.secondary
|
276
|
+
assert c1.outputs.first.secondary.has_router?
|
277
|
+
assert_equal c1.event_router, c1.outputs.first.secondary.router
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
sub_test_case 'configured with label and secondary plugin with @label specifier' do
|
282
|
+
setup do
|
283
|
+
@ra = RootAgent.new(log: $log)
|
284
|
+
stub(Engine).root_agent{ @ra }
|
285
|
+
@ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
|
286
|
+
<source>
|
287
|
+
@type test_in
|
288
|
+
@label @route_a
|
289
|
+
</source>
|
290
|
+
<label @route_a>
|
291
|
+
<match a.**>
|
292
|
+
@type test_out_buffered
|
293
|
+
<secondary>
|
294
|
+
@type test_out_emit
|
295
|
+
@label @route_b
|
296
|
+
</secondary>
|
297
|
+
</match>
|
298
|
+
</label>
|
299
|
+
<label @route_b>
|
300
|
+
<match b.**>
|
301
|
+
@type test_out
|
302
|
+
</match>
|
303
|
+
</label>
|
304
|
+
EOC
|
305
|
+
end
|
306
|
+
|
307
|
+
test 'secondary plugin has an event router for the label specified in secondary section' do
|
308
|
+
assert_equal 1, @ra.inputs.size
|
309
|
+
assert_equal 2, @ra.labels.size
|
310
|
+
assert_equal ['@route_a', '@route_b'], @ra.labels.keys
|
311
|
+
assert_equal '@route_a', @ra.labels['@route_a'].context
|
312
|
+
assert_equal '@route_b', @ra.labels['@route_b'].context
|
313
|
+
|
314
|
+
c1 = @ra.labels['@route_a']
|
315
|
+
c2 = @ra.labels['@route_b']
|
316
|
+
|
317
|
+
assert_equal 1, c1.outputs.size
|
318
|
+
assert !c1.outputs.first.has_router?
|
319
|
+
|
320
|
+
assert c1.outputs.first.secondary
|
321
|
+
assert c1.outputs.first.secondary.has_router?
|
322
|
+
assert_equal c2.event_router, c1.outputs.first.secondary.router
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
sub_test_case 'configured with label and secondary plugin with @label specifier in primary output' do
|
327
|
+
setup do
|
328
|
+
@ra = RootAgent.new(log: $log)
|
329
|
+
stub(Engine).root_agent{ @ra }
|
330
|
+
@ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
|
331
|
+
<source>
|
332
|
+
@type test_in
|
333
|
+
@label @route_a
|
334
|
+
</source>
|
335
|
+
<label @route_a>
|
336
|
+
<match a.**>
|
337
|
+
@type test_out_emit
|
338
|
+
@label @route_b
|
339
|
+
<secondary>
|
340
|
+
@type test_out_emit
|
341
|
+
</secondary>
|
342
|
+
</match>
|
343
|
+
</label>
|
344
|
+
<label @route_b>
|
345
|
+
<match b.**>
|
346
|
+
@type test_out
|
347
|
+
</match>
|
348
|
+
</label>
|
349
|
+
EOC
|
350
|
+
end
|
351
|
+
|
352
|
+
test 'secondary plugin has an event router for the label specified in secondary section' do
|
353
|
+
assert_equal 1, @ra.inputs.size
|
354
|
+
assert_equal 2, @ra.labels.size
|
355
|
+
assert_equal ['@route_a', '@route_b'], @ra.labels.keys
|
356
|
+
assert_equal '@route_a', @ra.labels['@route_a'].context
|
357
|
+
assert_equal '@route_b', @ra.labels['@route_b'].context
|
358
|
+
|
359
|
+
c1 = @ra.labels['@route_a']
|
360
|
+
c2 = @ra.labels['@route_b']
|
361
|
+
|
362
|
+
assert_equal 1, c1.outputs.size
|
363
|
+
assert c1.outputs.first.secondary
|
364
|
+
|
365
|
+
p1 = c1.outputs.first
|
366
|
+
assert p1.has_router?
|
367
|
+
assert_equal c1.event_router, p1.context_router
|
368
|
+
assert_equal c2.event_router, p1.router
|
369
|
+
|
370
|
+
s1 = p1.secondary
|
371
|
+
assert s1.has_router?
|
372
|
+
assert_equal c1.event_router, s1.context_router
|
373
|
+
assert_equal c2.event_router, s1.router
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
sub_test_case 'configured with MultiOutput plugins' do
|
378
|
+
setup do
|
379
|
+
@ra = RootAgent.new(log: $log)
|
380
|
+
stub(Engine).root_agent { @ra }
|
381
|
+
@ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
|
382
|
+
<source>
|
383
|
+
@type test_in
|
384
|
+
@id test_in
|
385
|
+
</source>
|
386
|
+
<filter>
|
387
|
+
@type test_filter
|
388
|
+
@id test_filter
|
389
|
+
</filter>
|
390
|
+
<match **>
|
391
|
+
@type copy
|
392
|
+
@id test_copy
|
393
|
+
<store>
|
394
|
+
@type test_out
|
395
|
+
@id test_out1
|
396
|
+
</store>
|
397
|
+
<store>
|
398
|
+
@type test_out
|
399
|
+
@id test_out2
|
400
|
+
</store>
|
401
|
+
</match>
|
163
402
|
EOC
|
164
403
|
@ra
|
165
404
|
end
|
166
405
|
|
167
|
-
test 'plugin status' do
|
406
|
+
test 'plugin status with multi output' do
|
407
|
+
assert_equal 1, @ra.inputs.size
|
408
|
+
assert_equal 1, @ra.filters.size
|
409
|
+
assert_equal 3, @ra.outputs.size
|
410
|
+
|
168
411
|
@ra.start
|
169
|
-
|
170
|
-
|
171
|
-
|
412
|
+
assert_equal [true], @ra.inputs.map{|i| i.started? }
|
413
|
+
assert_equal [true], @ra.filters.map{|i| i.started? }
|
414
|
+
assert_equal [true, true, true], @ra.outputs.map{|i| i.started? }
|
415
|
+
|
416
|
+
assert_equal [true], @ra.inputs.map{|i| i.after_started? }
|
417
|
+
assert_equal [true], @ra.filters.map{|i| i.after_started? }
|
418
|
+
assert_equal [true, true, true], @ra.outputs.map{|i| i.after_started? }
|
419
|
+
|
420
|
+
@ra.shutdown
|
421
|
+
assert_equal [true], @ra.inputs.map{|i| i.stopped? }
|
422
|
+
assert_equal [true], @ra.filters.map{|i| i.stopped? }
|
423
|
+
assert_equal [true, true, true], @ra.outputs.map{|i| i.stopped? }
|
424
|
+
|
425
|
+
assert_equal [true], @ra.inputs.map{|i| i.before_shutdown? }
|
426
|
+
assert_equal [true], @ra.filters.map{|i| i.before_shutdown? }
|
427
|
+
assert_equal [true, true, true], @ra.outputs.map{|i| i.before_shutdown? }
|
428
|
+
|
429
|
+
assert_equal [true], @ra.inputs.map{|i| i.shutdown? }
|
430
|
+
assert_equal [true], @ra.filters.map{|i| i.shutdown? }
|
431
|
+
assert_equal [true, true, true], @ra.outputs.map{|i| i.shutdown? }
|
432
|
+
|
433
|
+
assert_equal [true], @ra.inputs.map{|i| i.after_shutdown? }
|
434
|
+
assert_equal [true], @ra.filters.map{|i| i.after_shutdown? }
|
435
|
+
assert_equal [true, true, true], @ra.outputs.map{|i| i.after_shutdown? }
|
436
|
+
|
437
|
+
assert_equal [true], @ra.inputs.map{|i| i.closed? }
|
438
|
+
assert_equal [true], @ra.filters.map{|i| i.closed? }
|
439
|
+
assert_equal [true, true, true], @ra.outputs.map{|i| i.closed? }
|
440
|
+
|
441
|
+
assert_equal [true], @ra.inputs.map{|i| i.terminated? }
|
442
|
+
assert_equal [true], @ra.filters.map{|i| i.terminated? }
|
443
|
+
assert_equal [true, true, true], @ra.outputs.map{|i| i.terminated? }
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
sub_test_case 'configured with MultiOutput plugins and labels' do
|
448
|
+
setup do
|
449
|
+
@ra = RootAgent.new(log: $log)
|
450
|
+
stub(Engine).root_agent { @ra }
|
451
|
+
@ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
|
452
|
+
<source>
|
453
|
+
@type test_in
|
454
|
+
@id test_in
|
455
|
+
@label @testing
|
456
|
+
</source>
|
457
|
+
<label @testing>
|
458
|
+
<filter>
|
459
|
+
@type test_filter
|
460
|
+
@id test_filter
|
461
|
+
</filter>
|
462
|
+
<match **>
|
463
|
+
@type copy
|
464
|
+
@id test_copy
|
465
|
+
<store>
|
466
|
+
@type test_out
|
467
|
+
@id test_out1
|
468
|
+
</store>
|
469
|
+
<store>
|
470
|
+
@type test_out
|
471
|
+
@id test_out2
|
472
|
+
</store>
|
473
|
+
</match>
|
474
|
+
</label>
|
475
|
+
EOC
|
476
|
+
@ra
|
477
|
+
end
|
478
|
+
|
479
|
+
test 'plugin status with multi output' do
|
480
|
+
assert_equal 1, @ra.inputs.size
|
481
|
+
assert_equal 0, @ra.filters.size
|
482
|
+
assert_equal 0, @ra.outputs.size
|
483
|
+
assert_equal 1, @ra.labels.size
|
484
|
+
assert_equal '@testing', @ra.labels.keys.first
|
485
|
+
assert_equal 1, @ra.labels.values.first.filters.size
|
486
|
+
assert_equal 3, @ra.labels.values.first.outputs.size
|
487
|
+
|
488
|
+
label_filters = @ra.labels.values.first.filters
|
489
|
+
label_outputs = @ra.labels.values.first.outputs
|
490
|
+
|
491
|
+
@ra.start
|
492
|
+
assert_equal [true], @ra.inputs.map{|i| i.started? }
|
493
|
+
assert_equal [true], label_filters.map{|i| i.started? }
|
494
|
+
assert_equal [true, true, true], label_outputs.map{|i| i.started? }
|
495
|
+
|
496
|
+
@ra.shutdown
|
497
|
+
assert_equal [true], @ra.inputs.map{|i| i.stopped? }
|
498
|
+
assert_equal [true], label_filters.map{|i| i.stopped? }
|
499
|
+
assert_equal [true, true, true], label_outputs.map{|i| i.stopped? }
|
500
|
+
|
501
|
+
assert_equal [true], @ra.inputs.map{|i| i.before_shutdown? }
|
502
|
+
assert_equal [true], label_filters.map{|i| i.before_shutdown? }
|
503
|
+
assert_equal [true, true, true], label_outputs.map{|i| i.before_shutdown? }
|
504
|
+
|
505
|
+
assert_equal [true], @ra.inputs.map{|i| i.shutdown? }
|
506
|
+
assert_equal [true], label_filters.map{|i| i.shutdown? }
|
507
|
+
assert_equal [true, true, true], label_outputs.map{|i| i.shutdown? }
|
508
|
+
|
509
|
+
assert_equal [true], @ra.inputs.map{|i| i.after_shutdown? }
|
510
|
+
assert_equal [true], label_filters.map{|i| i.after_shutdown? }
|
511
|
+
assert_equal [true, true, true], label_outputs.map{|i| i.after_shutdown? }
|
512
|
+
|
513
|
+
assert_equal [true], @ra.inputs.map{|i| i.closed? }
|
514
|
+
assert_equal [true], label_filters.map{|i| i.closed? }
|
515
|
+
assert_equal [true, true, true], label_outputs.map{|i| i.closed? }
|
516
|
+
|
517
|
+
assert_equal [true], @ra.inputs.map{|i| i.terminated? }
|
518
|
+
assert_equal [true], label_filters.map{|i| i.terminated? }
|
519
|
+
assert_equal [true, true, true], label_outputs.map{|i| i.terminated? }
|
520
|
+
end
|
521
|
+
|
522
|
+
test 'plugin #shutdown is not called twice' do
|
523
|
+
assert_equal 1, @ra.inputs.size
|
524
|
+
assert_equal 0, @ra.filters.size
|
525
|
+
assert_equal 0, @ra.outputs.size
|
526
|
+
assert_equal 1, @ra.labels.size
|
527
|
+
assert_equal '@testing', @ra.labels.keys.first
|
528
|
+
assert_equal 1, @ra.labels.values.first.filters.size
|
529
|
+
assert_equal 3, @ra.labels.values.first.outputs.size
|
530
|
+
|
531
|
+
@ra.start
|
532
|
+
|
533
|
+
old_level = @ra.log.level
|
534
|
+
begin
|
535
|
+
@ra.log.instance_variable_get(:@logger).level = Fluent::Log::LEVEL_INFO - 1
|
536
|
+
assert_equal Fluent::Log::LEVEL_INFO, @ra.log.level
|
537
|
+
|
538
|
+
@ra.log.out.flush_logs = false
|
539
|
+
|
540
|
+
@ra.shutdown
|
541
|
+
|
542
|
+
test_out1_shutdown_logs = @ra.log.out.logs.select{|line| line =~ /shutting down output plugin type=:test_out plugin_id="test_out1"/ }
|
543
|
+
assert_equal 1, test_out1_shutdown_logs.size
|
544
|
+
ensure
|
545
|
+
@ra.log.out.flush_logs = true
|
546
|
+
@ra.log.out.reset
|
547
|
+
@ra.log.level = old_level
|
548
|
+
end
|
549
|
+
end
|
550
|
+
end
|
551
|
+
|
552
|
+
sub_test_case 'configured with MultiOutput plugin which creates plugin instances dynamically' do
|
553
|
+
setup do
|
554
|
+
@ra = RootAgent.new(log: $log)
|
555
|
+
stub(Engine).root_agent { @ra }
|
556
|
+
@ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
|
557
|
+
<source>
|
558
|
+
@type test_in
|
559
|
+
@id test_in
|
560
|
+
@label @testing
|
561
|
+
</source>
|
562
|
+
<label @testing>
|
563
|
+
<match **>
|
564
|
+
@type test_dynamic_out
|
565
|
+
@id test_dyn
|
566
|
+
</match>
|
567
|
+
</label>
|
568
|
+
EOC
|
569
|
+
@ra
|
570
|
+
end
|
571
|
+
|
572
|
+
test 'plugin status with multi output' do
|
573
|
+
assert_equal 1, @ra.inputs.size
|
574
|
+
assert_equal 0, @ra.filters.size
|
575
|
+
assert_equal 0, @ra.outputs.size
|
576
|
+
assert_equal 1, @ra.labels.size
|
577
|
+
assert_equal '@testing', @ra.labels.keys.first
|
578
|
+
assert_equal 0, @ra.labels.values.first.filters.size
|
579
|
+
assert_equal 1, @ra.labels.values.first.outputs.size
|
580
|
+
|
581
|
+
dyn_out = @ra.labels.values.first.outputs.first
|
582
|
+
assert_nil dyn_out.child
|
583
|
+
|
584
|
+
@ra.start
|
585
|
+
|
586
|
+
assert_equal 1, @ra.labels.values.first.outputs.size
|
587
|
+
|
588
|
+
assert dyn_out.child
|
589
|
+
assert_false dyn_out.child.outputs_statically_created
|
590
|
+
assert_equal 2, dyn_out.child.outputs.size
|
591
|
+
|
592
|
+
assert_equal true, dyn_out.child.outputs[0].started?
|
593
|
+
assert_equal true, dyn_out.child.outputs[1].started?
|
594
|
+
assert_equal true, dyn_out.child.outputs[0].after_started?
|
595
|
+
assert_equal true, dyn_out.child.outputs[1].after_started?
|
172
596
|
|
173
597
|
@ra.shutdown
|
174
|
-
|
175
|
-
|
176
|
-
|
598
|
+
|
599
|
+
assert_equal 1, @ra.labels.values.first.outputs.size
|
600
|
+
|
601
|
+
assert_false dyn_out.child.outputs_statically_created
|
602
|
+
assert_equal 2, dyn_out.child.outputs.size
|
603
|
+
|
604
|
+
assert_equal [true, true], dyn_out.child.outputs.map{|i| i.stopped? }
|
605
|
+
assert_equal [true, true], dyn_out.child.outputs.map{|i| i.before_shutdown? }
|
606
|
+
assert_equal [true, true], dyn_out.child.outputs.map{|i| i.shutdown? }
|
607
|
+
assert_equal [true, true], dyn_out.child.outputs.map{|i| i.after_shutdown? }
|
608
|
+
assert_equal [true, true], dyn_out.child.outputs.map{|i| i.closed? }
|
609
|
+
assert_equal [true, true], dyn_out.child.outputs.map{|i| i.terminated? }
|
610
|
+
end
|
611
|
+
end
|
612
|
+
|
613
|
+
sub_test_case 'configure emit_error_interval' do
|
614
|
+
setup do
|
615
|
+
system_config = SystemConfig.new
|
616
|
+
system_config.emit_error_log_interval = 30
|
617
|
+
@ra = RootAgent.new(log: $log, system_config: system_config)
|
618
|
+
stub(Engine).root_agent { @ra }
|
619
|
+
@ra.log.out.reset
|
620
|
+
one_minute_ago = Time.now.to_i - 60
|
621
|
+
Timecop.freeze(one_minute_ago)
|
622
|
+
end
|
623
|
+
|
624
|
+
teardown do
|
625
|
+
Timecop.return
|
626
|
+
end
|
627
|
+
|
628
|
+
test 'suppresses errors' do
|
629
|
+
mock(@ra.log).warn_backtrace()
|
630
|
+
e = StandardError.new('standard error')
|
631
|
+
begin
|
632
|
+
@ra.handle_emits_error("tag", nil, e)
|
633
|
+
rescue
|
634
|
+
end
|
635
|
+
|
636
|
+
begin
|
637
|
+
@ra.handle_emits_error("tag", nil, e)
|
638
|
+
rescue
|
639
|
+
end
|
640
|
+
|
641
|
+
assert_equal 1, @ra.log.out.logs.size
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
645
|
+
sub_test_case 'configured at worker2 with 4 workers environment' do
|
646
|
+
setup do
|
647
|
+
ENV['SERVERENGINE_WORKER_ID'] = '2'
|
648
|
+
@ra = RootAgent.new(log: $log)
|
649
|
+
system_config = SystemConfig.new
|
650
|
+
system_config.workers = 4
|
651
|
+
stub(Engine).worker_id { 2 }
|
652
|
+
stub(Engine).root_agent { @ra }
|
653
|
+
stub(Engine).system_config { system_config }
|
654
|
+
@ra
|
655
|
+
end
|
656
|
+
|
657
|
+
teardown '' do
|
658
|
+
ENV.delete('SERVERENGINE_WORKER_ID')
|
659
|
+
end
|
660
|
+
|
661
|
+
def configure_ra(conf_str)
|
662
|
+
conf = Config.parse(conf_str, "(test)", "(test_dir)", true)
|
663
|
+
@ra.configure(conf)
|
664
|
+
@ra
|
665
|
+
end
|
666
|
+
|
667
|
+
test 'raises configuration error for missing worker id' do
|
668
|
+
errmsg = 'Missing worker id on <worker> directive'
|
669
|
+
assert_raise Fluent::ConfigError.new(errmsg) do
|
670
|
+
conf = <<-EOC
|
671
|
+
<worker>
|
672
|
+
</worker>
|
673
|
+
EOC
|
674
|
+
configure_ra(conf)
|
675
|
+
end
|
676
|
+
end
|
677
|
+
|
678
|
+
test 'raises configuration error for too big worker id' do
|
679
|
+
errmsg = "worker id 4 specified by <worker> directive is not allowed. Available worker id is between 0 and 3"
|
680
|
+
assert_raise Fluent::ConfigError.new(errmsg) do
|
681
|
+
conf = <<-EOC
|
682
|
+
<worker 4>
|
683
|
+
</worker>
|
684
|
+
EOC
|
685
|
+
configure_ra(conf)
|
686
|
+
end
|
687
|
+
end
|
688
|
+
|
689
|
+
test 'raises configuration error for too big worker id on multi workers syntax' do
|
690
|
+
errmsg = "worker id 4 specified by <worker> directive is not allowed. Available worker id is between 0 and 3"
|
691
|
+
assert_raise Fluent::ConfigError.new(errmsg) do
|
692
|
+
conf = <<-EOC
|
693
|
+
<worker 1-4>
|
694
|
+
</worker>
|
695
|
+
EOC
|
696
|
+
configure_ra(conf)
|
697
|
+
end
|
698
|
+
end
|
699
|
+
|
700
|
+
test 'raises configuration error for worker id collisions on multi workers syntax' do
|
701
|
+
errmsg = "specified worker_id<2> collisions is detected on <worker> directive. Available worker id(s): [3]"
|
702
|
+
assert_raise Fluent::ConfigError.new(errmsg) do
|
703
|
+
conf = <<-EOC
|
704
|
+
<worker 0-2>
|
705
|
+
</worker>
|
706
|
+
<worker 2-4>
|
707
|
+
</worker>
|
708
|
+
EOC
|
709
|
+
configure_ra(conf)
|
710
|
+
end
|
711
|
+
end
|
712
|
+
|
713
|
+
test 'raises configuration error for worker id collisions on multi workers syntax when multi avaliable worker_ids are left' do
|
714
|
+
errmsg = "specified worker_id<1> collisions is detected on <worker> directive. Available worker id(s): [2, 3]"
|
715
|
+
assert_raise Fluent::ConfigError.new(errmsg) do
|
716
|
+
conf = <<-EOC
|
717
|
+
<worker 0-1>
|
718
|
+
</worker>
|
719
|
+
<worker 1-3>
|
720
|
+
</worker>
|
721
|
+
EOC
|
722
|
+
configure_ra(conf)
|
723
|
+
end
|
724
|
+
end
|
725
|
+
|
726
|
+
test 'raises configuration error for too big worker id on invalid reversed multi workers syntax' do
|
727
|
+
errmsg = "greater first_worker_id<3> than last_worker_id<0> specified by <worker> directive is not allowed. Available multi worker assign syntax is <smaller_worker_id>-<greater_worker_id>"
|
728
|
+
assert_raise Fluent::ConfigError.new(errmsg) do
|
729
|
+
conf = <<-EOC
|
730
|
+
<worker 3-0>
|
731
|
+
</worker>
|
732
|
+
EOC
|
733
|
+
configure_ra(conf)
|
734
|
+
end
|
735
|
+
end
|
736
|
+
|
737
|
+
test 'raises configuration error for invalid elements as a child of worker section' do
|
738
|
+
errmsg = '<worker> section cannot have <system> directive'
|
739
|
+
assert_raise Fluent::ConfigError.new(errmsg) do
|
740
|
+
conf = <<-EOC
|
741
|
+
<worker 2>
|
742
|
+
<system>
|
743
|
+
</system>
|
744
|
+
</worker>
|
745
|
+
EOC
|
746
|
+
configure_ra(conf)
|
747
|
+
end
|
748
|
+
end
|
749
|
+
|
750
|
+
test 'raises configuration error when configured plugins do not have support multi worker configuration' do
|
751
|
+
errmsg = "Plugin 'test_out' does not support multi workers configuration (FluentTest::FluentTestOutput)"
|
752
|
+
assert_raise Fluent::ConfigError.new(errmsg) do
|
753
|
+
conf = <<-EOC
|
754
|
+
<match **>
|
755
|
+
@type test_out
|
756
|
+
</match>
|
757
|
+
EOC
|
758
|
+
configure_ra(conf)
|
759
|
+
end
|
760
|
+
end
|
761
|
+
|
762
|
+
test 'does not raise configuration error when configured plugins in worker section do not have support multi worker configuration' do
|
763
|
+
assert_nothing_raised do
|
764
|
+
conf = <<-EOC
|
765
|
+
<worker 2>
|
766
|
+
<match **>
|
767
|
+
@type test_out
|
768
|
+
</match>
|
769
|
+
</worker>
|
770
|
+
EOC
|
771
|
+
configure_ra(conf)
|
772
|
+
end
|
773
|
+
end
|
774
|
+
|
775
|
+
test 'does not raise configuration error when configured plugins as a children of MultiOutput in worker section do not have support multi worker configuration' do
|
776
|
+
assert_nothing_raised do
|
777
|
+
conf = <<-EOC
|
778
|
+
<worker 2>
|
779
|
+
<match **>
|
780
|
+
@type copy
|
781
|
+
<store>
|
782
|
+
@type test_out
|
783
|
+
</store>
|
784
|
+
<store>
|
785
|
+
@type test_out
|
786
|
+
</store>
|
787
|
+
</match>
|
788
|
+
</worker>
|
789
|
+
EOC
|
790
|
+
configure_ra(conf)
|
791
|
+
end
|
792
|
+
end
|
793
|
+
|
794
|
+
test 'does not raise configuration error when configured plugins owned by plugin do not have support multi worker configuration' do
|
795
|
+
assert_nothing_raised do
|
796
|
+
conf = <<-EOC
|
797
|
+
<worker 2>
|
798
|
+
<match **>
|
799
|
+
@type test_out_buffered
|
800
|
+
<buffer>
|
801
|
+
@type test_buffer
|
802
|
+
</buffer>
|
803
|
+
</match>
|
804
|
+
</worker>
|
805
|
+
EOC
|
806
|
+
configure_ra(conf)
|
807
|
+
end
|
808
|
+
end
|
809
|
+
|
810
|
+
test 'with plugins' do
|
811
|
+
conf = <<-EOC
|
812
|
+
<worker 2>
|
813
|
+
<source>
|
814
|
+
@type test_in
|
815
|
+
@id test_in
|
816
|
+
</source>
|
817
|
+
<filter>
|
818
|
+
type test_filter
|
819
|
+
id test_filter
|
820
|
+
</filter>
|
821
|
+
<match **>
|
822
|
+
@type relabel
|
823
|
+
@id test_relabel
|
824
|
+
@label @test
|
825
|
+
</match>
|
826
|
+
<label @test>
|
827
|
+
<match **>
|
828
|
+
type test_out
|
829
|
+
id test_out
|
830
|
+
</match>
|
831
|
+
</label>
|
832
|
+
<label @ERROR>
|
833
|
+
<match>
|
834
|
+
@type null
|
835
|
+
</match>
|
836
|
+
</label>
|
837
|
+
</worker>
|
838
|
+
EOC
|
839
|
+
ra = configure_ra(conf)
|
840
|
+
assert_kind_of FluentTestInput, ra.inputs.first
|
841
|
+
assert_kind_of Plugin::RelabelOutput, ra.outputs.first
|
842
|
+
assert_kind_of FluentTestFilter, ra.filters.first
|
843
|
+
assert ra.error_collector
|
844
|
+
|
845
|
+
%W(@test @ERROR).each { |label_symbol|
|
846
|
+
assert_include ra.labels, label_symbol
|
847
|
+
assert_kind_of Label, ra.labels[label_symbol]
|
848
|
+
}
|
849
|
+
|
850
|
+
test_label = ra.labels['@test']
|
851
|
+
assert_kind_of FluentTestOutput, test_label.outputs.first
|
852
|
+
assert_equal ra, test_label.root_agent
|
853
|
+
|
854
|
+
error_label = ra.labels['@ERROR']
|
855
|
+
assert_kind_of Fluent::Plugin::NullOutput, error_label.outputs.first
|
856
|
+
assert_kind_of RootAgent::RootAgentProxyWithoutErrorCollector, error_label.root_agent
|
857
|
+
end
|
858
|
+
|
859
|
+
test 'with plugins but for another worker' do
|
860
|
+
conf = <<-EOC
|
861
|
+
<worker 0>
|
862
|
+
<source>
|
863
|
+
@type test_in
|
864
|
+
@id test_in
|
865
|
+
</source>
|
866
|
+
<filter>
|
867
|
+
type test_filter
|
868
|
+
id test_filter
|
869
|
+
</filter>
|
870
|
+
<match **>
|
871
|
+
@type relabel
|
872
|
+
@id test_relabel
|
873
|
+
@label @test
|
874
|
+
</match>
|
875
|
+
<label @test>
|
876
|
+
<match **>
|
877
|
+
type test_out
|
878
|
+
id test_out
|
879
|
+
</match>
|
880
|
+
</label>
|
881
|
+
<label @ERROR>
|
882
|
+
<match>
|
883
|
+
@type null
|
884
|
+
</match>
|
885
|
+
</label>
|
886
|
+
</worker>
|
887
|
+
EOC
|
888
|
+
ra = configure_ra(conf)
|
889
|
+
assert_equal 0, ra.inputs.size
|
890
|
+
assert_equal 0, ra.outputs.size
|
891
|
+
assert_equal 0, ra.filters.size
|
892
|
+
assert_equal 0, ra.labels.size
|
893
|
+
refute ra.error_collector
|
894
|
+
end
|
895
|
+
|
896
|
+
test 'with plugins for workers syntax should match worker_id equals to 2' do
|
897
|
+
conf = <<-EOC
|
898
|
+
<worker 0-2>
|
899
|
+
<source>
|
900
|
+
@type forward
|
901
|
+
</source>
|
902
|
+
<filter **>
|
903
|
+
@type test_filter
|
904
|
+
@id test_filter
|
905
|
+
</filter>
|
906
|
+
<match pattern>
|
907
|
+
@type stdout
|
908
|
+
</match>
|
909
|
+
<label @ERROR>
|
910
|
+
<match>
|
911
|
+
@type null
|
912
|
+
</match>
|
913
|
+
</label>
|
914
|
+
</worker>
|
915
|
+
EOC
|
916
|
+
|
917
|
+
ra = configure_ra(conf)
|
918
|
+
assert_kind_of Fluent::Plugin::ForwardInput, ra.inputs.first
|
919
|
+
assert_kind_of Fluent::Plugin::StdoutOutput, ra.outputs.first
|
920
|
+
assert_kind_of FluentTestFilter, ra.filters.first
|
921
|
+
assert ra.error_collector
|
177
922
|
end
|
178
923
|
end
|
179
924
|
end
|