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/formatter'
|
18
|
+
require 'fluent/time'
|
19
|
+
require 'yajl'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module Plugin
|
23
|
+
class OutFileFormatter < Formatter
|
24
|
+
Plugin.register_formatter('out_file', self)
|
25
|
+
|
26
|
+
config_param :output_time, :bool, default: true
|
27
|
+
config_param :output_tag, :bool, default: true
|
28
|
+
config_param :delimiter, default: "\t" do |val|
|
29
|
+
case val
|
30
|
+
when /SPACE/i then ' '
|
31
|
+
when /COMMA/i then ','
|
32
|
+
else "\t"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
config_set_default :time_type, :string
|
36
|
+
config_set_default :time_format, nil # time_format nil => iso8601
|
37
|
+
|
38
|
+
def configure(conf)
|
39
|
+
super
|
40
|
+
@timef = time_formatter_create
|
41
|
+
end
|
42
|
+
|
43
|
+
def format(tag, time, record)
|
44
|
+
header = ''
|
45
|
+
header << "#{@timef.format(time)}#{@delimiter}" if @output_time
|
46
|
+
header << "#{tag}#{@delimiter}" if @output_tag
|
47
|
+
"#{header}#{Yajl.dump(record)}\n"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,34 @@
|
|
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/formatter'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Plugin
|
21
|
+
class SingleValueFormatter < Formatter
|
22
|
+
Plugin.register_formatter('single_value', self)
|
23
|
+
|
24
|
+
config_param :message_key, :string, default: 'message'
|
25
|
+
config_param :add_newline, :bool, default: true
|
26
|
+
|
27
|
+
def format(tag, time, record)
|
28
|
+
text = record[@message_key].to_s.dup
|
29
|
+
text << "\n" if @add_newline
|
30
|
+
text
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,76 @@
|
|
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/formatter'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Plugin
|
21
|
+
class StdoutFormatter < Formatter
|
22
|
+
Plugin.register_formatter('stdout', self)
|
23
|
+
|
24
|
+
TIME_FORMAT = '%Y-%m-%d %H:%M:%S.%N %z'
|
25
|
+
|
26
|
+
config_param :output_type, :string, default: 'json'
|
27
|
+
|
28
|
+
def configure(conf)
|
29
|
+
super
|
30
|
+
|
31
|
+
@time_formatter = Strftime.new(TIME_FORMAT)
|
32
|
+
@sub_formatter = Plugin.new_formatter(@output_type, parent: self.owner)
|
33
|
+
@sub_formatter.configure(conf)
|
34
|
+
end
|
35
|
+
|
36
|
+
def start
|
37
|
+
super
|
38
|
+
@sub_formatter.start
|
39
|
+
end
|
40
|
+
|
41
|
+
def format(tag, time, record)
|
42
|
+
"#{@time_formatter.exec(Time.at(time).localtime)} #{tag}: #{@sub_formatter.format(tag, time, record).chomp}\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
def stop
|
46
|
+
@sub_formatter.stop
|
47
|
+
super
|
48
|
+
end
|
49
|
+
|
50
|
+
def before_shutdown
|
51
|
+
@sub_formatter.before_shutdown
|
52
|
+
super
|
53
|
+
end
|
54
|
+
|
55
|
+
def shutdown
|
56
|
+
@sub_formatter.shutdown
|
57
|
+
super
|
58
|
+
end
|
59
|
+
|
60
|
+
def after_shutdown
|
61
|
+
@sub_formatter.after_shutdown
|
62
|
+
super
|
63
|
+
end
|
64
|
+
|
65
|
+
def close
|
66
|
+
@sub_formatter.close
|
67
|
+
super
|
68
|
+
end
|
69
|
+
|
70
|
+
def terminate
|
71
|
+
@sub_formatter.terminate
|
72
|
+
super
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,38 @@
|
|
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/formatter'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Plugin
|
21
|
+
class TSVFormatter < Formatter
|
22
|
+
Plugin.register_formatter('tsv', self)
|
23
|
+
|
24
|
+
desc 'Field names included in each lines'
|
25
|
+
config_param :keys, :array, value_type: :string
|
26
|
+
desc 'The delimiter character (or string) of TSV values'
|
27
|
+
config_param :delimiter, :string, default: "\t"
|
28
|
+
desc 'The parameter to enable writing to new lines'
|
29
|
+
config_param :add_newline, :bool, default: true
|
30
|
+
|
31
|
+
def format(tag, time, record)
|
32
|
+
formatted = @keys.map{|k| record[k].to_s }.join(@delimiter)
|
33
|
+
formatted << "\n".freeze if @add_newline
|
34
|
+
formatted
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -14,11 +14,11 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
-
require 'fluent/input'
|
17
|
+
require 'fluent/plugin/input'
|
18
18
|
|
19
|
-
module Fluent
|
19
|
+
module Fluent::Plugin
|
20
20
|
class DebugAgentInput < Input
|
21
|
-
Plugin.register_input('debug_agent', self)
|
21
|
+
Fluent::Plugin.register_input('debug_agent', self)
|
22
22
|
|
23
23
|
def initialize
|
24
24
|
require 'drb/drb'
|
@@ -30,31 +30,42 @@ module Fluent
|
|
30
30
|
config_param :port, :integer, default: 24230
|
31
31
|
config_param :unix_path, :string, default: nil
|
32
32
|
#config_param :unix_mode # TODO
|
33
|
-
config_param :object, :string, default: 'Engine'
|
33
|
+
config_param :object, :string, default: 'Fluent::Engine'
|
34
34
|
|
35
35
|
def configure(conf)
|
36
36
|
super
|
37
|
+
if system_config.workers > 1
|
38
|
+
@port += fluentd_worker_id
|
39
|
+
end
|
37
40
|
if @unix_path
|
38
41
|
unless ::Fluent::FileUtil.writable?(@unix_path)
|
39
|
-
raise ConfigError, "in_debug_agent: `#{@unix_path}` is not writable"
|
42
|
+
raise Fluent::ConfigError, "in_debug_agent: `#{@unix_path}` is not writable"
|
40
43
|
end
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
47
|
+
def multi_workers_ready?
|
48
|
+
@unix_path.nil?
|
49
|
+
end
|
50
|
+
|
44
51
|
def start
|
52
|
+
super
|
53
|
+
|
45
54
|
if @unix_path
|
46
55
|
require 'drb/unix'
|
47
56
|
uri = "drbunix:#{@unix_path}"
|
48
57
|
else
|
49
58
|
uri = "druby://#{@bind}:#{@port}"
|
50
59
|
end
|
51
|
-
log.info "listening dRuby", uri: uri, object: @object
|
60
|
+
log.info "listening dRuby", uri: uri, object: @object, worker: fluentd_worker_id
|
52
61
|
obj = eval(@object)
|
53
62
|
@server = DRb::DRbServer.new(uri, obj)
|
54
63
|
end
|
55
64
|
|
56
65
|
def shutdown
|
57
66
|
@server.stop_service if @server
|
67
|
+
|
68
|
+
super
|
58
69
|
end
|
59
70
|
end
|
60
71
|
end
|
@@ -16,30 +16,37 @@
|
|
16
16
|
|
17
17
|
require 'json'
|
18
18
|
|
19
|
-
require 'fluent/input'
|
19
|
+
require 'fluent/plugin/input'
|
20
20
|
require 'fluent/config/error'
|
21
21
|
|
22
|
-
module Fluent
|
22
|
+
module Fluent::Plugin
|
23
23
|
class DummyInput < Input
|
24
24
|
Fluent::Plugin.register_input('dummy', self)
|
25
25
|
|
26
|
+
helpers :thread, :storage
|
27
|
+
|
26
28
|
BIN_NUM = 10
|
29
|
+
DEFAULT_STORAGE_TYPE = 'local'
|
27
30
|
|
28
31
|
desc "The value is the tag assigned to the generated events."
|
29
32
|
config_param :tag, :string
|
33
|
+
desc "The number of events in event stream of each emits."
|
34
|
+
config_param :size, :integer, default: 1
|
30
35
|
desc "It configures how many events to generate per second."
|
31
36
|
config_param :rate, :integer, default: 1
|
32
37
|
desc "If specified, each generated event has an auto-incremented key field."
|
33
38
|
config_param :auto_increment_key, :string, default: nil
|
39
|
+
desc "The boolean to suspend-and-resume incremental value after restart"
|
40
|
+
config_param :suspend, :bool, default: false
|
34
41
|
desc "The dummy data to be generated. An array of JSON hashes or a single JSON hash."
|
35
42
|
config_param :dummy, default: [{"message"=>"dummy"}] do |val|
|
36
43
|
begin
|
37
44
|
parsed = JSON.parse(val)
|
38
|
-
rescue JSON::ParserError =>
|
45
|
+
rescue JSON::ParserError => ex
|
39
46
|
# Fluent::ConfigParseError, "got incomplete JSON" will be raised
|
40
47
|
# at literal_parser.rb with --use-v1-config, but I had to
|
41
48
|
# take care at here for the case of --use-v0-config.
|
42
|
-
raise Fluent::ConfigError, "#{
|
49
|
+
raise Fluent::ConfigError, "#{ex.class}: #{ex.message}"
|
43
50
|
end
|
44
51
|
dummy = parsed.is_a?(Array) ? parsed : [parsed]
|
45
52
|
dummy.each_with_index do |e, i|
|
@@ -48,56 +55,76 @@ module Fluent
|
|
48
55
|
dummy
|
49
56
|
end
|
50
57
|
|
51
|
-
def
|
58
|
+
def initialize
|
52
59
|
super
|
60
|
+
@storage = nil
|
61
|
+
end
|
53
62
|
|
54
|
-
|
63
|
+
def configure(conf)
|
64
|
+
super
|
55
65
|
@dummy_index = 0
|
66
|
+
config = conf.elements.select{|e| e.name == 'storage' }.first
|
67
|
+
@storage = storage_create(usage: 'suspend', conf: config, default_type: DEFAULT_STORAGE_TYPE)
|
68
|
+
end
|
69
|
+
|
70
|
+
def multi_workers_ready?
|
71
|
+
true
|
56
72
|
end
|
57
73
|
|
58
74
|
def start
|
59
75
|
super
|
60
|
-
@running = true
|
61
|
-
@thread = Thread.new(&method(:run))
|
62
|
-
end
|
63
76
|
|
64
|
-
|
65
|
-
@
|
66
|
-
|
77
|
+
@storage.put(:increment_value, 0) unless @storage.get(:increment_value)
|
78
|
+
@storage.put(:dummy_index, 0) unless @storage.get(:dummy_index)
|
79
|
+
|
80
|
+
if @auto_increment_key && !@storage.get(:auto_increment_value)
|
81
|
+
@storage.put(:auto_increment_value, -1)
|
82
|
+
end
|
83
|
+
|
84
|
+
thread_create(:dummy_input, &method(:run))
|
67
85
|
end
|
68
86
|
|
69
87
|
def run
|
70
88
|
batch_num = (@rate / BIN_NUM).to_i
|
71
89
|
residual_num = (@rate % BIN_NUM)
|
72
|
-
while
|
90
|
+
while thread_current_running?
|
73
91
|
current_time = Time.now.to_i
|
74
92
|
BIN_NUM.times do
|
75
|
-
break unless (
|
93
|
+
break unless (thread_current_running? && Time.now.to_i <= current_time)
|
76
94
|
wait(0.1) { emit(batch_num) }
|
77
95
|
end
|
78
|
-
emit(residual_num)
|
96
|
+
emit(residual_num) if thread_current_running?
|
79
97
|
# wait for next second
|
80
|
-
while
|
98
|
+
while thread_current_running? && Time.now.to_i <= current_time
|
81
99
|
sleep 0.01
|
82
100
|
end
|
83
101
|
end
|
84
102
|
end
|
85
103
|
|
86
104
|
def emit(num)
|
87
|
-
|
105
|
+
begin
|
106
|
+
if @size > 1
|
107
|
+
num.times do
|
108
|
+
router.emit_array(@tag, Array.new(@size) { [Fluent::Engine.now, generate] })
|
109
|
+
end
|
110
|
+
else
|
111
|
+
num.times { router.emit(@tag, Fluent::Engine.now, generate) }
|
112
|
+
end
|
113
|
+
rescue => _
|
114
|
+
# ignore all errors not to stop emits by emit errors
|
115
|
+
end
|
88
116
|
end
|
89
117
|
|
90
118
|
def generate
|
91
119
|
d = @dummy[@dummy_index]
|
92
120
|
unless d
|
93
121
|
@dummy_index = 0
|
94
|
-
d = @dummy[
|
122
|
+
d = @dummy[@dummy_index]
|
95
123
|
end
|
96
124
|
@dummy_index += 1
|
97
125
|
if @auto_increment_key
|
98
126
|
d = d.dup
|
99
|
-
d[@auto_increment_key] = @
|
100
|
-
@increment_value += 1
|
127
|
+
d[@auto_increment_key] = @storage.update(:auto_increment_value){|v| v + 1 }
|
101
128
|
end
|
102
129
|
d
|
103
130
|
end
|
@@ -14,163 +14,95 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
+
require 'fluent/plugin/input'
|
17
18
|
require 'yajl'
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
require 'fluent/config/error'
|
20
|
+
module Fluent::Plugin
|
21
|
+
class ExecInput < Fluent::Plugin::Input
|
22
|
+
Fluent::Plugin.register_input('exec', self)
|
23
23
|
|
24
|
-
|
25
|
-
class ExecInput < Input
|
26
|
-
Plugin.register_input('exec', self)
|
27
|
-
|
28
|
-
def initialize
|
29
|
-
super
|
30
|
-
require 'fluent/plugin/exec_util'
|
31
|
-
end
|
24
|
+
helpers :compat_parameters, :extract, :parser, :child_process
|
32
25
|
|
33
26
|
desc 'The command (program) to execute.'
|
34
27
|
config_param :command, :string
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
28
|
+
|
29
|
+
config_section :parse do
|
30
|
+
config_set_default :@type, 'tsv'
|
31
|
+
config_set_default :time_type, :float
|
32
|
+
config_set_default :time_key, nil
|
33
|
+
config_set_default :estimate_current_event, false
|
34
|
+
end
|
35
|
+
|
36
|
+
config_section :extract do
|
37
|
+
config_set_default :time_type, :float
|
40
38
|
end
|
39
|
+
|
41
40
|
desc 'Tag of the output events.'
|
42
41
|
config_param :tag, :string, default: nil
|
43
|
-
desc 'The key to use as the event tag instead of the value in the event record. '
|
44
|
-
config_param :tag_key, :string, default: nil
|
45
|
-
desc 'The key to use as the event time instead of the value in the event record.'
|
46
|
-
config_param :time_key, :string, default: nil
|
47
|
-
desc 'The format of the event time used for the time_key parameter.'
|
48
|
-
config_param :time_format, :string, default: nil
|
49
42
|
desc 'The interval time between periodic program runs.'
|
50
43
|
config_param :run_interval, :time, default: nil
|
44
|
+
desc 'The default block size to read if parser requires partial read.'
|
45
|
+
config_param :read_block_size, :size, default: 10240 # 10k
|
51
46
|
|
52
|
-
|
53
|
-
super
|
54
|
-
|
55
|
-
if localtime = conf['localtime']
|
56
|
-
@localtime = true
|
57
|
-
elsif utc = conf['utc']
|
58
|
-
@localtime = false
|
59
|
-
end
|
47
|
+
attr_reader :parser
|
60
48
|
|
61
|
-
|
62
|
-
|
63
|
-
|
49
|
+
def configure(conf)
|
50
|
+
compat_parameters_convert(conf, :extract, :parser)
|
51
|
+
['parse', 'extract'].each do |subsection_name|
|
52
|
+
if subsection = conf.elements(subsection_name).first
|
53
|
+
if subsection.has_key?('time_format')
|
54
|
+
subsection['time_type'] ||= 'string'
|
55
|
+
end
|
56
|
+
end
|
64
57
|
end
|
65
58
|
|
66
|
-
|
67
|
-
raise ConfigError, "'tag' or 'tag_key' option is required on exec input"
|
68
|
-
end
|
59
|
+
super
|
69
60
|
|
70
|
-
if
|
71
|
-
|
72
|
-
f = @time_format
|
73
|
-
@time_parse_proc = Proc.new {|str| Time.strptime(str, f).to_i }
|
74
|
-
else
|
75
|
-
@time_parse_proc = Proc.new {|str| str.to_i }
|
76
|
-
end
|
61
|
+
if !@tag && (!@extract_config || !@extract_config.tag_key)
|
62
|
+
raise Fluent::ConfigError, "'tag' or 'tag_key' option is required on exec input"
|
77
63
|
end
|
78
|
-
|
79
|
-
@parser = setup_parser(conf)
|
64
|
+
@parser = parser_create
|
80
65
|
end
|
81
66
|
|
82
|
-
def
|
83
|
-
|
84
|
-
when 'tsv'
|
85
|
-
if @keys.empty?
|
86
|
-
raise ConfigError, "keys option is required on exec input for tsv format"
|
87
|
-
end
|
88
|
-
ExecUtil::TSVParser.new(@keys, method(:on_message))
|
89
|
-
when 'json'
|
90
|
-
ExecUtil::JSONParser.new(method(:on_message))
|
91
|
-
when 'msgpack'
|
92
|
-
ExecUtil::MessagePackParser.new(method(:on_message))
|
93
|
-
else
|
94
|
-
ExecUtil::TextParserWrapperParser.new(conf, method(:on_message))
|
95
|
-
end
|
67
|
+
def multi_workers_ready?
|
68
|
+
true
|
96
69
|
end
|
97
70
|
|
98
71
|
def start
|
99
|
-
|
100
|
-
@finished = false
|
101
|
-
@thread = Thread.new(&method(:run_periodic))
|
102
|
-
else
|
103
|
-
@io = IO.popen(@command, "r")
|
104
|
-
@pid = @io.pid
|
105
|
-
@thread = Thread.new(&method(:run))
|
106
|
-
end
|
107
|
-
end
|
72
|
+
super
|
108
73
|
|
109
|
-
def shutdown
|
110
74
|
if @run_interval
|
111
|
-
@
|
112
|
-
# call Thread#run which interupts sleep in order to stop run_periodic thread immediately.
|
113
|
-
@thread.run
|
114
|
-
@thread.join
|
75
|
+
child_process_execute(:exec_input, @command, interval: @run_interval, mode: [:read], &method(:run))
|
115
76
|
else
|
116
|
-
|
117
|
-
Process.kill(:TERM, @pid)
|
118
|
-
rescue #Errno::ECHILD, Errno::ESRCH, Errno::EPERM
|
119
|
-
end
|
120
|
-
if @thread.join(60) # TODO wait time
|
121
|
-
return
|
122
|
-
end
|
123
|
-
|
124
|
-
begin
|
125
|
-
Process.kill(:KILL, @pid)
|
126
|
-
rescue #Errno::ECHILD, Errno::ESRCH, Errno::EPERM
|
127
|
-
end
|
128
|
-
@thread.join
|
77
|
+
child_process_execute(:exec_input, @command, immediate: true, mode: [:read], &method(:run))
|
129
78
|
end
|
130
79
|
end
|
131
80
|
|
132
|
-
def run
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
begin
|
140
|
-
io = IO.popen(@command, "r")
|
141
|
-
@parser.call(io)
|
142
|
-
Process.waitpid(io.pid)
|
143
|
-
rescue
|
144
|
-
log.error "exec failed to run or shutdown child process", error: $!.to_s, error_class: $!.class.to_s
|
145
|
-
log.warn_backtrace $!.backtrace
|
146
|
-
ensure
|
147
|
-
sleep @run_interval
|
81
|
+
def run(io)
|
82
|
+
case
|
83
|
+
when @parser.implement?(:parse_io)
|
84
|
+
@parser.parse_io(io, &method(:on_record))
|
85
|
+
when @parser.implement?(:parse_partial_data)
|
86
|
+
until io.eof?
|
87
|
+
@parser.parse_partial_data(io.readpartial(@read_block_size), &method(:on_record))
|
148
88
|
end
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
private
|
153
|
-
|
154
|
-
def on_message(record, parsed_time = nil)
|
155
|
-
if val = record.delete(@tag_key)
|
156
|
-
tag = val
|
157
|
-
else
|
158
|
-
tag = @tag
|
159
|
-
end
|
160
|
-
|
161
|
-
if parsed_time
|
162
|
-
time = parsed_time
|
163
|
-
else
|
164
|
-
if val = record.delete(@time_key)
|
165
|
-
time = @time_parse_proc.call(val)
|
166
|
-
else
|
167
|
-
time = Engine.now
|
89
|
+
when @parser.parser_type == :text_per_line
|
90
|
+
io.each_line do |line|
|
91
|
+
@parser.parse(line.chomp, &method(:on_record))
|
168
92
|
end
|
93
|
+
else
|
94
|
+
@parser.parse(io.read, &method(:on_record))
|
169
95
|
end
|
96
|
+
end
|
170
97
|
|
98
|
+
def on_record(time, record)
|
99
|
+
tag = extract_tag_from_record(record)
|
100
|
+
tag ||= @tag
|
101
|
+
time ||= extract_time_from_record(record) || Fluent::EventTime.now
|
171
102
|
router.emit(tag, time, record)
|
172
103
|
rescue => e
|
173
|
-
log.error "exec failed to emit",
|
104
|
+
log.error "exec failed to emit", tag: tag, record: Yajl.dump(record), error: e
|
105
|
+
router.emit_error_event(tag, time, record, e) if tag && time && record
|
174
106
|
end
|
175
107
|
end
|
176
108
|
end
|