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,13 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
-
require '
|
17
|
+
require 'fluent/plugin/input'
|
18
18
|
|
19
|
-
|
19
|
+
module Fluent::Plugin
|
20
|
+
class GCStatInput < Fluent::Plugin::Input
|
21
|
+
Fluent::Plugin.register_input('gc_stat', self)
|
20
22
|
|
21
|
-
|
22
|
-
class GCStatInput < Input
|
23
|
-
Plugin.register_input('gc_stat', self)
|
23
|
+
helpers :timer
|
24
24
|
|
25
25
|
def initialize
|
26
26
|
super
|
@@ -29,48 +29,26 @@ module Fluent
|
|
29
29
|
config_param :emit_interval, :time, default: 60
|
30
30
|
config_param :tag, :string
|
31
31
|
|
32
|
-
class TimerWatcher < Coolio::TimerWatcher
|
33
|
-
def initialize(interval, repeat, log, &callback)
|
34
|
-
@callback = callback
|
35
|
-
@log = log
|
36
|
-
super(interval, repeat)
|
37
|
-
end
|
38
|
-
|
39
|
-
def on_timer
|
40
|
-
@callback.call
|
41
|
-
rescue
|
42
|
-
# TODO log?
|
43
|
-
@log.error $!.to_s
|
44
|
-
@log.error_backtrace
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
32
|
def configure(conf)
|
49
33
|
super
|
50
34
|
end
|
51
35
|
|
52
|
-
def
|
53
|
-
|
54
|
-
@timer = TimerWatcher.new(@emit_interval, true, log, &method(:on_timer))
|
55
|
-
@loop.attach(@timer)
|
56
|
-
@thread = Thread.new(&method(:run))
|
36
|
+
def multi_workers_ready?
|
37
|
+
true
|
57
38
|
end
|
58
39
|
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
@
|
40
|
+
def start
|
41
|
+
super
|
42
|
+
|
43
|
+
timer_execute(:in_gc_stat, @emit_interval, &method(:on_timer))
|
63
44
|
end
|
64
45
|
|
65
|
-
def
|
66
|
-
|
67
|
-
rescue
|
68
|
-
log.error "unexpected error", error: $!.to_s
|
69
|
-
log.error_backtrace
|
46
|
+
def shutdown
|
47
|
+
super
|
70
48
|
end
|
71
49
|
|
72
50
|
def on_timer
|
73
|
-
now =
|
51
|
+
now = Fluent::EventTime.now
|
74
52
|
record = GC.stat
|
75
53
|
router.emit(@tag, now, record)
|
76
54
|
end
|
@@ -14,28 +14,29 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
+
require 'fluent/plugin/input'
|
18
|
+
require 'fluent/plugin/parser'
|
19
|
+
require 'fluent/event'
|
20
|
+
|
21
|
+
require 'http/parser'
|
22
|
+
require 'webrick/httputils'
|
17
23
|
require 'uri'
|
18
24
|
require 'socket'
|
19
25
|
require 'json'
|
20
26
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
27
|
+
module Fluent::Plugin
|
28
|
+
class InHttpParser < Parser
|
29
|
+
Fluent::Plugin.register_parser('in_http', self)
|
30
|
+
def parse(text)
|
31
|
+
# this plugin is dummy implementation not to raise error
|
32
|
+
yield nil, nil
|
33
|
+
end
|
34
|
+
end
|
26
35
|
|
27
|
-
module Fluent
|
28
36
|
class HttpInput < Input
|
29
|
-
Plugin.register_input('http', self)
|
30
|
-
|
31
|
-
include DetachMultiProcessMixin
|
32
|
-
|
33
|
-
require 'http/parser'
|
37
|
+
Fluent::Plugin.register_input('http', self)
|
34
38
|
|
35
|
-
|
36
|
-
require 'webrick/httputils'
|
37
|
-
super
|
38
|
-
end
|
39
|
+
helpers :parser, :compat_parameters, :event_loop, :server
|
39
40
|
|
40
41
|
EMPTY_GIF_IMAGE = "GIF89a\u0001\u0000\u0001\u0000\x80\xFF\u0000\xFF\xFF\xFF\u0000\u0000\u0000,\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0002\u0002D\u0001\u0000;".force_encoding("UTF-8")
|
41
42
|
|
@@ -52,25 +53,42 @@ module Fluent
|
|
52
53
|
config_param :add_http_headers, :bool, default: false
|
53
54
|
desc 'Add REMOTE_ADDR header to the record.'
|
54
55
|
config_param :add_remote_addr, :bool, default: false
|
55
|
-
desc 'The format of the HTTP body.'
|
56
|
-
config_param :format, :string, default: 'default'
|
57
56
|
config_param :blocking_timeout, :time, default: 0.5
|
58
57
|
desc 'Set a white list of domains that can do CORS (Cross-Origin Resource Sharing)'
|
59
58
|
config_param :cors_allow_origins, :array, default: nil
|
60
59
|
desc 'Respond with empty gif image of 1x1 pixel.'
|
61
60
|
config_param :respond_with_empty_img, :bool, default: false
|
62
61
|
|
62
|
+
config_section :parse do
|
63
|
+
config_set_default :@type, 'in_http'
|
64
|
+
end
|
65
|
+
|
66
|
+
EVENT_RECORD_PARAMETER = '_event_record'
|
67
|
+
|
63
68
|
def configure(conf)
|
69
|
+
compat_parameters_convert(conf, :parser)
|
70
|
+
|
64
71
|
super
|
65
72
|
|
66
|
-
m = if @
|
73
|
+
m = if @parser_configs.first['@type'] == 'in_http'
|
74
|
+
@parser_msgpack = parser_create(usage: 'parser_in_http_msgpack', type: 'msgpack')
|
75
|
+
@parser_msgpack.estimate_current_event = false
|
76
|
+
@parser_json = parser_create(usage: 'parser_in_http_json', type: 'json')
|
77
|
+
@parser_json.estimate_current_event = false
|
78
|
+
@format_name = 'default'
|
79
|
+
@parser_time_key = if parser_config = conf.elements('parse').first
|
80
|
+
parser_config['time_key'] || 'time'
|
81
|
+
else
|
82
|
+
'time'
|
83
|
+
end
|
67
84
|
method(:parse_params_default)
|
68
85
|
else
|
69
|
-
@parser =
|
70
|
-
@
|
86
|
+
@parser = parser_create
|
87
|
+
@format_name = @parser_configs.first['@type']
|
88
|
+
@parser_time_key = @parser.time_key
|
71
89
|
method(:parse_params_with_parser)
|
72
90
|
end
|
73
|
-
|
91
|
+
self.singleton_class.module_eval do
|
74
92
|
define_method(:parse_params, m)
|
75
93
|
end
|
76
94
|
end
|
@@ -99,39 +117,27 @@ module Fluent
|
|
99
117
|
end
|
100
118
|
end
|
101
119
|
|
102
|
-
def
|
103
|
-
|
104
|
-
lsock = TCPServer.new(@bind, @port)
|
105
|
-
|
106
|
-
detach_multi_process do
|
107
|
-
super
|
108
|
-
@km = KeepaliveManager.new(@keepalive_timeout)
|
109
|
-
#@lsock = Coolio::TCPServer.new(@bind, @port, Handler, @km, method(:on_request), @body_size_limit)
|
110
|
-
@lsock = Coolio::TCPServer.new(lsock, nil, Handler, @km, method(:on_request),
|
111
|
-
@body_size_limit, @format, log,
|
112
|
-
@cors_allow_origins)
|
113
|
-
@lsock.listen(@backlog) unless @backlog.nil?
|
114
|
-
|
115
|
-
@loop = Coolio::Loop.new
|
116
|
-
@loop.attach(@km)
|
117
|
-
@loop.attach(@lsock)
|
118
|
-
|
119
|
-
@thread = Thread.new(&method(:run))
|
120
|
-
end
|
120
|
+
def multi_workers_ready?
|
121
|
+
true
|
121
122
|
end
|
122
123
|
|
123
|
-
def
|
124
|
-
@
|
125
|
-
|
126
|
-
|
127
|
-
|
124
|
+
def start
|
125
|
+
@_event_loop_run_timeout = @blocking_timeout
|
126
|
+
|
127
|
+
super
|
128
|
+
|
129
|
+
log.debug "listening http", bind: @bind, port: @port
|
130
|
+
|
131
|
+
@km = KeepaliveManager.new(@keepalive_timeout)
|
132
|
+
event_loop_attach(@km)
|
133
|
+
|
134
|
+
server_create_connection(:in_http, @port, bind: @bind, backlog: @backlog, &method(:on_server_connect))
|
135
|
+
@float_time_parser = Fluent::NumericTimeParser.new(:float)
|
128
136
|
end
|
129
137
|
|
130
|
-
def
|
131
|
-
|
132
|
-
|
133
|
-
log.error "unexpected error", error: $!.to_s
|
134
|
-
log.error_backtrace
|
138
|
+
def close
|
139
|
+
server_wait_until_stop
|
140
|
+
super
|
135
141
|
end
|
136
142
|
|
137
143
|
def on_request(path_info, params)
|
@@ -142,10 +148,11 @@ module Fluent
|
|
142
148
|
|
143
149
|
# Skip nil record
|
144
150
|
if record.nil?
|
151
|
+
log.debug { "incoming event is invalid: path=#{path_info} params=#{params.to_json}" }
|
145
152
|
if @respond_with_empty_img
|
146
|
-
return ["200 OK", {'Content-
|
153
|
+
return ["200 OK", {'Content-Type'=>'image/gif; charset=utf-8'}, EMPTY_GIF_IMAGE]
|
147
154
|
else
|
148
|
-
return ["200 OK", {'Content-
|
155
|
+
return ["200 OK", {'Content-Type'=>'text/plain'}, ""]
|
149
156
|
end
|
150
157
|
end
|
151
158
|
|
@@ -162,20 +169,20 @@ module Fluent
|
|
162
169
|
end
|
163
170
|
end
|
164
171
|
time = if param_time = params['time']
|
165
|
-
param_time = param_time.
|
166
|
-
param_time.zero? ? Engine.now : param_time
|
172
|
+
param_time = param_time.to_f
|
173
|
+
param_time.zero? ? Fluent::Engine.now : @float_time_parser.parse(param_time)
|
167
174
|
else
|
168
|
-
record_time.nil? ? Engine.now : record_time
|
175
|
+
record_time.nil? ? Fluent::Engine.now : record_time
|
169
176
|
end
|
170
177
|
rescue
|
171
|
-
return ["400 Bad Request", {'Content-
|
178
|
+
return ["400 Bad Request", {'Content-Type'=>'text/plain'}, "400 Bad Request\n#{$!}\n"]
|
172
179
|
end
|
173
180
|
|
174
181
|
# TODO server error
|
175
182
|
begin
|
176
183
|
# Support batched requests
|
177
184
|
if record.is_a?(Array)
|
178
|
-
mes = MultiEventStream.new
|
185
|
+
mes = Fluent::MultiEventStream.new
|
179
186
|
record.each do |single_record|
|
180
187
|
if @add_http_headers
|
181
188
|
params.each_pair { |k,v|
|
@@ -187,7 +194,18 @@ module Fluent
|
|
187
194
|
if @add_remote_addr
|
188
195
|
single_record['REMOTE_ADDR'] = params['REMOTE_ADDR']
|
189
196
|
end
|
190
|
-
|
197
|
+
|
198
|
+
if defined? @parser
|
199
|
+
single_time = @parser.parse_time(single_record)
|
200
|
+
single_time, single_record = @parser.convert_values(single_time, single_record)
|
201
|
+
else
|
202
|
+
single_time = if t = single_record.delete(@parser_time_key)
|
203
|
+
Fluent::EventTime.from_time(Time.at(t))
|
204
|
+
else
|
205
|
+
time
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
191
209
|
mes.add(single_time, single_record)
|
192
210
|
end
|
193
211
|
router.emit_stream(tag, mes)
|
@@ -195,35 +213,52 @@ module Fluent
|
|
195
213
|
router.emit(tag, time, record)
|
196
214
|
end
|
197
215
|
rescue
|
198
|
-
return ["500 Internal Server Error", {'Content-
|
216
|
+
return ["500 Internal Server Error", {'Content-Type'=>'text/plain'}, "500 Internal Server Error\n#{$!}\n"]
|
199
217
|
end
|
200
218
|
|
201
219
|
if @respond_with_empty_img
|
202
|
-
return ["200 OK", {'Content-
|
220
|
+
return ["200 OK", {'Content-Type'=>'image/gif; charset=utf-8'}, EMPTY_GIF_IMAGE]
|
203
221
|
else
|
204
|
-
return ["200 OK", {'Content-
|
222
|
+
return ["200 OK", {'Content-Type'=>'text/plain'}, ""]
|
205
223
|
end
|
206
224
|
end
|
207
225
|
|
208
226
|
private
|
209
227
|
|
210
|
-
def
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
228
|
+
def on_server_connect(conn)
|
229
|
+
handler = Handler.new(conn, @km, method(:on_request), @body_size_limit, @format_name, log, @cors_allow_origins)
|
230
|
+
|
231
|
+
conn.on(:data) do |data|
|
232
|
+
handler.on_read(data)
|
233
|
+
end
|
234
|
+
|
235
|
+
conn.on(:write_complete) do |_|
|
236
|
+
handler.on_write_complete
|
237
|
+
end
|
238
|
+
|
239
|
+
conn.on(:close) do |_|
|
240
|
+
handler.on_close
|
241
|
+
end
|
219
242
|
end
|
220
243
|
|
221
|
-
|
244
|
+
def parse_params_default(params)
|
245
|
+
if msgpack = params['msgpack']
|
246
|
+
@parser_msgpack.parse(msgpack) do |_time, record|
|
247
|
+
return nil, record
|
248
|
+
end
|
249
|
+
elsif js = params['json']
|
250
|
+
@parser_json.parse(js) do |_time, record|
|
251
|
+
return nil, record
|
252
|
+
end
|
253
|
+
else
|
254
|
+
raise "'json' or 'msgpack' parameter is required"
|
255
|
+
end
|
256
|
+
end
|
222
257
|
|
223
258
|
def parse_params_with_parser(params)
|
224
259
|
if content = params[EVENT_RECORD_PARAMETER]
|
225
260
|
@parser.parse(content) { |time, record|
|
226
|
-
raise "Received event is not #{@
|
261
|
+
raise "Received event is not #{@format_name}: #{content}" if record.nil?
|
227
262
|
return time, record
|
228
263
|
}
|
229
264
|
else
|
@@ -231,20 +266,23 @@ module Fluent
|
|
231
266
|
end
|
232
267
|
end
|
233
268
|
|
234
|
-
class Handler
|
235
|
-
|
236
|
-
|
269
|
+
class Handler
|
270
|
+
attr_reader :content_type
|
271
|
+
|
272
|
+
def initialize(io, km, callback, body_size_limit, format_name, log, cors_allow_origins)
|
273
|
+
@io = io
|
237
274
|
@km = km
|
238
275
|
@callback = callback
|
239
276
|
@body_size_limit = body_size_limit
|
240
277
|
@next_close = false
|
241
|
-
@
|
278
|
+
@format_name = format_name
|
242
279
|
@log = log
|
243
280
|
@cors_allow_origins = cors_allow_origins
|
244
281
|
@idle = 0
|
245
282
|
@km.add(self)
|
246
283
|
|
247
|
-
@remote_port, @remote_addr =
|
284
|
+
@remote_port, @remote_addr = io.remote_port, io.remote_addr
|
285
|
+
@parser = Http::Parser.new(self)
|
248
286
|
end
|
249
287
|
|
250
288
|
def step_idle
|
@@ -255,17 +293,13 @@ module Fluent
|
|
255
293
|
@km.delete(self)
|
256
294
|
end
|
257
295
|
|
258
|
-
def on_connect
|
259
|
-
@parser = Http::Parser.new(self)
|
260
|
-
end
|
261
|
-
|
262
296
|
def on_read(data)
|
263
297
|
@idle = 0
|
264
298
|
@parser << data
|
265
299
|
rescue
|
266
300
|
@log.warn "unexpected error", error: $!.to_s
|
267
301
|
@log.warn_backtrace
|
268
|
-
close
|
302
|
+
@io.close
|
269
303
|
end
|
270
304
|
|
271
305
|
def on_message_begin
|
@@ -283,6 +317,7 @@ module Fluent
|
|
283
317
|
end
|
284
318
|
@env = {}
|
285
319
|
@content_type = ""
|
320
|
+
@content_encoding = ""
|
286
321
|
headers.each_pair {|k,v|
|
287
322
|
@env["HTTP_#{k.gsub('-','_').upcase}"] = v
|
288
323
|
case k
|
@@ -292,6 +327,8 @@ module Fluent
|
|
292
327
|
size = v.to_i
|
293
328
|
when /Content-Type/i
|
294
329
|
@content_type = v
|
330
|
+
when /Content-Encoding/i
|
331
|
+
@content_encoding = v
|
295
332
|
when /Connection/i
|
296
333
|
if v =~ /close/i
|
297
334
|
@keep_alive = false
|
@@ -304,6 +341,10 @@ module Fluent
|
|
304
341
|
# For multiple X-Forwarded-For headers. Use first header value.
|
305
342
|
v = v.first if v.is_a?(Array)
|
306
343
|
@remote_addr = v.split(",").first
|
344
|
+
when /Access-Control-Request-Method/i
|
345
|
+
@access_control_request_method = v
|
346
|
+
when /Access-Control-Request-Headers/i
|
347
|
+
@access_control_request_headers = v
|
307
348
|
end
|
308
349
|
}
|
309
350
|
if expect
|
@@ -329,26 +370,76 @@ module Fluent
|
|
329
370
|
@body << chunk
|
330
371
|
end
|
331
372
|
|
373
|
+
# Web browsers can send an OPTIONS request before performing POST
|
374
|
+
# to check if cross-origin requests are supported.
|
375
|
+
def handle_options_request
|
376
|
+
# Is CORS enabled in the first place?
|
377
|
+
if @cors_allow_origins.nil?
|
378
|
+
return send_response_and_close("403 Forbidden", {}, "")
|
379
|
+
end
|
380
|
+
|
381
|
+
# in_http does not support HTTP methods except POST
|
382
|
+
if @access_control_request_method != 'POST'
|
383
|
+
return send_response_and_close("403 Forbidden", {}, "")
|
384
|
+
end
|
385
|
+
|
386
|
+
header = {
|
387
|
+
"Access-Control-Allow-Methods" => "POST",
|
388
|
+
"Access-Control-Allow-Headers" => @access_control_request_headers || "",
|
389
|
+
}
|
390
|
+
|
391
|
+
# Check the origin and send back a CORS response
|
392
|
+
if @cors_allow_origins.include?('*')
|
393
|
+
header["Access-Control-Allow-Origin"] = "*"
|
394
|
+
send_response_and_close("200 OK", header, "")
|
395
|
+
elsif include_cors_allow_origin
|
396
|
+
header["Access-Control-Allow-Origin"] = @origin
|
397
|
+
send_response_and_close("200 OK", header, "")
|
398
|
+
else
|
399
|
+
send_response_and_close("403 Forbidden", {}, "")
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
332
403
|
def on_message_complete
|
333
404
|
return if closing?
|
334
405
|
|
406
|
+
if @parser.http_method == 'OPTIONS'
|
407
|
+
return handle_options_request()
|
408
|
+
end
|
409
|
+
|
335
410
|
# CORS check
|
336
411
|
# ==========
|
337
412
|
# For every incoming request, we check if we have some CORS
|
338
413
|
# restrictions and white listed origins through @cors_allow_origins.
|
339
414
|
unless @cors_allow_origins.nil?
|
340
|
-
unless @cors_allow_origins.include?(
|
415
|
+
unless @cors_allow_origins.include?('*') or include_cors_allow_origin
|
341
416
|
send_response_and_close("403 Forbidden", {'Connection' => 'close'}, "")
|
342
417
|
return
|
343
418
|
end
|
344
419
|
end
|
345
420
|
|
421
|
+
# Content Encoding
|
422
|
+
# =================
|
423
|
+
# Decode payload according to the "Content-Encoding" header.
|
424
|
+
# For now, we only support 'gzip' and 'deflate'.
|
425
|
+
begin
|
426
|
+
if @content_encoding == 'gzip'
|
427
|
+
@body = Zlib::GzipReader.new(StringIO.new(@body)).read
|
428
|
+
elsif @content_encoding == 'deflate'
|
429
|
+
@body = Zlib::Inflate.inflate(@body)
|
430
|
+
end
|
431
|
+
rescue
|
432
|
+
@log.warn 'fails to decode payload', error: $!.to_s
|
433
|
+
send_response_and_close("400 Bad Request", {}, "")
|
434
|
+
return
|
435
|
+
end
|
436
|
+
|
346
437
|
@env['REMOTE_ADDR'] = @remote_addr if @remote_addr
|
347
438
|
|
348
439
|
uri = URI.parse(@parser.request_url)
|
349
440
|
params = WEBrick::HTTPUtils.parse_query(uri.query)
|
350
441
|
|
351
|
-
if @
|
442
|
+
if @format_name != 'default'
|
352
443
|
params[EVENT_RECORD_PARAMETER] = @body
|
353
444
|
elsif @content_type =~ /^application\/x-www-form-urlencoded/
|
354
445
|
params.update WEBrick::HTTPUtils.parse_query(@body)
|
@@ -368,7 +459,14 @@ module Fluent
|
|
368
459
|
code, header, body = *@callback.call(path_info, params)
|
369
460
|
body = body.to_s
|
370
461
|
|
371
|
-
|
462
|
+
unless @cors_allow_origins.nil?
|
463
|
+
if @cors_allow_origins.include?('*')
|
464
|
+
header['Access-Control-Allow-Origin'] = '*'
|
465
|
+
elsif include_cors_allow_origin
|
466
|
+
header['Access-Control-Allow-Origin'] = @origin
|
467
|
+
end
|
468
|
+
end
|
469
|
+
|
372
470
|
if @keep_alive
|
373
471
|
header['Connection'] = 'Keep-Alive'
|
374
472
|
send_response(code, header, body)
|
@@ -377,8 +475,12 @@ module Fluent
|
|
377
475
|
end
|
378
476
|
end
|
379
477
|
|
478
|
+
def close
|
479
|
+
@io.close
|
480
|
+
end
|
481
|
+
|
380
482
|
def on_write_complete
|
381
|
-
close if @next_close
|
483
|
+
@io.close if @next_close
|
382
484
|
end
|
383
485
|
|
384
486
|
def send_response_and_close(code, header, body)
|
@@ -391,17 +493,17 @@ module Fluent
|
|
391
493
|
end
|
392
494
|
|
393
495
|
def send_response(code, header, body)
|
394
|
-
header['Content-
|
395
|
-
header['Content-
|
496
|
+
header['Content-Length'] ||= body.bytesize
|
497
|
+
header['Content-Type'] ||= 'text/plain'
|
396
498
|
|
397
499
|
data = %[HTTP/1.1 #{code}\r\n]
|
398
500
|
header.each_pair {|k,v|
|
399
501
|
data << "#{k}: #{v}\r\n"
|
400
502
|
}
|
401
503
|
data << "\r\n"
|
402
|
-
write
|
504
|
+
@io.write(data)
|
403
505
|
|
404
|
-
write
|
506
|
+
@io.write(body)
|
405
507
|
end
|
406
508
|
|
407
509
|
def send_response_nobody(code, header)
|
@@ -410,7 +512,18 @@ module Fluent
|
|
410
512
|
data << "#{k}: #{v}\r\n"
|
411
513
|
}
|
412
514
|
data << "\r\n"
|
413
|
-
write
|
515
|
+
@io.write(data)
|
516
|
+
end
|
517
|
+
|
518
|
+
def include_cors_allow_origin
|
519
|
+
if @cors_allow_origins.include?(@origin)
|
520
|
+
return true
|
521
|
+
end
|
522
|
+
filtered_cors_allow_origins = @cors_allow_origins.select {|origin| origin != ""}
|
523
|
+
return filtered_cors_allow_origins.find do |origin|
|
524
|
+
(start_str,end_str) = origin.split("*",2)
|
525
|
+
@origin.start_with?(start_str) and @origin.end_with?(end_str)
|
526
|
+
end != nil
|
414
527
|
end
|
415
528
|
end
|
416
529
|
end
|