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
@@ -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/clock'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module PluginHelper
|
21
|
+
module Thread
|
22
|
+
THREAD_DEFAULT_WAIT_SECONDS = 1
|
23
|
+
THREAD_SHUTDOWN_HARD_TIMEOUT_IN_TESTS = 100 # second
|
24
|
+
|
25
|
+
# stop : mark callback thread as stopped
|
26
|
+
# shutdown : [-]
|
27
|
+
# close : correct stopped threads
|
28
|
+
# terminate: kill all threads
|
29
|
+
|
30
|
+
attr_reader :_threads # for test driver
|
31
|
+
|
32
|
+
def thread_current_running?
|
33
|
+
# checker for code in callback of thread_create
|
34
|
+
::Thread.current[:_fluentd_plugin_helper_thread_running] || false
|
35
|
+
end
|
36
|
+
|
37
|
+
def thread_wait_until_start
|
38
|
+
until @_threads_mutex.synchronize{ @_threads.values.reduce(true){|r,t| r && t[:_fluentd_plugin_helper_thread_started] } }
|
39
|
+
sleep 0.1
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def thread_wait_until_stop
|
44
|
+
timeout_at = Fluent::Clock.now + THREAD_SHUTDOWN_HARD_TIMEOUT_IN_TESTS
|
45
|
+
until @_threads_mutex.synchronize{ @_threads.values.reduce(true){|r,t| r && !t[:_fluentd_plugin_helper_thread_running] } }
|
46
|
+
break if Fluent::Clock.now > timeout_at
|
47
|
+
sleep 0.1
|
48
|
+
end
|
49
|
+
@_threads_mutex.synchronize{ @_threads.values }.each do |t|
|
50
|
+
if t.alive?
|
51
|
+
puts "going to kill the thread still running: #{t[:_fluentd_plugin_helper_thread_title]}"
|
52
|
+
t.kill rescue nil
|
53
|
+
t[:_fluentd_plugin_helper_thread_running] = false
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Ruby 2.2.3 or earlier (and all 2.1.x) cause bug about Threading ("Stack consistency error")
|
59
|
+
# by passing splatted argument to `yield`
|
60
|
+
# https://bugs.ruby-lang.org/issues/11027
|
61
|
+
# We can enable to pass arguments after expire of Ruby 2.1 (& older 2.2.x)
|
62
|
+
# def thread_create(title, *args)
|
63
|
+
# Thread.new(*args) do |*t_args|
|
64
|
+
# yield *t_args
|
65
|
+
def thread_create(title)
|
66
|
+
raise ArgumentError, "BUG: title must be a symbol" unless title.is_a? Symbol
|
67
|
+
raise ArgumentError, "BUG: callback not specified" unless block_given?
|
68
|
+
m = Mutex.new
|
69
|
+
m.lock
|
70
|
+
thread = ::Thread.new do
|
71
|
+
m.lock # run thread after that thread is successfully set into @_threads
|
72
|
+
m.unlock
|
73
|
+
thread_exit = false
|
74
|
+
::Thread.current[:_fluentd_plugin_helper_thread_title] = title
|
75
|
+
::Thread.current[:_fluentd_plugin_helper_thread_started] = true
|
76
|
+
::Thread.current[:_fluentd_plugin_helper_thread_running] = true
|
77
|
+
begin
|
78
|
+
yield
|
79
|
+
thread_exit = true
|
80
|
+
rescue Exception => e
|
81
|
+
log.warn "thread exited by unexpected error", plugin: self.class, title: title, error: e
|
82
|
+
thread_exit = true
|
83
|
+
raise
|
84
|
+
ensure
|
85
|
+
@_threads_mutex.synchronize do
|
86
|
+
@_threads.delete(::Thread.current.object_id)
|
87
|
+
end
|
88
|
+
::Thread.current[:_fluentd_plugin_helper_thread_running] = false
|
89
|
+
if ::Thread.current.alive? && !thread_exit
|
90
|
+
log.warn "thread doesn't exit correctly (killed or other reason)", plugin: self.class, title: title, thread: ::Thread.current, error: $!
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
thread.abort_on_exception = true
|
95
|
+
@_threads_mutex.synchronize do
|
96
|
+
@_threads[thread.object_id] = thread
|
97
|
+
end
|
98
|
+
m.unlock
|
99
|
+
thread
|
100
|
+
end
|
101
|
+
|
102
|
+
def thread_exist?(title)
|
103
|
+
@_threads.values.select{|thread| title == thread[:_fluentd_plugin_helper_thread_title] }.size > 0
|
104
|
+
end
|
105
|
+
|
106
|
+
def thread_started?(title)
|
107
|
+
t = @_threads.values.select{|thread| title == thread[:_fluentd_plugin_helper_thread_title] }.first
|
108
|
+
t && t[:_fluentd_plugin_helper_thread_started]
|
109
|
+
end
|
110
|
+
|
111
|
+
def thread_running?(title)
|
112
|
+
t = @_threads.values.select{|thread| title == thread[:_fluentd_plugin_helper_thread_title] }.first
|
113
|
+
t && t[:_fluentd_plugin_helper_thread_running]
|
114
|
+
end
|
115
|
+
|
116
|
+
def initialize
|
117
|
+
super
|
118
|
+
@_threads_mutex = Mutex.new
|
119
|
+
@_threads = {}
|
120
|
+
@_thread_wait_seconds = THREAD_DEFAULT_WAIT_SECONDS
|
121
|
+
end
|
122
|
+
|
123
|
+
def stop
|
124
|
+
super
|
125
|
+
wakeup_threads = []
|
126
|
+
@_threads_mutex.synchronize do
|
127
|
+
@_threads.each_value do |thread|
|
128
|
+
thread[:_fluentd_plugin_helper_thread_running] = false
|
129
|
+
wakeup_threads << thread if thread.alive? && thread.status == "sleep"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
wakeup_threads.each do |thread|
|
133
|
+
if thread.alive?
|
134
|
+
thread.wakeup
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def after_shutdown
|
140
|
+
super
|
141
|
+
wakeup_threads = []
|
142
|
+
@_threads_mutex.synchronize do
|
143
|
+
@_threads.each_value do |thread|
|
144
|
+
wakeup_threads << thread if thread.alive? && thread.status == "sleep"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
wakeup_threads.each do |thread|
|
148
|
+
thread.wakeup if thread.alive?
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def close
|
153
|
+
@_threads_mutex.synchronize{ @_threads.keys }.each do |obj_id|
|
154
|
+
thread = @_threads[obj_id]
|
155
|
+
if !thread || thread.join(@_thread_wait_seconds)
|
156
|
+
@_threads_mutex.synchronize{ @_threads.delete(obj_id) }
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
super
|
161
|
+
end
|
162
|
+
|
163
|
+
def terminate
|
164
|
+
super
|
165
|
+
@_threads_mutex.synchronize{ @_threads.keys }.each do |obj_id|
|
166
|
+
thread = @_threads[obj_id]
|
167
|
+
log.warn "killing existing thread", thread: thread
|
168
|
+
thread.kill if thread
|
169
|
+
end
|
170
|
+
@_threads_mutex.synchronize{ @_threads.keys }.each do |obj_id|
|
171
|
+
thread = @_threads[obj_id]
|
172
|
+
thread.join
|
173
|
+
@_threads_mutex.synchronize{ @_threads.delete(obj_id) }
|
174
|
+
end
|
175
|
+
@_thread_wait_seconds = nil
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
@@ -0,0 +1,92 @@
|
|
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/plugin_helper/event_loop'
|
18
|
+
require 'set'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module PluginHelper
|
22
|
+
module Timer
|
23
|
+
include Fluent::PluginHelper::EventLoop
|
24
|
+
|
25
|
+
# stop : turn checker into false (callbacks not called anymore)
|
26
|
+
# shutdown : [-]
|
27
|
+
# close : [-]
|
28
|
+
# terminate: [-]
|
29
|
+
|
30
|
+
attr_reader :_timers # for tests
|
31
|
+
|
32
|
+
# interval: integer/float, repeat: true/false
|
33
|
+
def timer_execute(title, interval, repeat: true, &block)
|
34
|
+
raise ArgumentError, "BUG: title must be a symbol" unless title.is_a? Symbol
|
35
|
+
raise ArgumentError, "BUG: block not specified for callback" unless block_given?
|
36
|
+
checker = ->(){ @_timer_running }
|
37
|
+
detacher = ->(watcher){ event_loop_detach(watcher) }
|
38
|
+
timer = TimerWatcher.new(title, interval, repeat, log, checker, detacher, &block)
|
39
|
+
@_timers << title
|
40
|
+
event_loop_attach(timer)
|
41
|
+
timer
|
42
|
+
end
|
43
|
+
|
44
|
+
def timer_running?
|
45
|
+
defined?(@_timer_running) && @_timer_running
|
46
|
+
end
|
47
|
+
|
48
|
+
def initialize
|
49
|
+
super
|
50
|
+
@_timers ||= Set.new
|
51
|
+
end
|
52
|
+
|
53
|
+
def start
|
54
|
+
super
|
55
|
+
@_timer_running = true
|
56
|
+
end
|
57
|
+
|
58
|
+
def stop
|
59
|
+
super
|
60
|
+
@_timer_running = false
|
61
|
+
end
|
62
|
+
|
63
|
+
def terminate
|
64
|
+
super
|
65
|
+
@_timers = nil
|
66
|
+
end
|
67
|
+
|
68
|
+
class TimerWatcher < Coolio::TimerWatcher
|
69
|
+
def initialize(title, interval, repeat, log, checker, detacher, &callback)
|
70
|
+
@title = title
|
71
|
+
@callback = callback
|
72
|
+
@repeat = repeat
|
73
|
+
@log = log
|
74
|
+
@checker = checker
|
75
|
+
@detacher = detacher
|
76
|
+
super(interval, repeat)
|
77
|
+
end
|
78
|
+
|
79
|
+
def on_timer
|
80
|
+
@callback.call if @checker.call
|
81
|
+
rescue => e
|
82
|
+
@log.error "Unexpected error raised. Stopping the timer.", title: @title, error: e
|
83
|
+
@log.error_backtrace
|
84
|
+
detach
|
85
|
+
@log.error "Timer detached.", title: @title
|
86
|
+
ensure
|
87
|
+
@detacher.call(self) unless @repeat
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,73 @@
|
|
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/plugin_helper/event_emitter'
|
18
|
+
require 'fluent/plugin_helper/thread'
|
19
|
+
require 'fluent/plugin_helper/event_loop'
|
20
|
+
require 'fluent/plugin_helper/timer'
|
21
|
+
require 'fluent/plugin_helper/child_process'
|
22
|
+
require 'fluent/plugin_helper/storage'
|
23
|
+
require 'fluent/plugin_helper/parser'
|
24
|
+
require 'fluent/plugin_helper/formatter'
|
25
|
+
require 'fluent/plugin_helper/http_server'
|
26
|
+
require 'fluent/plugin_helper/inject'
|
27
|
+
require 'fluent/plugin_helper/extract'
|
28
|
+
require 'fluent/plugin_helper/socket'
|
29
|
+
require 'fluent/plugin_helper/server'
|
30
|
+
require 'fluent/plugin_helper/counter'
|
31
|
+
require 'fluent/plugin_helper/retry_state'
|
32
|
+
require 'fluent/plugin_helper/record_accessor'
|
33
|
+
require 'fluent/plugin_helper/compat_parameters'
|
34
|
+
|
35
|
+
module Fluent
|
36
|
+
module PluginHelper
|
37
|
+
module Mixin
|
38
|
+
def self.included(mod)
|
39
|
+
mod.extend(Fluent::PluginHelper)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.extended(mod)
|
44
|
+
def mod.inherited(subclass)
|
45
|
+
subclass.module_eval do
|
46
|
+
@_plugin_helpers_list = []
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def helpers_internal(*snake_case_symbols)
|
52
|
+
helper_modules = []
|
53
|
+
snake_case_symbols.each do |name|
|
54
|
+
begin
|
55
|
+
helper_modules << Fluent::PluginHelper.const_get(name.to_s.split('_').map(&:capitalize).join)
|
56
|
+
rescue NameError
|
57
|
+
raise "Unknown plugin helper:#{name}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
include(*helper_modules)
|
61
|
+
end
|
62
|
+
|
63
|
+
def helpers(*snake_case_symbols)
|
64
|
+
@_plugin_helpers_list ||= []
|
65
|
+
@_plugin_helpers_list.concat(snake_case_symbols)
|
66
|
+
helpers_internal(*snake_case_symbols)
|
67
|
+
end
|
68
|
+
|
69
|
+
def plugin_helpers
|
70
|
+
@_plugin_helpers_list || []
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,80 @@
|
|
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 'set'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module PluginId
|
21
|
+
@@configured_ids = Set.new
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
super
|
25
|
+
@_plugin_root_dir = nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def configure(conf)
|
29
|
+
@id = conf['@id']
|
30
|
+
@_id_configured = !!@id # plugin id is explicitly configured by users (or not)
|
31
|
+
if @id
|
32
|
+
@id = @id.to_s
|
33
|
+
if @@configured_ids.include?(@id) && !plugin_id_for_test?
|
34
|
+
raise Fluent::ConfigError, "Duplicated plugin id `#{@id}`. Check whole configuration and fix it."
|
35
|
+
end
|
36
|
+
@@configured_ids.add(@id)
|
37
|
+
end
|
38
|
+
|
39
|
+
super
|
40
|
+
end
|
41
|
+
|
42
|
+
def plugin_id_for_test?
|
43
|
+
caller_locations.each do |location|
|
44
|
+
# Thread::Backtrace::Location#path returns base filename or absolute path.
|
45
|
+
# #absolute_path returns absolute_path always.
|
46
|
+
# https://bugs.ruby-lang.org/issues/12159
|
47
|
+
if location.absolute_path =~ /\/test_[^\/]+\.rb$/ # location.path =~ /test_.+\.rb$/
|
48
|
+
return true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
false
|
52
|
+
end
|
53
|
+
|
54
|
+
def plugin_id_configured?
|
55
|
+
if instance_variable_defined?("@_id_configured")
|
56
|
+
@_id_configured
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def plugin_id
|
61
|
+
if instance_variable_defined?("@id")
|
62
|
+
@id || "object:#{object_id.to_s(16)}"
|
63
|
+
else
|
64
|
+
"object:#{object_id.to_s(16)}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def plugin_root_dir
|
69
|
+
return @_plugin_root_dir if @_plugin_root_dir
|
70
|
+
return nil unless system_config.root_dir
|
71
|
+
return nil unless plugin_id_configured?
|
72
|
+
|
73
|
+
# Fluent::Plugin::Base#fluentd_worker_id
|
74
|
+
dir = File.join(system_config.root_dir, "worker#{fluentd_worker_id}", plugin_id)
|
75
|
+
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
76
|
+
@_plugin_root_dir = dir.freeze
|
77
|
+
dir
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|