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
@@ -26,13 +26,26 @@ module Fluent
|
|
26
26
|
'Fluent::Config::Section'
|
27
27
|
end
|
28
28
|
|
29
|
-
def initialize(params = {})
|
29
|
+
def initialize(params = {}, config_element = nil)
|
30
30
|
@klass = 'Fluent::Config::Section'
|
31
31
|
@params = params
|
32
|
+
@corresponding_config_element = config_element
|
32
33
|
end
|
33
34
|
|
34
35
|
alias :object_id :__id__
|
35
36
|
|
37
|
+
def corresponding_config_element
|
38
|
+
@corresponding_config_element
|
39
|
+
end
|
40
|
+
|
41
|
+
def class
|
42
|
+
Section
|
43
|
+
end
|
44
|
+
|
45
|
+
def to_s
|
46
|
+
inspect
|
47
|
+
end
|
48
|
+
|
36
49
|
def inspect
|
37
50
|
"<Fluent::Config::Section #{@params.to_json}>"
|
38
51
|
end
|
@@ -62,6 +75,23 @@ module Fluent
|
|
62
75
|
@params[key.to_sym]
|
63
76
|
end
|
64
77
|
|
78
|
+
def []=(key, value)
|
79
|
+
@params[key.to_sym] = value
|
80
|
+
end
|
81
|
+
|
82
|
+
def respond_to?(symbol, include_all=false)
|
83
|
+
case symbol
|
84
|
+
when :inspect, :nil?, :to_h, :+, :instance_of?, :kind_of?, :[], :respond_to?, :respond_to_missing?
|
85
|
+
true
|
86
|
+
when :!, :!= , :==, :equal?, :instance_eval, :instance_exec
|
87
|
+
true
|
88
|
+
when :method_missing, :singleton_method_added, :singleton_method_removed, :singleton_method_undefined
|
89
|
+
include_all
|
90
|
+
else
|
91
|
+
false
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
65
95
|
def respond_to_missing?(symbol, include_private)
|
66
96
|
@params.has_key?(symbol)
|
67
97
|
end
|
@@ -70,7 +100,7 @@ module Fluent
|
|
70
100
|
if @params.has_key?(name)
|
71
101
|
@params[name]
|
72
102
|
else
|
73
|
-
|
103
|
+
::Kernel.raise ::NoMethodError, "undefined method `#{name}' for #{self.inspect}"
|
74
104
|
end
|
75
105
|
end
|
76
106
|
end
|
@@ -88,7 +118,7 @@ module Fluent
|
|
88
118
|
|
89
119
|
proxy.defaults.each_pair do |name, defval|
|
90
120
|
varname = name.to_sym
|
91
|
-
section_params[varname] = defval
|
121
|
+
section_params[varname] = (defval.dup rescue defval)
|
92
122
|
end
|
93
123
|
|
94
124
|
if proxy.argument
|
@@ -97,7 +127,7 @@ module Fluent
|
|
97
127
|
section_params[key] = self.instance_exec(conf.arg, opts, name, &block)
|
98
128
|
end
|
99
129
|
unless section_params.has_key?(proxy.argument.first)
|
100
|
-
logger.error "config error in:\n#{conf}"
|
130
|
+
logger.error "config error in:\n#{conf}" if logger # logger should exist, but somethimes it's nil (e.g, in tests)
|
101
131
|
raise ConfigError, "'<#{proxy.name} ARG>' section requires argument" + section_stack
|
102
132
|
end
|
103
133
|
# argument should NOT be deprecated... (argument always has a value: '')
|
@@ -121,7 +151,7 @@ module Fluent
|
|
121
151
|
# because they are expected to be removed entirely sometime in the future.
|
122
152
|
# Obsoleted: These obsolete features have been entirely removed from JavaScript and can no longer be used.
|
123
153
|
if opts[:deprecated]
|
124
|
-
logger.warn "'#{name}' parameter is deprecated: #{opts[:deprecated]}"
|
154
|
+
logger.warn "'#{name}' parameter is deprecated: #{opts[:deprecated]}" if logger
|
125
155
|
end
|
126
156
|
if opts[:obsoleted]
|
127
157
|
logger.error "config error in:\n#{conf}" if logger
|
@@ -129,7 +159,7 @@ module Fluent
|
|
129
159
|
end
|
130
160
|
end
|
131
161
|
unless section_params.has_key?(varname)
|
132
|
-
logger.error "config error in:\n#{conf}"
|
162
|
+
logger.error "config error in:\n#{conf}" if logger
|
133
163
|
raise ConfigError, "'#{name}' parameter is required" + section_stack
|
134
164
|
end
|
135
165
|
end
|
@@ -137,39 +167,46 @@ module Fluent
|
|
137
167
|
check_unused_section(proxy, conf, plugin_class)
|
138
168
|
|
139
169
|
proxy.sections.each do |name, subproxy|
|
140
|
-
varname = subproxy.
|
170
|
+
varname = subproxy.variable_name
|
141
171
|
elements = (conf.respond_to?(:elements) ? conf.elements : []).select{ |e| e.name == subproxy.name.to_s || e.name == subproxy.alias.to_s }
|
172
|
+
if elements.empty? && subproxy.init?
|
173
|
+
if subproxy.argument && !subproxy.defaults.has_key?(subproxy.argument.first)
|
174
|
+
raise ArgumentError, "#{name}: init is specified, but default value of argument is missing"
|
175
|
+
end
|
176
|
+
missing_keys = subproxy.params.keys.select{|param_name| !subproxy.defaults.has_key?(param_name)}
|
177
|
+
if !missing_keys.empty?
|
178
|
+
raise ArgumentError, "#{name}: init is specified, but there're parameters without default values:#{missing_keys.join(',')}"
|
179
|
+
end
|
180
|
+
elements << Fluent::Config::Element.new(subproxy.name.to_s, '', {}, [])
|
181
|
+
end
|
182
|
+
|
142
183
|
# set subproxy for secret option
|
143
184
|
elements.each { |element|
|
144
185
|
element.corresponding_proxies << subproxy
|
145
186
|
}
|
146
187
|
|
147
188
|
if subproxy.required? && elements.size < 1
|
148
|
-
logger.error "config error in:\n#{conf}"
|
189
|
+
logger.error "config error in:\n#{conf}" if logger
|
149
190
|
raise ConfigError, "'<#{subproxy.name}>' sections are required" + section_stack
|
150
191
|
end
|
151
192
|
if subproxy.multi?
|
152
193
|
section_params[varname] = elements.map{ |e| generate(subproxy, e, logger, plugin_class, stack + [subproxy.name]) }
|
153
194
|
else
|
154
195
|
if elements.size > 1
|
155
|
-
logger.error "config error in:\n#{conf}"
|
196
|
+
logger.error "config error in:\n#{conf}" if logger
|
156
197
|
raise ConfigError, "'<#{subproxy.name}>' section cannot be written twice or more" + section_stack
|
157
198
|
end
|
158
199
|
section_params[varname] = generate(subproxy, elements.first, logger, plugin_class, stack + [subproxy.name])
|
159
200
|
end
|
160
201
|
end
|
161
202
|
|
162
|
-
Section.new(section_params)
|
203
|
+
Section.new(section_params, conf)
|
163
204
|
end
|
164
205
|
|
165
206
|
def self.check_unused_section(proxy, conf, plugin_class)
|
166
207
|
elems = conf.respond_to?(:elements) ? conf.elements : []
|
167
208
|
elems.each { |e|
|
168
209
|
next if plugin_class.nil? && Fluent::Config::V1Parser::ELEM_SYMBOLS.include?(e.name) # skip pre-defined non-plugin elements because it doens't have proxy section
|
169
|
-
# In v0.12, buffer and output parameters are defined in same place.
|
170
|
-
# It causes same configuration is used in different buffer / output
|
171
|
-
# and buffer plugin's sections are always empty. It should be skipped.
|
172
|
-
next if proxy.sections.empty?
|
173
210
|
|
174
211
|
unless proxy.sections.any? { |name, subproxy| e.name == subproxy.name.to_s || e.name == subproxy.alias.to_s }
|
175
212
|
parent_name = if conf.arg.empty?
|
data/lib/fluent/config/types.rb
CHANGED
@@ -17,7 +17,6 @@
|
|
17
17
|
require 'json'
|
18
18
|
|
19
19
|
require 'fluent/config/error'
|
20
|
-
require 'fluent/configurable'
|
21
20
|
|
22
21
|
module Fluent
|
23
22
|
module Config
|
@@ -61,11 +60,35 @@ module Fluent
|
|
61
60
|
when ''
|
62
61
|
true
|
63
62
|
else
|
64
|
-
|
63
|
+
# Current parser passes comment without actual values, e.g. "param #foo".
|
64
|
+
# parser should pass empty string in this case but changing behaviour may break existing environment so keep parser behaviour. Just ignore comment value in boolean handling for now.
|
65
|
+
if str.respond_to?('start_with?') && str.start_with?('#')
|
66
|
+
true
|
67
|
+
else
|
68
|
+
nil
|
69
|
+
end
|
65
70
|
end
|
66
71
|
end
|
67
72
|
|
68
|
-
|
73
|
+
def self.regexp_value(str)
|
74
|
+
return nil unless str
|
75
|
+
return Regexp.compile(str) unless str.start_with?("/")
|
76
|
+
right_slash_position = str.rindex("/")
|
77
|
+
if right_slash_position < str.size - 3
|
78
|
+
raise Fluent::ConfigError, "invalid regexp: missing right slash: #{str}"
|
79
|
+
end
|
80
|
+
options = str[(right_slash_position + 1)..-1]
|
81
|
+
option = 0
|
82
|
+
option |= Regexp::IGNORECASE if options.include?("i")
|
83
|
+
option |= Regexp::MULTILINE if options.include?("m")
|
84
|
+
Regexp.compile(str[1...right_slash_position], option)
|
85
|
+
end
|
86
|
+
|
87
|
+
STRING_TYPE = Proc.new { |val, opts|
|
88
|
+
v = val.to_s
|
89
|
+
v = v.frozen? ? v.dup : v # config_param can't assume incoming string is mutable
|
90
|
+
v.force_encoding(Encoding::UTF_8)
|
91
|
+
}
|
69
92
|
ENUM_TYPE = Proc.new { |val, opts|
|
70
93
|
s = val.to_sym
|
71
94
|
list = opts[:list]
|
@@ -80,6 +103,7 @@ module Fluent
|
|
80
103
|
SIZE_TYPE = Proc.new { |val, opts| Config.size_value(val) }
|
81
104
|
BOOL_TYPE = Proc.new { |val, opts| Config.bool_value(val) }
|
82
105
|
TIME_TYPE = Proc.new { |val, opts| Config.time_value(val) }
|
106
|
+
REGEXP_TYPE = Proc.new { |val, opts| Config.regexp_value(val) }
|
83
107
|
|
84
108
|
REFORMAT_VALUE = ->(type, value) {
|
85
109
|
if value.nil?
|
@@ -92,6 +116,7 @@ module Fluent
|
|
92
116
|
when :size then Config.size_value(value)
|
93
117
|
when :bool then Config.bool_value(value)
|
94
118
|
when :time then Config.time_value(value)
|
119
|
+
when :regexp then Config.regexp_value(value)
|
95
120
|
else
|
96
121
|
raise "unknown type in REFORMAT: #{type}"
|
97
122
|
end
|
@@ -134,14 +159,4 @@ module Fluent
|
|
134
159
|
end
|
135
160
|
}
|
136
161
|
end
|
137
|
-
|
138
|
-
Configurable.register_type(:string, Config::STRING_TYPE)
|
139
|
-
Configurable.register_type(:enum, Config::ENUM_TYPE)
|
140
|
-
Configurable.register_type(:integer, Config::INTEGER_TYPE)
|
141
|
-
Configurable.register_type(:float, Config::FLOAT_TYPE)
|
142
|
-
Configurable.register_type(:size, Config::SIZE_TYPE)
|
143
|
-
Configurable.register_type(:bool, Config::BOOL_TYPE)
|
144
|
-
Configurable.register_type(:time, Config::TIME_TYPE)
|
145
|
-
Configurable.register_type(:hash, Config::HASH_TYPE)
|
146
|
-
Configurable.register_type(:array, Config::ARRAY_TYPE)
|
147
162
|
end
|
@@ -82,7 +82,7 @@ module Fluent
|
|
82
82
|
elsif skip(/\</)
|
83
83
|
e_name = scan(ELEMENT_NAME)
|
84
84
|
spacing
|
85
|
-
e_arg =
|
85
|
+
e_arg = scan_string(/(?:#{ZERO_OR_MORE_SPACING}\>)/)
|
86
86
|
spacing
|
87
87
|
unless skip(/\>/)
|
88
88
|
parse_error! "expected '>'"
|
@@ -106,7 +106,7 @@ module Fluent
|
|
106
106
|
else
|
107
107
|
k = scan_string(SPACING)
|
108
108
|
spacing_without_comment
|
109
|
-
if prev_match.include?("\n") # support 'tag_mapped' like "without value" configuration
|
109
|
+
if prev_match.include?("\n") || eof? # support 'tag_mapped' like "without value" configuration
|
110
110
|
attrs[k] = ""
|
111
111
|
else
|
112
112
|
if k == '@include'
|
@@ -157,7 +157,6 @@ module Fluent
|
|
157
157
|
else
|
158
158
|
pattern = path
|
159
159
|
end
|
160
|
-
|
161
160
|
Dir.glob(pattern).sort.each { |entry|
|
162
161
|
basepath = File.dirname(entry)
|
163
162
|
fname = File.basename(entry)
|
@@ -175,9 +174,8 @@ module Fluent
|
|
175
174
|
ss = StringScanner.new(data)
|
176
175
|
V1Parser.new(ss, basepath, fname, @eval_context).parse_element(true, nil, attrs, elems)
|
177
176
|
end
|
178
|
-
|
179
177
|
rescue SystemCallError => e
|
180
|
-
cpe = ConfigParseError.new("include error #{uri}")
|
178
|
+
cpe = ConfigParseError.new("include error #{uri} - #{e}")
|
181
179
|
cpe.set_backtrace(e.backtrace)
|
182
180
|
raise cpe
|
183
181
|
end
|
data/lib/fluent/config.rb
CHANGED
@@ -20,18 +20,32 @@ require 'fluent/configurable'
|
|
20
20
|
|
21
21
|
module Fluent
|
22
22
|
module Config
|
23
|
-
def self.parse(str, fname, basepath = Dir.pwd, v1_config =
|
24
|
-
if fname =~ /\.rb$/
|
23
|
+
def self.parse(str, fname, basepath = Dir.pwd, v1_config = nil, syntax: :v1)
|
24
|
+
parser = if fname =~ /\.rb$/ || syntax == :ruby
|
25
|
+
:ruby
|
26
|
+
elsif v1_config.nil?
|
27
|
+
case syntax
|
28
|
+
when :v1 then :v1
|
29
|
+
when :v0 then :v0
|
30
|
+
else
|
31
|
+
raise ArgumentError, "Unknown Fluentd configuration syntax: '#{syntax}'"
|
32
|
+
end
|
33
|
+
elsif v1_config then :v1
|
34
|
+
else :v0
|
35
|
+
end
|
36
|
+
case parser
|
37
|
+
when :v1
|
38
|
+
require 'fluent/config/v1_parser'
|
39
|
+
V1Parser.parse(str, fname, basepath, Kernel.binding)
|
40
|
+
when :v0
|
41
|
+
# TODO: show deprecated message in v1
|
42
|
+
require 'fluent/config/parser'
|
43
|
+
Parser.parse(str, fname, basepath)
|
44
|
+
when :ruby
|
25
45
|
require 'fluent/config/dsl'
|
26
46
|
Config::DSL::Parser.parse(str, File.join(basepath, fname))
|
27
47
|
else
|
28
|
-
|
29
|
-
require 'fluent/config/v1_parser'
|
30
|
-
V1Parser.parse(str, fname, basepath, Kernel.binding)
|
31
|
-
else
|
32
|
-
require 'fluent/config/parser'
|
33
|
-
Parser.parse(str, fname, basepath)
|
34
|
-
end
|
48
|
+
raise "[BUG] unknown configuration parser specification:'#{parser}'"
|
35
49
|
end
|
36
50
|
end
|
37
51
|
|
@@ -39,15 +53,4 @@ module Fluent
|
|
39
53
|
Element.new(name, '', {}, [])
|
40
54
|
end
|
41
55
|
end
|
42
|
-
|
43
|
-
module PluginId
|
44
|
-
def configure(conf)
|
45
|
-
@id = conf['@id'] || conf['id']
|
46
|
-
super
|
47
|
-
end
|
48
|
-
|
49
|
-
def plugin_id
|
50
|
-
@id ? @id : "object:#{object_id.to_s(16)}"
|
51
|
-
end
|
52
|
-
end
|
53
56
|
end
|
data/lib/fluent/configurable.rb
CHANGED
@@ -19,7 +19,7 @@ require 'fluent/config/section'
|
|
19
19
|
require 'fluent/config/error'
|
20
20
|
require 'fluent/registry'
|
21
21
|
require 'fluent/plugin'
|
22
|
-
require 'fluent/
|
22
|
+
require 'fluent/config/types'
|
23
23
|
|
24
24
|
module Fluent
|
25
25
|
module Configurable
|
@@ -28,40 +28,76 @@ module Fluent
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def initialize
|
31
|
+
super
|
31
32
|
# to simulate implicit 'attr_accessor' by config_param / config_section and its value by config_set_default
|
32
33
|
proxy = self.class.merged_configure_proxy
|
33
34
|
proxy.params.keys.each do |name|
|
35
|
+
next if name.to_s.start_with?('@')
|
34
36
|
if proxy.defaults.has_key?(name)
|
35
37
|
instance_variable_set("@#{name}".to_sym, proxy.defaults[name])
|
36
38
|
end
|
37
39
|
end
|
38
40
|
proxy.sections.keys.each do |name|
|
41
|
+
next if name.to_s.start_with?('@')
|
39
42
|
subproxy = proxy.sections[name]
|
40
43
|
if subproxy.multi?
|
41
|
-
instance_variable_set("@#{subproxy.
|
44
|
+
instance_variable_set("@#{subproxy.variable_name}".to_sym, [])
|
42
45
|
else
|
43
|
-
instance_variable_set("@#{subproxy.
|
46
|
+
instance_variable_set("@#{subproxy.variable_name}".to_sym, nil)
|
44
47
|
end
|
45
48
|
end
|
46
49
|
end
|
47
50
|
|
51
|
+
def configure_proxy_generate
|
52
|
+
proxy = self.class.merged_configure_proxy
|
53
|
+
|
54
|
+
if self.respond_to?(:owner) && self.owner
|
55
|
+
owner_proxy = owner.class.merged_configure_proxy
|
56
|
+
if proxy.configured_in_section
|
57
|
+
owner_proxy = owner_proxy.sections[proxy.configured_in_section]
|
58
|
+
end
|
59
|
+
proxy.overwrite_defaults(owner_proxy) if owner_proxy
|
60
|
+
end
|
61
|
+
|
62
|
+
proxy
|
63
|
+
end
|
64
|
+
|
65
|
+
def configured_section_create(name, conf = nil)
|
66
|
+
conf ||= Fluent::Config::Element.new(name.to_s, '', {}, [])
|
67
|
+
root_proxy = configure_proxy_generate
|
68
|
+
proxy = if name.nil? # root
|
69
|
+
root_proxy
|
70
|
+
else
|
71
|
+
root_proxy.sections[name]
|
72
|
+
end
|
73
|
+
# take care to raise Fluent::ConfigError if conf mismatched to proxy
|
74
|
+
Fluent::Config::SectionGenerator.generate(proxy, conf, nil, nil)
|
75
|
+
end
|
76
|
+
|
48
77
|
def configure(conf)
|
49
78
|
@config = conf
|
50
79
|
|
51
|
-
logger = self.respond_to?(:log)
|
52
|
-
|
80
|
+
logger = if self.respond_to?(:log)
|
81
|
+
self.log
|
82
|
+
elsif self.respond_to?(:owner) && self.owner.respond_to?(:log)
|
83
|
+
self.owner.log
|
84
|
+
elsif defined?($log)
|
85
|
+
$log
|
86
|
+
else
|
87
|
+
nil
|
88
|
+
end
|
89
|
+
proxy = configure_proxy_generate
|
53
90
|
conf.corresponding_proxies << proxy
|
54
91
|
|
55
92
|
# In the nested section, can't get plugin class through proxies so get plugin class here
|
56
|
-
plugin_class = Fluent::Plugin.
|
93
|
+
plugin_class = Fluent::Plugin.lookup_type_from_class(proxy.name.to_s)
|
57
94
|
root = Fluent::Config::SectionGenerator.generate(proxy, conf, logger, plugin_class)
|
58
95
|
@config_root_section = root
|
59
96
|
|
60
97
|
root.instance_eval{ @params.keys }.each do |param_name|
|
98
|
+
next if param_name.to_s.start_with?('@')
|
61
99
|
varname = "@#{param_name}".to_sym
|
62
|
-
|
63
|
-
instance_variable_set(varname, root[param_name])
|
64
|
-
end
|
100
|
+
instance_variable_set(varname, root[param_name])
|
65
101
|
end
|
66
102
|
|
67
103
|
self
|
@@ -82,6 +118,21 @@ module Fluent
|
|
82
118
|
CONFIG_TYPE_REGISTRY.lookup(type)
|
83
119
|
end
|
84
120
|
|
121
|
+
{
|
122
|
+
string: Config::STRING_TYPE,
|
123
|
+
enum: Config::ENUM_TYPE,
|
124
|
+
integer: Config::INTEGER_TYPE,
|
125
|
+
float: Config::FLOAT_TYPE,
|
126
|
+
size: Config::SIZE_TYPE,
|
127
|
+
bool: Config::BOOL_TYPE,
|
128
|
+
time: Config::TIME_TYPE,
|
129
|
+
hash: Config::HASH_TYPE,
|
130
|
+
array: Config::ARRAY_TYPE,
|
131
|
+
regexp: Config::REGEXP_TYPE,
|
132
|
+
}.each do |name, type|
|
133
|
+
register_type(name, type)
|
134
|
+
end
|
135
|
+
|
85
136
|
module ClassMethods
|
86
137
|
def configure_proxy_map
|
87
138
|
map = {}
|
@@ -92,15 +143,21 @@ module Fluent
|
|
92
143
|
def configure_proxy(mod_name)
|
93
144
|
map = configure_proxy_map
|
94
145
|
unless map[mod_name]
|
95
|
-
|
146
|
+
type_lookup = ->(type) { Fluent::Configurable.lookup_type(type) }
|
147
|
+
proxy = Fluent::Config::ConfigureProxy.new(mod_name, root: true, required: true, multi: false, type_lookup: type_lookup)
|
96
148
|
map[mod_name] = proxy
|
97
149
|
end
|
98
150
|
map[mod_name]
|
99
151
|
end
|
100
152
|
|
101
|
-
def
|
102
|
-
configure_proxy(self.name).
|
103
|
-
|
153
|
+
def configured_in(section_name)
|
154
|
+
configure_proxy(self.name).configured_in(section_name)
|
155
|
+
end
|
156
|
+
|
157
|
+
def config_param(name, type = nil, **kwargs, &block)
|
158
|
+
configure_proxy(self.name).config_param(name, type, **kwargs, &block)
|
159
|
+
# reserved names '@foo' are invalid as attr_accessor name
|
160
|
+
attr_accessor(name) unless kwargs[:skip_accessor] || Fluent::Config::Element::RESERVED_PARAMETERS.include?(name.to_s)
|
104
161
|
end
|
105
162
|
|
106
163
|
def config_set_default(name, defval)
|
@@ -111,9 +168,13 @@ module Fluent
|
|
111
168
|
configure_proxy(self.name).config_set_desc(name, desc)
|
112
169
|
end
|
113
170
|
|
114
|
-
def config_section(name,
|
115
|
-
|
116
|
-
|
171
|
+
def config_section(name, **kwargs, &block)
|
172
|
+
section_already_exists = !!merged_configure_proxy.sections[name]
|
173
|
+
configure_proxy(self.name).config_section(name, **kwargs, &block)
|
174
|
+
variable_name = configure_proxy(self.name).sections[name].variable_name
|
175
|
+
if !section_already_exists && !self.respond_to?(variable_name)
|
176
|
+
attr_accessor variable_name
|
177
|
+
end
|
117
178
|
end
|
118
179
|
|
119
180
|
def desc(description)
|
@@ -132,12 +193,9 @@ module Fluent
|
|
132
193
|
configurables.map{ |a| a.configure_proxy(a.name || a.object_id.to_s) }.reduce(:merge)
|
133
194
|
end
|
134
195
|
|
135
|
-
def
|
136
|
-
configure_proxy_map[self.to_s].
|
196
|
+
def dump_config_definition
|
197
|
+
configure_proxy_map[self.to_s].dump_config_definition
|
137
198
|
end
|
138
199
|
end
|
139
200
|
end
|
140
|
-
|
141
|
-
# load default types
|
142
|
-
require 'fluent/config/types'
|
143
201
|
end
|
@@ -0,0 +1,46 @@
|
|
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 'cool.io'
|
18
|
+
require 'fluent/msgpack_factory'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module Counter
|
22
|
+
class BaseSocket < Coolio::TCPSocket
|
23
|
+
include Fluent::MessagePackFactory::Mixin
|
24
|
+
|
25
|
+
def packed_write(data)
|
26
|
+
write pack(data)
|
27
|
+
end
|
28
|
+
|
29
|
+
def on_read(data)
|
30
|
+
msgpack_unpacker.feed_each(data) do |d|
|
31
|
+
on_message d
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def on_message(data)
|
36
|
+
raise NotImplementedError
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def pack(data)
|
42
|
+
msgpack_packer.pack(data)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|