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,51 @@
|
|
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'
|
18
|
+
require 'fluent/counter/client'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module PluginHelper
|
22
|
+
module Counter
|
23
|
+
def counter_client_create(scope:, loop: Coolio::Loop.new)
|
24
|
+
client_conf = system_config.counter_client
|
25
|
+
raise Fluent::ConfigError, '<counter_client> is required in <system>' unless client_conf
|
26
|
+
counter_client = Fluent::Counter::Client.new(loop, port: client_conf.port, host: client_conf.host, log: log, timeout: client_conf.timeout)
|
27
|
+
counter_client.start
|
28
|
+
counter_client.establish(scope)
|
29
|
+
@_counter_client = counter_client
|
30
|
+
counter_client
|
31
|
+
end
|
32
|
+
|
33
|
+
attr_reader :_counter_client
|
34
|
+
|
35
|
+
def initialize
|
36
|
+
super
|
37
|
+
@_counter_client = nil
|
38
|
+
end
|
39
|
+
|
40
|
+
def stop
|
41
|
+
super
|
42
|
+
@_counter_client.stop
|
43
|
+
end
|
44
|
+
|
45
|
+
def terminate
|
46
|
+
@_counter_client = nil
|
47
|
+
super
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,93 @@
|
|
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/time'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module PluginHelper
|
21
|
+
module EventEmitter
|
22
|
+
# stop : [-]
|
23
|
+
# shutdown : disable @router
|
24
|
+
# close : [-]
|
25
|
+
# terminate: [-]
|
26
|
+
|
27
|
+
def router
|
28
|
+
@_event_emitter_used_actually = true
|
29
|
+
if @_event_emitter_lazy_init
|
30
|
+
@router = @primary_instance.router
|
31
|
+
end
|
32
|
+
@router
|
33
|
+
end
|
34
|
+
|
35
|
+
def router=(r)
|
36
|
+
# not recommended now...
|
37
|
+
@router = r
|
38
|
+
end
|
39
|
+
|
40
|
+
def has_router?
|
41
|
+
true
|
42
|
+
end
|
43
|
+
|
44
|
+
def event_emitter_used_actually?
|
45
|
+
@_event_emitter_used_actually
|
46
|
+
end
|
47
|
+
|
48
|
+
def event_emitter_router(label_name)
|
49
|
+
if label_name
|
50
|
+
Engine.root_agent.find_label(label_name).event_router
|
51
|
+
elsif self.respond_to?(:as_secondary) && self.as_secondary
|
52
|
+
if @primary_instance.has_router?
|
53
|
+
@_event_emitter_lazy_init = true
|
54
|
+
nil # primary plugin's event router is not initialized yet, here.
|
55
|
+
else
|
56
|
+
@primary_instance.context_router
|
57
|
+
end
|
58
|
+
else
|
59
|
+
# `Engine.root_agent.event_router` is for testing
|
60
|
+
self.context_router || Engine.root_agent.event_router
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def initialize
|
65
|
+
super
|
66
|
+
@_event_emitter_used_actually = false
|
67
|
+
@_event_emitter_lazy_init = false
|
68
|
+
@router = nil
|
69
|
+
end
|
70
|
+
|
71
|
+
def configure(conf)
|
72
|
+
require 'fluent/engine'
|
73
|
+
super
|
74
|
+
@router = event_emitter_router(conf['@label'])
|
75
|
+
end
|
76
|
+
|
77
|
+
def after_shutdown
|
78
|
+
@router = nil
|
79
|
+
super
|
80
|
+
end
|
81
|
+
|
82
|
+
def close # unset router many times to reduce test cost
|
83
|
+
@router = nil
|
84
|
+
super
|
85
|
+
end
|
86
|
+
|
87
|
+
def terminate
|
88
|
+
@router = nil
|
89
|
+
super
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,170 @@
|
|
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/plugin_helper/thread'
|
19
|
+
require 'fluent/clock'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module PluginHelper
|
23
|
+
module EventLoop
|
24
|
+
# Currently this plugin helper is only for other helpers, not plugins.
|
25
|
+
# there's no way to create customized watchers to attach event loops.
|
26
|
+
include Fluent::PluginHelper::Thread
|
27
|
+
|
28
|
+
# stop : [-]
|
29
|
+
# shutdown : detach all event watchers on event loop
|
30
|
+
# close : stop event loop
|
31
|
+
# terminate: initialize internal state
|
32
|
+
|
33
|
+
EVENT_LOOP_RUN_DEFAULT_TIMEOUT = 0.5
|
34
|
+
EVENT_LOOP_SHUTDOWN_TIMEOUT = 5
|
35
|
+
|
36
|
+
attr_reader :_event_loop # for tests
|
37
|
+
|
38
|
+
def event_loop_attach(watcher)
|
39
|
+
@_event_loop_mutex.synchronize do
|
40
|
+
@_event_loop.attach(watcher)
|
41
|
+
@_event_loop_attached_watchers << watcher
|
42
|
+
watcher
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def event_loop_detach(watcher)
|
47
|
+
if watcher.attached?
|
48
|
+
watcher.detach
|
49
|
+
end
|
50
|
+
@_event_loop_mutex.synchronize do
|
51
|
+
@_event_loop_attached_watchers.delete(watcher)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def event_loop_wait_until_start
|
56
|
+
sleep(0.1) until event_loop_running?
|
57
|
+
end
|
58
|
+
|
59
|
+
def event_loop_wait_until_stop
|
60
|
+
timeout_at = Fluent::Clock.now + EVENT_LOOP_SHUTDOWN_TIMEOUT
|
61
|
+
sleep(0.1) while event_loop_running? && Fluent::Clock.now < timeout_at
|
62
|
+
if @_event_loop_running
|
63
|
+
puts "terminating event_loop forcedly"
|
64
|
+
caller.each{|bt| puts "\t#{bt}" }
|
65
|
+
@_event_loop.stop rescue nil
|
66
|
+
@_event_loop_running = true
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def event_loop_running?
|
71
|
+
@_event_loop_running
|
72
|
+
end
|
73
|
+
|
74
|
+
def initialize
|
75
|
+
super
|
76
|
+
@_event_loop = Coolio::Loop.new
|
77
|
+
@_event_loop_running = false
|
78
|
+
@_event_loop_mutex = Mutex.new
|
79
|
+
# plugin MAY configure loop run timeout in #configure
|
80
|
+
@_event_loop_run_timeout = EVENT_LOOP_RUN_DEFAULT_TIMEOUT
|
81
|
+
@_event_loop_attached_watchers = []
|
82
|
+
end
|
83
|
+
|
84
|
+
def start
|
85
|
+
super
|
86
|
+
|
87
|
+
# event loop does not run here, so mutex lock is not required
|
88
|
+
thread_create :event_loop do
|
89
|
+
begin
|
90
|
+
default_watcher = DefaultWatcher.new
|
91
|
+
event_loop_attach(default_watcher)
|
92
|
+
@_event_loop_running = true
|
93
|
+
@_event_loop.run(@_event_loop_run_timeout) # this method blocks
|
94
|
+
ensure
|
95
|
+
@_event_loop_running = false
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def shutdown
|
101
|
+
@_event_loop_mutex.synchronize do
|
102
|
+
@_event_loop_attached_watchers.reverse.each do |w|
|
103
|
+
if w.attached?
|
104
|
+
begin
|
105
|
+
w.detach
|
106
|
+
rescue => e
|
107
|
+
log.warn "unexpected error while detaching event loop watcher", error: e
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
super
|
114
|
+
end
|
115
|
+
|
116
|
+
def after_shutdown
|
117
|
+
timeout_at = Fluent::Clock.now + EVENT_LOOP_SHUTDOWN_TIMEOUT
|
118
|
+
@_event_loop_mutex.synchronize do
|
119
|
+
@_event_loop.watchers.reverse.each do |w|
|
120
|
+
begin
|
121
|
+
w.detach
|
122
|
+
rescue => e
|
123
|
+
log.warn "unexpected error while detaching event loop watcher", error: e
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
while @_event_loop_running
|
128
|
+
if Fluent::Clock.now >= timeout_at
|
129
|
+
log.warn "event loop does NOT exit until hard timeout."
|
130
|
+
raise "event loop does NOT exit until hard timeout." if @under_plugin_development
|
131
|
+
break
|
132
|
+
end
|
133
|
+
sleep 0.1
|
134
|
+
end
|
135
|
+
|
136
|
+
super
|
137
|
+
end
|
138
|
+
|
139
|
+
def close
|
140
|
+
if @_event_loop_running
|
141
|
+
begin
|
142
|
+
@_event_loop.stop # we cannot check loop is running or not
|
143
|
+
rescue RuntimeError => e
|
144
|
+
raise unless e.message == 'loop not running'
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
super
|
149
|
+
end
|
150
|
+
|
151
|
+
def terminate
|
152
|
+
@_event_loop = nil
|
153
|
+
@_event_loop_running = false
|
154
|
+
@_event_loop_mutex = nil
|
155
|
+
@_event_loop_run_timeout = nil
|
156
|
+
|
157
|
+
super
|
158
|
+
end
|
159
|
+
|
160
|
+
# watcher to block to run event loop until shutdown
|
161
|
+
class DefaultWatcher < Coolio::TimerWatcher
|
162
|
+
def initialize
|
163
|
+
super(1, true) # interval: 1, repeat: true
|
164
|
+
end
|
165
|
+
# do nothing
|
166
|
+
def on_timer; end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,104 @@
|
|
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/event'
|
18
|
+
require 'fluent/time'
|
19
|
+
require 'fluent/configurable'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module PluginHelper
|
23
|
+
module Extract
|
24
|
+
def extract_tag_from_record(record)
|
25
|
+
return nil unless @_extract_enabled
|
26
|
+
|
27
|
+
if @_extract_tag_key && record.has_key?(@_extract_tag_key)
|
28
|
+
v = @_extract_keep_tag_key ? record[@_extract_tag_key] : record.delete(@_extract_tag_key)
|
29
|
+
return v.to_s
|
30
|
+
end
|
31
|
+
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
|
35
|
+
def extract_time_from_record(record)
|
36
|
+
return nil unless @_extract_enabled
|
37
|
+
|
38
|
+
if @_extract_time_key && record.has_key?(@_extract_time_key)
|
39
|
+
v = @_extract_keep_time_key ? record[@_extract_time_key] : record.delete(@_extract_time_key)
|
40
|
+
return @_extract_time_parser.call(v)
|
41
|
+
end
|
42
|
+
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
|
46
|
+
module ExtractParams
|
47
|
+
include Fluent::Configurable
|
48
|
+
config_section :extract, required: false, multi: false, param_name: :extract_config do
|
49
|
+
config_param :tag_key, :string, default: nil
|
50
|
+
config_param :keep_tag_key, :bool, default: false
|
51
|
+
config_param :time_key, :string, default: nil
|
52
|
+
config_param :keep_time_key, :bool, default: false
|
53
|
+
|
54
|
+
# To avoid defining :time_type twice
|
55
|
+
config_param :time_type, :enum, list: [:float, :unixtime, :string], default: :float
|
56
|
+
|
57
|
+
Fluent::TimeMixin::TIME_PARAMETERS.each do |name, type, opts|
|
58
|
+
config_param name, type, opts
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.included(mod)
|
64
|
+
mod.include ExtractParams
|
65
|
+
end
|
66
|
+
|
67
|
+
def initialize
|
68
|
+
super
|
69
|
+
@_extract_enabled = false
|
70
|
+
@_extract_tag_key = nil
|
71
|
+
@_extract_keep_tag_key = nil
|
72
|
+
@_extract_time_key = nil
|
73
|
+
@_extract_keep_time_key = nil
|
74
|
+
@_extract_time_parser = nil
|
75
|
+
end
|
76
|
+
|
77
|
+
def configure(conf)
|
78
|
+
super
|
79
|
+
|
80
|
+
if @extract_config
|
81
|
+
@_extract_tag_key = @extract_config.tag_key
|
82
|
+
@_extract_keep_tag_key = @extract_config.keep_tag_key
|
83
|
+
@_extract_time_key = @extract_config.time_key
|
84
|
+
if @_extract_time_key
|
85
|
+
@_extract_keep_time_key = @extract_config.keep_time_key
|
86
|
+
@_extract_time_parser = case @extract_config.time_type
|
87
|
+
when :float then Fluent::NumericTimeParser.new(:float)
|
88
|
+
when :unixtime then Fluent::NumericTimeParser.new(:unixtime)
|
89
|
+
else
|
90
|
+
localtime = @extract_config.localtime && !@extract_config.utc
|
91
|
+
Fluent::TimeParser.new(@extract_config.time_format, localtime, @extract_config.timezone)
|
92
|
+
end
|
93
|
+
else
|
94
|
+
if @extract_config.time_format
|
95
|
+
log.warn "'time_format' specified without 'time_key', will be ignored"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
@_extract_enabled = @_extract_tag_key || @_extract_time_key
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,147 @@
|
|
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'
|
18
|
+
require 'fluent/plugin/formatter'
|
19
|
+
require 'fluent/config/element'
|
20
|
+
require 'fluent/configurable'
|
21
|
+
|
22
|
+
module Fluent
|
23
|
+
module PluginHelper
|
24
|
+
module Formatter
|
25
|
+
def formatter_create(usage: '', type: nil, conf: nil, default_type: nil)
|
26
|
+
formatter = @_formatters[usage]
|
27
|
+
return formatter if formatter && !type && !conf
|
28
|
+
|
29
|
+
type = if type
|
30
|
+
type
|
31
|
+
elsif conf && conf.respond_to?(:[])
|
32
|
+
raise Fluent::ConfigError, "@type is required in <format>" unless conf['@type']
|
33
|
+
conf['@type']
|
34
|
+
elsif default_type
|
35
|
+
default_type
|
36
|
+
else
|
37
|
+
raise ArgumentError, "BUG: both type and conf are not specified"
|
38
|
+
end
|
39
|
+
formatter = Fluent::Plugin.new_formatter(type, parent: self)
|
40
|
+
config = case conf
|
41
|
+
when Fluent::Config::Element
|
42
|
+
conf
|
43
|
+
when Hash
|
44
|
+
# in code, programmer may use symbols as keys, but Element needs strings
|
45
|
+
conf = Hash[conf.map{|k,v| [k.to_s, v]}]
|
46
|
+
Fluent::Config::Element.new('format', usage, conf, [])
|
47
|
+
when nil
|
48
|
+
Fluent::Config::Element.new('format', usage, {}, [])
|
49
|
+
else
|
50
|
+
raise ArgumentError, "BUG: conf must be a Element, Hash (or unspecified), but '#{conf.class}'"
|
51
|
+
end
|
52
|
+
formatter.configure(config)
|
53
|
+
if @_formatters_started
|
54
|
+
formatter.start
|
55
|
+
end
|
56
|
+
|
57
|
+
@_formatters[usage] = formatter
|
58
|
+
formatter
|
59
|
+
end
|
60
|
+
|
61
|
+
module FormatterParams
|
62
|
+
include Fluent::Configurable
|
63
|
+
# minimum section definition to instantiate formatter plugin instances
|
64
|
+
config_section :format, required: false, multi: true, init: true, param_name: :formatter_configs do
|
65
|
+
config_argument :usage, :string, default: ''
|
66
|
+
config_param :@type, :string # config_set_default required for :@type
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.included(mod)
|
71
|
+
mod.include FormatterParams
|
72
|
+
end
|
73
|
+
|
74
|
+
attr_reader :_formatters # for tests
|
75
|
+
|
76
|
+
def initialize
|
77
|
+
super
|
78
|
+
@_formatters_started = false
|
79
|
+
@_formatters = {} # usage => formatter
|
80
|
+
end
|
81
|
+
|
82
|
+
def configure(conf)
|
83
|
+
super
|
84
|
+
|
85
|
+
@formatter_configs.each do |section|
|
86
|
+
if @_formatters[section.usage]
|
87
|
+
raise Fluent::ConfigError, "duplicated formatter configured: #{section.usage}"
|
88
|
+
end
|
89
|
+
formatter = Plugin.new_formatter(section[:@type], parent: self)
|
90
|
+
formatter.configure(section.corresponding_config_element)
|
91
|
+
@_formatters[section.usage] = formatter
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def start
|
96
|
+
super
|
97
|
+
@_formatters_started = true
|
98
|
+
@_formatters.each_pair do |usage, formatter|
|
99
|
+
formatter.start
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def formatter_operate(method_name, &block)
|
104
|
+
@_formatters.each_pair do |usage, formatter|
|
105
|
+
begin
|
106
|
+
formatter.send(method_name)
|
107
|
+
block.call(formatter) if block_given?
|
108
|
+
rescue => e
|
109
|
+
log.error "unexpected error while #{method_name}", usage: usage, formatter: formatter, error: e
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def stop
|
115
|
+
super
|
116
|
+
formatter_operate(:stop)
|
117
|
+
end
|
118
|
+
|
119
|
+
def before_shutdown
|
120
|
+
formatter_operate(:before_shutdown)
|
121
|
+
super
|
122
|
+
end
|
123
|
+
|
124
|
+
def shutdown
|
125
|
+
formatter_operate(:shutdown)
|
126
|
+
super
|
127
|
+
end
|
128
|
+
|
129
|
+
def after_shutdown
|
130
|
+
formatter_operate(:after_shutdown)
|
131
|
+
super
|
132
|
+
end
|
133
|
+
|
134
|
+
def close
|
135
|
+
formatter_operate(:close)
|
136
|
+
super
|
137
|
+
end
|
138
|
+
|
139
|
+
def terminate
|
140
|
+
formatter_operate(:terminate)
|
141
|
+
@_formatters_started = false
|
142
|
+
@_formatters = {}
|
143
|
+
super
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,79 @@
|
|
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 'async/http/protocol'
|
18
|
+
require 'fluent/plugin_helper/http_server/methods'
|
19
|
+
require 'fluent/plugin_helper/http_server/request'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module PluginHelper
|
23
|
+
module HttpServer
|
24
|
+
class App
|
25
|
+
def initialize(router, logger)
|
26
|
+
@logger = logger
|
27
|
+
@router = router
|
28
|
+
end
|
29
|
+
|
30
|
+
# Required method by async-http
|
31
|
+
def call(request)
|
32
|
+
method = request.method
|
33
|
+
resp =
|
34
|
+
case method
|
35
|
+
when HttpServer::Methods::GET
|
36
|
+
get(request)
|
37
|
+
when HttpServer::Methods::HEAD
|
38
|
+
head(request)
|
39
|
+
when HttpServer::Methods::POST
|
40
|
+
post(request)
|
41
|
+
when HttpServer::Methods::PATCH
|
42
|
+
patch(request)
|
43
|
+
when HttpServer::Methods::PUT
|
44
|
+
put(request)
|
45
|
+
when HttpServer::Methods::DELETE
|
46
|
+
delete(request)
|
47
|
+
when HttpServer::Methods::OPTIONS
|
48
|
+
options(request)
|
49
|
+
when HttpServer::Methods::CONNECT
|
50
|
+
connect(request)
|
51
|
+
when HttpServer::Methods::TRACE
|
52
|
+
trace(request)
|
53
|
+
else
|
54
|
+
raise "Unknown method #{method}"
|
55
|
+
end
|
56
|
+
Protocol::HTTP::Response[*resp]
|
57
|
+
rescue => e
|
58
|
+
@logger.error(e)
|
59
|
+
Protocol::HTTP::Response[500, { 'Content-Type' => 'text/plain' }, 'Internal Server Error']
|
60
|
+
end
|
61
|
+
|
62
|
+
HttpServer::Methods::ALL.map { |e| e.downcase.to_sym }.each do |name|
|
63
|
+
define_method(name) do |request|
|
64
|
+
req = Request.new(request)
|
65
|
+
|
66
|
+
path = req.path
|
67
|
+
canonical_path =
|
68
|
+
if path.size >= 2 && !path.end_with?('/')
|
69
|
+
"#{path}/"
|
70
|
+
else
|
71
|
+
path
|
72
|
+
end
|
73
|
+
@router.route!(name, canonical_path, req)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|