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
@@ -14,13 +14,12 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
-
require 'fluent/configurable'
|
18
|
-
|
19
17
|
module Fluent
|
20
18
|
module Config
|
21
19
|
class ConfigureProxy
|
22
|
-
attr_accessor :name, :final, :param_name, :required, :multi, :alias, :
|
23
|
-
|
20
|
+
attr_accessor :name, :final, :param_name, :init, :required, :multi, :alias, :configured_in_section
|
21
|
+
attr_accessor :argument, :params, :defaults, :descriptions, :sections
|
22
|
+
# config_param :desc, :string, default: '....'
|
24
23
|
# config_set_default :buffer_type, :memory
|
25
24
|
#
|
26
25
|
# config_section :default, required: true, multi: false do
|
@@ -38,20 +37,48 @@ module Fluent
|
|
38
37
|
# end
|
39
38
|
# end
|
40
39
|
|
41
|
-
def initialize(name,
|
40
|
+
def initialize(name, root: false, param_name: nil, final: nil, init: nil, required: nil, multi: nil, alias: nil, type_lookup:)
|
42
41
|
@name = name.to_sym
|
43
|
-
@final =
|
42
|
+
@final = final
|
43
|
+
|
44
|
+
# For ConfigureProxy of root section, "@name" should be a class name of plugins.
|
45
|
+
# Otherwise (like subsections), "@name" should be a name of section, like "buffer", "store".
|
46
|
+
# For subsections, name will be used as parameter names (unless param_name exists), so overriding proxy's name
|
47
|
+
# should override "@name".
|
48
|
+
@root_section = root
|
49
|
+
|
50
|
+
@param_name = param_name && param_name.to_sym
|
51
|
+
@init = init
|
52
|
+
@required = required
|
53
|
+
@multi = multi
|
54
|
+
@alias = binding.local_variable_get(:alias)
|
55
|
+
@type_lookup = type_lookup
|
56
|
+
|
57
|
+
raise "init and required are exclusive" if @init && @required
|
44
58
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
@
|
59
|
+
# specify section name for viewpoint of owner(parent) plugin
|
60
|
+
# for buffer plugins: all params are in <buffer> section of owner
|
61
|
+
# others: <storage>, <format> (formatter/parser), ...
|
62
|
+
@configured_in_section = nil
|
49
63
|
|
50
64
|
@argument = nil # nil: ignore argument
|
51
65
|
@params = {}
|
52
66
|
@defaults = {}
|
53
67
|
@descriptions = {}
|
54
68
|
@sections = {}
|
69
|
+
@current_description = nil
|
70
|
+
end
|
71
|
+
|
72
|
+
def variable_name
|
73
|
+
@param_name || @name
|
74
|
+
end
|
75
|
+
|
76
|
+
def root?
|
77
|
+
@root_section
|
78
|
+
end
|
79
|
+
|
80
|
+
def init?
|
81
|
+
@init.nil? ? false : @init
|
55
82
|
end
|
56
83
|
|
57
84
|
def required?
|
@@ -63,18 +90,40 @@ module Fluent
|
|
63
90
|
end
|
64
91
|
|
65
92
|
def final?
|
66
|
-
|
93
|
+
!!@final
|
67
94
|
end
|
68
95
|
|
69
96
|
def merge(other) # self is base class, other is subclass
|
70
97
|
return merge_for_finalized(other) if self.final?
|
71
98
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
99
|
+
[:param_name, :required, :multi, :alias, :configured_in_section].each do |prohibited_name|
|
100
|
+
if overwrite?(other, prohibited_name)
|
101
|
+
raise ConfigError, "BUG: subclass cannot overwrite base class's config_section: #{prohibited_name}"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
options = {}
|
106
|
+
# param_name affects instance variable name, which is just "internal" of each plugins.
|
107
|
+
# so it must not be changed. base class's name (or param_name) is always used.
|
108
|
+
options[:param_name] = @param_name
|
109
|
+
|
110
|
+
# subclass cannot overwrite base class's definition
|
111
|
+
options[:init] = @init.nil? ? other.init : self.init
|
112
|
+
options[:required] = @required.nil? ? other.required : self.required
|
113
|
+
options[:multi] = @multi.nil? ? other.multi : self.multi
|
114
|
+
options[:alias] = @alias.nil? ? other.alias : self.alias
|
115
|
+
options[:final] = @final || other.final
|
116
|
+
options[:type_lookup] = @type_lookup
|
117
|
+
|
118
|
+
merged = if self.root?
|
119
|
+
options[:root] = true
|
120
|
+
self.class.new(other.name, options)
|
121
|
+
else
|
122
|
+
self.class.new(@name, options)
|
123
|
+
end
|
124
|
+
|
125
|
+
# configured_in MUST be kept
|
126
|
+
merged.configured_in_section = self.configured_in_section || other.configured_in_section
|
78
127
|
|
79
128
|
merged.argument = other.argument || self.argument
|
80
129
|
merged.params = self.params.merge(other.params)
|
@@ -98,20 +147,41 @@ module Fluent
|
|
98
147
|
|
99
148
|
def merge_for_finalized(other)
|
100
149
|
# list what subclass can do for finalized section
|
101
|
-
# * overwrite param_name to escape duplicated name of instance variable
|
102
150
|
# * append params/defaults/sections which are missing in superclass
|
151
|
+
# * change default values of superclass
|
152
|
+
# * overwrite init to make it enable to instantiate section objects with added default values
|
153
|
+
|
154
|
+
if other.final == false && overwrite?(other, :final)
|
155
|
+
raise ConfigError, "BUG: subclass cannot overwrite finalized base class's config_section"
|
156
|
+
end
|
157
|
+
|
158
|
+
[:param_name, :required, :multi, :alias, :configured_in_section].each do |prohibited_name|
|
159
|
+
if overwrite?(other, prohibited_name)
|
160
|
+
raise ConfigError, "BUG: subclass cannot overwrite base class's config_section: #{prohibited_name}"
|
161
|
+
end
|
162
|
+
end
|
103
163
|
|
104
|
-
options = {
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
164
|
+
options = {}
|
165
|
+
options[:param_name] = @param_name
|
166
|
+
options[:init] = @init || other.init
|
167
|
+
options[:required] = @required.nil? ? other.required : self.required
|
168
|
+
options[:multi] = @multi.nil? ? other.multi : self.multi
|
169
|
+
options[:alias] = @alias.nil? ? other.alias : self.alias
|
170
|
+
options[:final] = true
|
171
|
+
options[:type_lookup] = @type_lookup
|
172
|
+
|
173
|
+
merged = if self.root?
|
174
|
+
options[:root] = true
|
175
|
+
self.class.new(other.name, options)
|
176
|
+
else
|
177
|
+
self.class.new(@name, options)
|
178
|
+
end
|
179
|
+
|
180
|
+
merged.configured_in_section = self.configured_in_section || other.configured_in_section
|
111
181
|
|
112
182
|
merged.argument = self.argument || other.argument
|
113
183
|
merged.params = other.params.merge(self.params)
|
114
|
-
merged.defaults =
|
184
|
+
merged.defaults = self.defaults.merge(other.defaults)
|
115
185
|
merged.sections = {}
|
116
186
|
(self.sections.keys + other.sections.keys).uniq.each do |section_key|
|
117
187
|
self_section = self.sections[section_key]
|
@@ -129,49 +199,88 @@ module Fluent
|
|
129
199
|
merged
|
130
200
|
end
|
131
201
|
|
132
|
-
def
|
133
|
-
|
134
|
-
|
202
|
+
def overwrite_defaults(other) # other is owner plugin's corresponding proxy
|
203
|
+
self.defaults = self.defaults.merge(other.defaults)
|
204
|
+
self.sections.keys.each do |section_key|
|
205
|
+
if other.sections.has_key?(section_key)
|
206
|
+
self.sections[section_key].overwrite_defaults(other.sections[section_key])
|
207
|
+
end
|
135
208
|
end
|
136
209
|
end
|
137
210
|
|
138
|
-
def
|
139
|
-
|
211
|
+
def option_value_type!(name, opts, key, klass=nil, type: nil)
|
212
|
+
if opts.has_key?(key)
|
213
|
+
if klass && !opts[key].is_a?(klass)
|
214
|
+
raise ArgumentError, "#{name}: #{key} must be a #{klass}, but #{opts[key].class}"
|
215
|
+
end
|
216
|
+
case type
|
217
|
+
when :boolean
|
218
|
+
unless opts[key].is_a?(TrueClass) || opts[key].is_a?(FalseClass)
|
219
|
+
raise ArgumentError, "#{name}: #{key} must be true or false, but #{opts[key].class}"
|
220
|
+
end
|
221
|
+
when nil
|
222
|
+
# ignore
|
223
|
+
else
|
224
|
+
raise "unknown type: #{type} for option #{key}"
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
140
228
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
229
|
+
def config_parameter_option_validate!(name, type, **kwargs, &block)
|
230
|
+
if type.nil? && !block
|
231
|
+
type = :string
|
232
|
+
end
|
233
|
+
kwargs.each_key do |key|
|
234
|
+
case key
|
235
|
+
when :default, :alias, :secret, :skip_accessor, :deprecated, :obsoleted, :desc
|
236
|
+
# valid for all types
|
237
|
+
when :list
|
238
|
+
raise ArgumentError, ":list is valid only for :enum type, but #{type}: #{name}" if type != :enum
|
239
|
+
when :value_type
|
240
|
+
raise ArgumentError, ":value_type is valid only for :hash and :array, but #{type}: #{name}" if type != :hash && type != :array
|
241
|
+
when :symbolize_keys
|
242
|
+
raise ArgumentError, ":symbolize_keys is valid only for :hash, but #{type}: #{name}" if type != :hash
|
147
243
|
else
|
148
|
-
raise ArgumentError, "
|
244
|
+
raise ArgumentError, "unknown option '#{key}' for configuration parameter: #{name}"
|
149
245
|
end
|
150
|
-
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
def parameter_configuration(name, type = nil, **kwargs, &block)
|
250
|
+
config_parameter_option_validate!(name, type, **kwargs, &block)
|
251
|
+
|
252
|
+
name = name.to_sym
|
151
253
|
|
152
|
-
type = opts[:type]
|
153
254
|
if block && type
|
154
255
|
raise ArgumentError, "#{name}: both of block and type cannot be specified"
|
256
|
+
elsif !block && !type
|
257
|
+
type = :string
|
155
258
|
end
|
259
|
+
opts = {}
|
260
|
+
opts[:type] = type
|
261
|
+
opts.merge!(kwargs)
|
156
262
|
|
157
263
|
begin
|
158
|
-
|
159
|
-
block ||= Configurable.lookup_type(type)
|
264
|
+
block ||= @type_lookup.call(type)
|
160
265
|
rescue ConfigError
|
161
266
|
# override error message
|
162
267
|
raise ArgumentError, "#{name}: unknown config_argument type `#{type}'"
|
163
268
|
end
|
164
269
|
|
270
|
+
# options for config_param
|
165
271
|
option_value_type!(name, opts, :desc, String)
|
166
272
|
option_value_type!(name, opts, :alias, Symbol)
|
273
|
+
option_value_type!(name, opts, :secret, type: :boolean)
|
167
274
|
option_value_type!(name, opts, :deprecated, String)
|
168
275
|
option_value_type!(name, opts, :obsoleted, String)
|
169
276
|
if type == :enum
|
170
|
-
if !opts.has_key?(:list) || !opts[:list].all?{|v| v.is_a?(Symbol) }
|
277
|
+
if !opts.has_key?(:list) || !opts[:list].is_a?(Array) || opts[:list].empty? || !opts[:list].all?{|v| v.is_a?(Symbol) }
|
171
278
|
raise ArgumentError, "#{name}: enum parameter requires :list of Symbols"
|
172
279
|
end
|
173
280
|
end
|
281
|
+
option_value_type!(name, opts, :symbolize_keys, type: :boolean)
|
174
282
|
option_value_type!(name, opts, :value_type, Symbol) # hash, array
|
283
|
+
option_value_type!(name, opts, :skip_accessor, type: :boolean)
|
175
284
|
|
176
285
|
if opts.has_key?(:default)
|
177
286
|
config_set_default(name, opts[:default])
|
@@ -188,18 +297,25 @@ module Fluent
|
|
188
297
|
[name, block, opts]
|
189
298
|
end
|
190
299
|
|
191
|
-
def
|
300
|
+
def configured_in(section_name)
|
301
|
+
if @configured_in_section
|
302
|
+
raise ArgumentError, "#{self.name}: configured_in called twice"
|
303
|
+
end
|
304
|
+
@configured_in_section = section_name.to_sym
|
305
|
+
end
|
306
|
+
|
307
|
+
def config_argument(name, type = nil, **kwargs, &block)
|
192
308
|
if @argument
|
193
309
|
raise ArgumentError, "#{self.name}: config_argument called twice"
|
194
310
|
end
|
195
|
-
name, block, opts = parameter_configuration(name,
|
311
|
+
name, block, opts = parameter_configuration(name, type, **kwargs, &block)
|
196
312
|
|
197
313
|
@argument = [name, block, opts]
|
198
314
|
name
|
199
315
|
end
|
200
316
|
|
201
|
-
def config_param(name,
|
202
|
-
name, block, opts = parameter_configuration(name,
|
317
|
+
def config_param(name, type = nil, **kwargs, &block)
|
318
|
+
name, block, opts = parameter_configuration(name, type, **kwargs, &block)
|
203
319
|
|
204
320
|
if @current_description
|
205
321
|
config_set_desc(name, @current_description)
|
@@ -237,18 +353,13 @@ module Fluent
|
|
237
353
|
@current_description = description
|
238
354
|
end
|
239
355
|
|
240
|
-
def config_section(name,
|
356
|
+
def config_section(name, **kwargs, &block)
|
241
357
|
unless block_given?
|
242
358
|
raise ArgumentError, "#{name}: config_section requires block parameter"
|
243
359
|
end
|
244
360
|
name = name.to_sym
|
245
361
|
|
246
|
-
|
247
|
-
unless args.empty? || args.size == 1 && args.first.is_a?(Hash)
|
248
|
-
raise ArgumentError, "#{self.name}: unknown config_section arguments: #{args.inspect}"
|
249
|
-
end
|
250
|
-
|
251
|
-
sub_proxy = ConfigureProxy.new(name, *args)
|
362
|
+
sub_proxy = ConfigureProxy.new(name, type_lookup: @type_lookup, **kwargs)
|
252
363
|
sub_proxy.instance_exec(&block)
|
253
364
|
|
254
365
|
@params.delete(name)
|
@@ -257,20 +368,57 @@ module Fluent
|
|
257
368
|
name
|
258
369
|
end
|
259
370
|
|
260
|
-
def
|
261
|
-
dumped_config =
|
262
|
-
|
371
|
+
def dump_config_definition
|
372
|
+
dumped_config = {}
|
373
|
+
if @argument
|
374
|
+
argument_name, _block, options = @argument
|
375
|
+
options[:required] = !@defaults.key?(argument_name)
|
376
|
+
options[:argument] = true
|
377
|
+
dumped_config[argument_name] = options
|
378
|
+
end
|
263
379
|
@params.each do |name, config|
|
264
|
-
dumped_config
|
265
|
-
dumped_config
|
266
|
-
dumped_config
|
380
|
+
dumped_config[name] = config[1]
|
381
|
+
dumped_config[name][:required] = !@defaults.key?(name)
|
382
|
+
dumped_config[name][:default] = @defaults[name] if @defaults.key?(name)
|
383
|
+
dumped_config[name][:desc] = @descriptions[name] if @descriptions.key?(name)
|
384
|
+
end
|
385
|
+
# Overwrite by config_set_default
|
386
|
+
@defaults.each do |name, value|
|
387
|
+
if @params.key?(name) || (@argument && @argument.first == name)
|
388
|
+
dumped_config[name][:default] = value
|
389
|
+
else
|
390
|
+
dumped_config[name] = { default: value }
|
391
|
+
end
|
392
|
+
end
|
393
|
+
# Overwrite by config_set_desc
|
394
|
+
@descriptions.each do |name, value|
|
395
|
+
if @params.key?(name)
|
396
|
+
dumped_config[name][:desc] = value
|
397
|
+
else
|
398
|
+
dumped_config[name] = { desc: value }
|
399
|
+
end
|
267
400
|
end
|
268
401
|
@sections.each do |section_name, sub_proxy|
|
269
|
-
dumped_config
|
402
|
+
if dumped_config.key?(section_name)
|
403
|
+
dumped_config[section_name].update(sub_proxy.dump_config_definition)
|
404
|
+
else
|
405
|
+
dumped_config[section_name] = sub_proxy.dump_config_definition
|
406
|
+
dumped_config[section_name][:required] = sub_proxy.required?
|
407
|
+
dumped_config[section_name][:multi] = sub_proxy.multi?
|
408
|
+
dumped_config[section_name][:alias] = sub_proxy.alias
|
409
|
+
dumped_config[section_name][:section] = true
|
410
|
+
end
|
270
411
|
end
|
271
412
|
dumped_config
|
272
413
|
end
|
414
|
+
|
415
|
+
private
|
416
|
+
|
417
|
+
def overwrite?(other, attribute_name)
|
418
|
+
value = instance_variable_get("@#{attribute_name}")
|
419
|
+
other_value = other.__send__(attribute_name)
|
420
|
+
!value.nil? && !other_value.nil? && value != other_value
|
421
|
+
end
|
273
422
|
end
|
274
423
|
end
|
275
424
|
end
|
276
|
-
|
data/lib/fluent/config/dsl.rb
CHANGED
@@ -22,6 +22,8 @@ require 'fluent/config/element'
|
|
22
22
|
module Fluent
|
23
23
|
module Config
|
24
24
|
module DSL
|
25
|
+
RESERVED_PARAMETERS = [:type, :id, :log_level, :label] # Need '@' prefix for reserved parameters
|
26
|
+
|
25
27
|
module Parser
|
26
28
|
def self.read(path)
|
27
29
|
path = File.expand_path(path)
|
@@ -82,6 +84,10 @@ module Fluent
|
|
82
84
|
@proxy = proxy
|
83
85
|
end
|
84
86
|
|
87
|
+
def to_int
|
88
|
+
__id__
|
89
|
+
end
|
90
|
+
|
85
91
|
def method_missing(name, *args, &block)
|
86
92
|
::Kernel.raise ::ArgumentError, "Configuration DSL Syntax Error: only one argument allowed" if args.size > 1
|
87
93
|
value = args.first
|
@@ -91,11 +97,12 @@ module Fluent
|
|
91
97
|
proxy.element.instance_exec(&block)
|
92
98
|
@elements.push(proxy.to_config_element)
|
93
99
|
else
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
100
|
+
param_name = RESERVED_PARAMETERS.include?(name) ? "@#{name}" : name.to_s
|
101
|
+
@attrs[param_name] = if value.is_a?(Array) || value.is_a?(Hash)
|
102
|
+
JSON.dump(value)
|
103
|
+
else
|
104
|
+
value.to_s
|
105
|
+
end
|
99
106
|
end
|
100
107
|
|
101
108
|
self
|
@@ -32,11 +32,39 @@ module Fluent
|
|
32
32
|
@v1_config = false
|
33
33
|
@corresponding_proxies = [] # some plugins use flat parameters, e.g. in_http doesn't provide <format> section for parser.
|
34
34
|
@unused_in = false # if this element is not used in plugins, correspoing plugin name and parent element name is set, e.g. [source, plugin class].
|
35
|
+
|
36
|
+
# it's global logger, not plugin logger: deprecated message should be global warning, not plugin level.
|
37
|
+
@logger = defined?($log) ? $log : nil
|
38
|
+
|
39
|
+
@target_worker_ids = []
|
35
40
|
end
|
36
41
|
|
37
|
-
attr_accessor :name, :arg, :
|
42
|
+
attr_accessor :name, :arg, :unused, :v1_config, :corresponding_proxies, :unused_in
|
43
|
+
attr_writer :elements
|
44
|
+
attr_reader :target_worker_ids
|
45
|
+
|
46
|
+
RESERVED_PARAMETERS_COMPAT = {
|
47
|
+
'@type' => 'type',
|
48
|
+
'@id' => 'id',
|
49
|
+
'@log_level' => 'log_level',
|
50
|
+
'@label' => nil,
|
51
|
+
}
|
52
|
+
RESERVED_PARAMETERS = RESERVED_PARAMETERS_COMPAT.keys
|
53
|
+
|
54
|
+
def elements(*names, name: nil, arg: nil)
|
55
|
+
raise ArgumentError, "name and names are exclusive" if name && !names.empty?
|
56
|
+
raise ArgumentError, "arg is available only with name" if arg && !name
|
57
|
+
|
58
|
+
if name
|
59
|
+
@elements.select{|e| e.name == name && (!arg || e.arg == arg) }
|
60
|
+
elsif !names.empty?
|
61
|
+
@elements.select{|e| names.include?(e.name) }
|
62
|
+
else
|
63
|
+
@elements
|
64
|
+
end
|
65
|
+
end
|
38
66
|
|
39
|
-
def add_element(name, arg='')
|
67
|
+
def add_element(name, arg = '')
|
40
68
|
e = Element.new(name, arg, {}, [])
|
41
69
|
e.v1_config = @v1_config
|
42
70
|
@elements << e
|
@@ -48,6 +76,11 @@ module Fluent
|
|
48
76
|
"name:#{@name}, arg:#{@arg}, " + attrs + ", " + @elements.inspect
|
49
77
|
end
|
50
78
|
|
79
|
+
# Used by PP and Pry
|
80
|
+
def pretty_print(q)
|
81
|
+
q.text(inspect)
|
82
|
+
end
|
83
|
+
|
51
84
|
# This method assumes _o_ is an Element object. Should return false for nil or other object
|
52
85
|
def ==(o)
|
53
86
|
self.name == o.name && self.arg == o.arg &&
|
@@ -63,6 +96,7 @@ module Fluent
|
|
63
96
|
e
|
64
97
|
end
|
65
98
|
|
99
|
+
# no code in fluentd uses this method
|
66
100
|
def each_element(*names, &block)
|
67
101
|
if names.empty?
|
68
102
|
@elements.each(&block)
|
@@ -76,7 +110,7 @@ module Fluent
|
|
76
110
|
end
|
77
111
|
|
78
112
|
def has_key?(key)
|
79
|
-
@unused_in = false # some sections, e.g. <store> in copy, is not defined by config_section so clear unused flag for better warning message in
|
113
|
+
@unused_in = false # some sections, e.g. <store> in copy, is not defined by config_section so clear unused flag for better warning message in check_not_fetched.
|
80
114
|
@unused.delete(key)
|
81
115
|
super
|
82
116
|
end
|
@@ -84,6 +118,12 @@ module Fluent
|
|
84
118
|
def [](key)
|
85
119
|
@unused_in = false # ditto
|
86
120
|
@unused.delete(key)
|
121
|
+
|
122
|
+
if RESERVED_PARAMETERS.include?(key) && !has_key?(key) && has_key?(RESERVED_PARAMETERS_COMPAT[key])
|
123
|
+
@logger.warn "'#{RESERVED_PARAMETERS_COMPAT[key]}' is deprecated parameter name. use '#{key}' instead." if @logger
|
124
|
+
return self[RESERVED_PARAMETERS_COMPAT[key]]
|
125
|
+
end
|
126
|
+
|
87
127
|
super
|
88
128
|
end
|
89
129
|
|
@@ -108,11 +148,7 @@ module Fluent
|
|
108
148
|
out << "#{indent}<#{@name} #{@arg}>\n"
|
109
149
|
end
|
110
150
|
each_pair { |k, v|
|
111
|
-
|
112
|
-
out << "#{nindent}#{k} xxxxxx\n"
|
113
|
-
else
|
114
|
-
out << "#{nindent}#{k} #{v}\n"
|
115
|
-
end
|
151
|
+
out << dump_value(k, v, nindent)
|
116
152
|
}
|
117
153
|
@elements.each { |e|
|
118
154
|
out << e.to_s(nest + 1)
|
@@ -124,6 +160,8 @@ module Fluent
|
|
124
160
|
def to_masked_element
|
125
161
|
new_elems = @elements.map { |e| e.to_masked_element }
|
126
162
|
new_elem = Element.new(@name, @arg, {}, new_elems, @unused)
|
163
|
+
new_elem.v1_config = @v1_config
|
164
|
+
new_elem.corresponding_proxies = @corresponding_proxies
|
127
165
|
each_pair { |k, v|
|
128
166
|
new_elem[k] = secret_param?(k) ? 'xxxxxx' : v
|
129
167
|
}
|
@@ -135,7 +173,7 @@ module Fluent
|
|
135
173
|
|
136
174
|
param_key = key.to_sym
|
137
175
|
@corresponding_proxies.each { |proxy|
|
138
|
-
|
176
|
+
_block, opts = proxy.params[param_key]
|
139
177
|
if opts && opts.has_key?(:secret)
|
140
178
|
return opts[:secret]
|
141
179
|
end
|
@@ -144,11 +182,71 @@ module Fluent
|
|
144
182
|
false
|
145
183
|
end
|
146
184
|
|
185
|
+
def param_type(key)
|
186
|
+
return nil if @corresponding_proxies.empty?
|
187
|
+
|
188
|
+
param_key = key.to_sym
|
189
|
+
proxy = @corresponding_proxies.detect do |_proxy|
|
190
|
+
_proxy.params.has_key?(param_key)
|
191
|
+
end
|
192
|
+
return nil unless proxy
|
193
|
+
_block, opts = proxy.params[param_key]
|
194
|
+
opts[:type]
|
195
|
+
end
|
196
|
+
|
197
|
+
def dump_value(k, v, nindent)
|
198
|
+
if secret_param?(k)
|
199
|
+
"#{nindent}#{k} xxxxxx\n"
|
200
|
+
else
|
201
|
+
if @v1_config
|
202
|
+
case param_type(k)
|
203
|
+
when :string
|
204
|
+
"#{nindent}#{k} \"#{self.class.unescape_parameter(v)}\"\n"
|
205
|
+
when :enum, :integer, :float, :size, :bool, :time
|
206
|
+
"#{nindent}#{k} #{v}\n"
|
207
|
+
when :hash, :array
|
208
|
+
"#{nindent}#{k} #{v}\n"
|
209
|
+
else
|
210
|
+
# Unknown type
|
211
|
+
"#{nindent}#{k} #{v}\n"
|
212
|
+
end
|
213
|
+
else
|
214
|
+
"#{nindent}#{k} #{v}\n"
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
147
219
|
def self.unescape_parameter(v)
|
148
220
|
result = ''
|
149
221
|
v.each_char { |c| result << LiteralParser.unescape_char(c) }
|
150
222
|
result
|
151
223
|
end
|
224
|
+
|
225
|
+
def set_target_worker_id(worker_id)
|
226
|
+
@target_worker_ids = [worker_id]
|
227
|
+
@elements.each { |e|
|
228
|
+
e.set_target_worker_id(worker_id)
|
229
|
+
}
|
230
|
+
end
|
231
|
+
|
232
|
+
def set_target_worker_ids(worker_ids)
|
233
|
+
@target_worker_ids = worker_ids.uniq
|
234
|
+
@elements.each { |e|
|
235
|
+
e.set_target_worker_ids(worker_ids.uniq)
|
236
|
+
}
|
237
|
+
end
|
238
|
+
|
239
|
+
def for_every_workers?
|
240
|
+
@target_worker_ids.empty?
|
241
|
+
end
|
242
|
+
|
243
|
+
def for_this_worker?
|
244
|
+
@target_worker_ids.include?(Fluent::Engine.worker_id)
|
245
|
+
end
|
246
|
+
|
247
|
+
def for_another_worker?
|
248
|
+
!@target_worker_ids.empty? && !@target_worker_ids.include?(Fluent::Engine.worker_id)
|
249
|
+
end
|
152
250
|
end
|
153
251
|
end
|
154
252
|
end
|
@@ -18,6 +18,7 @@ require 'stringio'
|
|
18
18
|
|
19
19
|
require 'json'
|
20
20
|
require 'yajl'
|
21
|
+
require 'socket'
|
21
22
|
require 'irb/ruby-lex' # RubyLex
|
22
23
|
|
23
24
|
require 'fluent/config/basic_parser'
|
@@ -162,6 +163,11 @@ module Fluent
|
|
162
163
|
if @eval_context.nil?
|
163
164
|
parse_error! "embedded code is not allowed in this file"
|
164
165
|
end
|
166
|
+
# Add hostname and worker_id to code for preventing unused warnings
|
167
|
+
code = <<EOM + code
|
168
|
+
hostname = Socket.gethostname
|
169
|
+
worker_id = ENV['SERVERENGINE_WORKER_ID'] || ''
|
170
|
+
EOM
|
165
171
|
@eval_context.instance_eval(code)
|
166
172
|
end
|
167
173
|
|
@@ -192,7 +198,7 @@ module Fluent
|
|
192
198
|
|
193
199
|
def scan_json(is_array)
|
194
200
|
result = nil
|
195
|
-
# Yajl does not raise ParseError for
|
201
|
+
# Yajl does not raise ParseError for incomplete json string, like '[1', '{"h"', '{"h":' or '{"h1":1'
|
196
202
|
# This is the reason to use JSON module.
|
197
203
|
|
198
204
|
buffer = (is_array ? "[" : "{")
|
@@ -209,7 +215,7 @@ module Fluent
|
|
209
215
|
parsed = nil
|
210
216
|
begin
|
211
217
|
parsed = JSON.parse(buffer + line_buffer.rstrip.sub(/,$/, '') + (is_array ? "]" : "}"))
|
212
|
-
rescue JSON::ParserError
|
218
|
+
rescue JSON::ParserError
|
213
219
|
# This '#' is in json string literals
|
214
220
|
end
|
215
221
|
|
@@ -237,7 +243,7 @@ module Fluent
|
|
237
243
|
line_buffer << char
|
238
244
|
begin
|
239
245
|
result = JSON.parse(buffer + line_buffer)
|
240
|
-
rescue JSON::ParserError
|
246
|
+
rescue JSON::ParserError
|
241
247
|
# Incomplete json string yet
|
242
248
|
end
|
243
249
|
end
|
data/lib/fluent/config/parser.rb
CHANGED
@@ -81,10 +81,10 @@ module Fluent
|
|
81
81
|
pattern = path
|
82
82
|
end
|
83
83
|
|
84
|
-
Dir.glob(pattern).sort.each { |
|
85
|
-
basepath = File.dirname(
|
86
|
-
fname = File.basename(
|
87
|
-
File.open(
|
84
|
+
Dir.glob(pattern).sort.each { |entry|
|
85
|
+
basepath = File.dirname(entry)
|
86
|
+
fname = File.basename(entry)
|
87
|
+
File.open(entry) { |f|
|
88
88
|
Parser.new(basepath, f.each_line, fname).parse!(allow_include, nil, attrs, elems)
|
89
89
|
}
|
90
90
|
}
|