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,63 @@
|
|
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/base'
|
18
|
+
|
19
|
+
require 'fluent/log'
|
20
|
+
require 'fluent/plugin_id'
|
21
|
+
require 'fluent/plugin_helper'
|
22
|
+
|
23
|
+
module Fluent
|
24
|
+
module Plugin
|
25
|
+
class BareOutput < Base
|
26
|
+
# DO NOT USE THIS plugin for normal output plugin. Use Output instead.
|
27
|
+
# This output plugin base class is only for meta-output plugins
|
28
|
+
# which cannot be implemented on MultiOutput.
|
29
|
+
# E.g,: forest, config-expander
|
30
|
+
|
31
|
+
include PluginId
|
32
|
+
include PluginLoggerMixin
|
33
|
+
include PluginHelper::Mixin
|
34
|
+
|
35
|
+
attr_reader :num_errors, :emit_count, :emit_records
|
36
|
+
|
37
|
+
def process(tag, es)
|
38
|
+
raise NotImplementedError, "BUG: output plugins MUST implement this method"
|
39
|
+
end
|
40
|
+
|
41
|
+
def initialize
|
42
|
+
super
|
43
|
+
@counters_monitor = Monitor.new
|
44
|
+
# TODO: well organized counters
|
45
|
+
@num_errors = 0
|
46
|
+
@emit_count = 0
|
47
|
+
@emit_records = 0
|
48
|
+
end
|
49
|
+
|
50
|
+
def emit_sync(tag, es)
|
51
|
+
@counters_monitor.synchronize{ @emit_count += 1 }
|
52
|
+
begin
|
53
|
+
process(tag, es)
|
54
|
+
@counters_monitor.synchronize{ @emit_records += es.size }
|
55
|
+
rescue
|
56
|
+
@counters_monitor.synchronize{ @num_errors += 1 }
|
57
|
+
raise
|
58
|
+
end
|
59
|
+
end
|
60
|
+
alias :emit_events :emit_sync
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,192 @@
|
|
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/configurable'
|
19
|
+
require 'fluent/system_config'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module Plugin
|
23
|
+
class Base
|
24
|
+
include Configurable
|
25
|
+
include SystemConfig::Mixin
|
26
|
+
|
27
|
+
State = Struct.new(:configure, :start, :after_start, :stop, :before_shutdown, :shutdown, :after_shutdown, :close, :terminate)
|
28
|
+
|
29
|
+
attr_accessor :under_plugin_development
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
@log = nil
|
33
|
+
super
|
34
|
+
@_state = State.new(false, false, false, false, false, false, false, false, false)
|
35
|
+
@_context_router = nil
|
36
|
+
@_fluentd_worker_id = nil
|
37
|
+
@under_plugin_development = false
|
38
|
+
end
|
39
|
+
|
40
|
+
def has_router?
|
41
|
+
false
|
42
|
+
end
|
43
|
+
|
44
|
+
def plugin_root_dir
|
45
|
+
nil # override this in plugin_id.rb
|
46
|
+
end
|
47
|
+
|
48
|
+
def fluentd_worker_id
|
49
|
+
return @_fluentd_worker_id if @_fluentd_worker_id
|
50
|
+
@_fluentd_worker_id = (ENV['SERVERENGINE_WORKER_ID'] || 0).to_i
|
51
|
+
@_fluentd_worker_id
|
52
|
+
end
|
53
|
+
|
54
|
+
def configure(conf)
|
55
|
+
if conf.respond_to?(:for_this_worker?) && conf.for_this_worker?
|
56
|
+
workers = if conf.target_worker_ids && !conf.target_worker_ids.empty?
|
57
|
+
conf.target_worker_ids.size
|
58
|
+
else
|
59
|
+
1
|
60
|
+
end
|
61
|
+
system_config_override(workers: workers)
|
62
|
+
end
|
63
|
+
super
|
64
|
+
@_state ||= State.new(false, false, false, false, false, false, false, false, false)
|
65
|
+
@_state.configure = true
|
66
|
+
self
|
67
|
+
end
|
68
|
+
|
69
|
+
def multi_workers_ready?
|
70
|
+
true
|
71
|
+
end
|
72
|
+
|
73
|
+
def string_safe_encoding(str)
|
74
|
+
unless str.valid_encoding?
|
75
|
+
log.info "invalid byte sequence is replaced in `#{str}`" if self.respond_to?(:log)
|
76
|
+
str = str.scrub('?')
|
77
|
+
end
|
78
|
+
yield str
|
79
|
+
end
|
80
|
+
|
81
|
+
def context_router=(router)
|
82
|
+
@_context_router = router
|
83
|
+
end
|
84
|
+
|
85
|
+
def context_router
|
86
|
+
@_context_router
|
87
|
+
end
|
88
|
+
|
89
|
+
def start
|
90
|
+
# By initialization order, plugin logger is created before set log_event_enabled.
|
91
|
+
# It causes '@id' specified plugin, it uses plugin logger instead of global logger, ignores `<label @FLUENT_LOG>` setting.
|
92
|
+
# This is adhoc approach but impact is minimal.
|
93
|
+
if @log.is_a?(Fluent::PluginLogger) && $log.respond_to?(:log_event_enabled) # log_event_enabled check for tests
|
94
|
+
@log.log_event_enabled = $log.log_event_enabled
|
95
|
+
end
|
96
|
+
@_state.start = true
|
97
|
+
self
|
98
|
+
end
|
99
|
+
|
100
|
+
def after_start
|
101
|
+
@_state.after_start = true
|
102
|
+
self
|
103
|
+
end
|
104
|
+
|
105
|
+
def stop
|
106
|
+
@_state.stop = true
|
107
|
+
self
|
108
|
+
end
|
109
|
+
|
110
|
+
def before_shutdown
|
111
|
+
@_state.before_shutdown = true
|
112
|
+
self
|
113
|
+
end
|
114
|
+
|
115
|
+
def shutdown
|
116
|
+
@_state.shutdown = true
|
117
|
+
self
|
118
|
+
end
|
119
|
+
|
120
|
+
def after_shutdown
|
121
|
+
@_state.after_shutdown = true
|
122
|
+
self
|
123
|
+
end
|
124
|
+
|
125
|
+
def close
|
126
|
+
@_state.close = true
|
127
|
+
self
|
128
|
+
end
|
129
|
+
|
130
|
+
def terminate
|
131
|
+
@_state.terminate = true
|
132
|
+
self
|
133
|
+
end
|
134
|
+
|
135
|
+
def configured?
|
136
|
+
@_state.configure
|
137
|
+
end
|
138
|
+
|
139
|
+
def started?
|
140
|
+
@_state.start
|
141
|
+
end
|
142
|
+
|
143
|
+
def after_started?
|
144
|
+
@_state.after_start
|
145
|
+
end
|
146
|
+
|
147
|
+
def stopped?
|
148
|
+
@_state.stop
|
149
|
+
end
|
150
|
+
|
151
|
+
def before_shutdown?
|
152
|
+
@_state.before_shutdown
|
153
|
+
end
|
154
|
+
|
155
|
+
def shutdown?
|
156
|
+
@_state.shutdown
|
157
|
+
end
|
158
|
+
|
159
|
+
def after_shutdown?
|
160
|
+
@_state.after_shutdown
|
161
|
+
end
|
162
|
+
|
163
|
+
def closed?
|
164
|
+
@_state.close
|
165
|
+
end
|
166
|
+
|
167
|
+
def terminated?
|
168
|
+
@_state.terminate
|
169
|
+
end
|
170
|
+
|
171
|
+
def called_in_test?
|
172
|
+
caller_locations.each do |location|
|
173
|
+
# Thread::Backtrace::Location#path returns base filename or absolute path.
|
174
|
+
# #absolute_path returns absolute_path always.
|
175
|
+
# https://bugs.ruby-lang.org/issues/12159
|
176
|
+
if location.absolute_path =~ /\/test_[^\/]+\.rb$/ # location.path =~ /test_.+\.rb$/
|
177
|
+
return true
|
178
|
+
end
|
179
|
+
end
|
180
|
+
false
|
181
|
+
end
|
182
|
+
|
183
|
+
def inspect
|
184
|
+
# Plugin instances are sometimes too big to dump because it may have too many thins (buffer,storage, ...)
|
185
|
+
# Original commit comment says that:
|
186
|
+
# To emulate normal inspect behavior `ruby -e'o=Object.new;p o;p (o.__id__<<1).to_s(16)'`.
|
187
|
+
# https://github.com/ruby/ruby/blob/trunk/gc.c#L788
|
188
|
+
"#<%s:%014x>" % [self.class.name, '0x%014x' % (__id__ << 1)]
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
@@ -15,218 +15,172 @@
|
|
15
15
|
#
|
16
16
|
|
17
17
|
require 'fileutils'
|
18
|
-
require 'uri'
|
19
18
|
|
20
|
-
require 'fluent/
|
21
|
-
require 'fluent/plugin'
|
22
|
-
require 'fluent/
|
19
|
+
require 'fluent/plugin/buffer'
|
20
|
+
require 'fluent/plugin/buffer/file_chunk'
|
21
|
+
require 'fluent/system_config'
|
23
22
|
|
24
23
|
module Fluent
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
@path = path
|
29
|
-
@unique_id = unique_id
|
30
|
-
@file = File.open(@path, mode, DEFAULT_FILE_PERMISSION)
|
31
|
-
@file.sync = true
|
32
|
-
@size = @file.stat.size
|
33
|
-
FileUtils.ln_sf(@path, symlink_path) if symlink_path
|
34
|
-
end
|
35
|
-
|
36
|
-
attr_reader :unique_id, :path
|
24
|
+
module Plugin
|
25
|
+
class FileBuffer < Fluent::Plugin::Buffer
|
26
|
+
Plugin.register_buffer('file', self)
|
37
27
|
|
38
|
-
|
39
|
-
@file.write(data)
|
40
|
-
@size += data.bytesize
|
41
|
-
end
|
28
|
+
include SystemConfig::Mixin
|
42
29
|
|
43
|
-
|
44
|
-
|
45
|
-
end
|
30
|
+
DEFAULT_CHUNK_LIMIT_SIZE = 256 * 1024 * 1024 # 256MB
|
31
|
+
DEFAULT_TOTAL_LIMIT_SIZE = 64 * 1024 * 1024 * 1024 # 64GB, same with v0.12 (TimeSlicedOutput + buf_file)
|
46
32
|
|
47
|
-
|
48
|
-
@size == 0
|
49
|
-
end
|
33
|
+
DIR_PERMISSION = 0755
|
50
34
|
|
51
|
-
|
52
|
-
|
53
|
-
@file.close
|
54
|
-
if stat.size == 0
|
55
|
-
File.unlink(@path)
|
56
|
-
end
|
57
|
-
end
|
35
|
+
desc 'The path where buffer chunks are stored.'
|
36
|
+
config_param :path, :string, default: nil
|
58
37
|
|
59
|
-
|
60
|
-
|
61
|
-
File.unlink(@path) rescue nil # TODO rescue?
|
62
|
-
end
|
38
|
+
config_set_default :chunk_limit_size, DEFAULT_CHUNK_LIMIT_SIZE
|
39
|
+
config_set_default :total_limit_size, DEFAULT_TOTAL_LIMIT_SIZE
|
63
40
|
|
64
|
-
|
65
|
-
|
66
|
-
@file.read
|
67
|
-
end
|
41
|
+
config_param :file_permission, :string, default: nil # '0644'
|
42
|
+
config_param :dir_permission, :string, default: nil # '0755'
|
68
43
|
|
69
|
-
|
70
|
-
@file.pos = 0
|
71
|
-
yield @file
|
72
|
-
end
|
44
|
+
@@buffer_paths = {}
|
73
45
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
46
|
+
def initialize
|
47
|
+
super
|
48
|
+
@symlink_path = nil
|
49
|
+
@multi_workers_available = false
|
50
|
+
@additional_resume_path = nil
|
51
|
+
end
|
79
52
|
|
80
|
-
|
81
|
-
|
53
|
+
def configure(conf)
|
54
|
+
super
|
82
55
|
|
83
|
-
|
56
|
+
multi_workers_configured = owner.system_config.workers > 1 ? true : false
|
84
57
|
|
85
|
-
|
86
|
-
|
87
|
-
|
58
|
+
using_plugin_root_dir = false
|
59
|
+
unless @path
|
60
|
+
if root_dir = owner.plugin_root_dir
|
61
|
+
@path = File.join(root_dir, 'buffer')
|
62
|
+
using_plugin_root_dir = true # plugin_root_dir path contains worker id
|
63
|
+
else
|
64
|
+
raise Fluent::ConfigError, "buffer path is not configured. specify 'path' in <buffer>"
|
65
|
+
end
|
66
|
+
end
|
88
67
|
|
89
|
-
|
90
|
-
|
68
|
+
type_of_owner = Plugin.lookup_type_from_class(@_owner.class)
|
69
|
+
if @@buffer_paths.has_key?(@path) && !called_in_test?
|
70
|
+
type_using_this_path = @@buffer_paths[@path]
|
71
|
+
raise ConfigError, "Other '#{type_using_this_path}' plugin already use same buffer path: type = #{type_of_owner}, buffer path = #{@path}"
|
72
|
+
end
|
91
73
|
|
92
|
-
|
93
|
-
config_param :buffer_path, :string
|
94
|
-
desc 'If true, queued chunks are flushed at shutdown process.'
|
95
|
-
config_param :flush_at_shutdown, :bool, default: false
|
74
|
+
@@buffer_paths[@path] = type_of_owner
|
96
75
|
|
97
|
-
|
98
|
-
|
99
|
-
# See: https://github.com/fluent/fluentd/pull/181
|
100
|
-
attr_accessor :symlink_path
|
76
|
+
specified_directory_exists = File.exist?(@path) && File.directory?(@path)
|
77
|
+
unexisting_path_for_directory = !File.exist?(@path) && !@path.include?('.*')
|
101
78
|
|
102
|
-
|
103
|
-
|
79
|
+
if specified_directory_exists || unexisting_path_for_directory # directory
|
80
|
+
if using_plugin_root_dir || !multi_workers_configured
|
81
|
+
@path = File.join(@path, 'buffer.*.log')
|
82
|
+
else
|
83
|
+
@path = File.join(@path, "worker#{fluentd_worker_id}", 'buffer.*.log')
|
84
|
+
if fluentd_worker_id == 0
|
85
|
+
# worker 0 always checks unflushed buffer chunks to be resumed (might be created while non-multi-worker configuration)
|
86
|
+
@additional_resume_path = File.join(File.expand_path("../../", @path), 'buffer.*.log')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
@multi_workers_available = true
|
90
|
+
else # specified path is file path
|
91
|
+
if File.basename(@path).include?('.*.')
|
92
|
+
# valid file path
|
93
|
+
elsif File.basename(@path).end_with?('.*')
|
94
|
+
@path = @path + '.log'
|
95
|
+
else
|
96
|
+
# existing file will be ignored
|
97
|
+
@path = @path + '.*.log'
|
98
|
+
end
|
99
|
+
@multi_workers_available = false
|
100
|
+
end
|
104
101
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
102
|
+
if @dir_permission
|
103
|
+
@dir_permission = @dir_permission.to_i(8) if @dir_permission.is_a?(String)
|
104
|
+
else
|
105
|
+
@dir_permission = system_config.dir_permission || DIR_PERMISSION
|
106
|
+
end
|
109
107
|
end
|
110
108
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
@
|
109
|
+
# This method is called only when multi worker is configured
|
110
|
+
def multi_workers_ready?
|
111
|
+
unless @multi_workers_available
|
112
|
+
log.error "file buffer with multi workers should be configured to use directory 'path', or system root_dir and plugin id"
|
113
|
+
end
|
114
|
+
@multi_workers_available
|
117
115
|
end
|
118
116
|
|
119
|
-
|
120
|
-
|
121
|
-
def start
|
122
|
-
FileUtils.mkdir_p File.dirname(@buffer_path_prefix + "path"), mode: DEFAULT_DIR_PERMISSION
|
123
|
-
super
|
124
|
-
end
|
125
|
-
|
126
|
-
# Dots are separator for many cases:
|
127
|
-
# we should have to escape dots in keys...
|
128
|
-
PATH_MATCH = /^([-_.%0-9a-zA-Z]*)\.(b|q)([0-9a-fA-F]{1,32})$/
|
117
|
+
def start
|
118
|
+
FileUtils.mkdir_p File.dirname(@path), mode: @dir_permission
|
129
119
|
|
130
|
-
|
131
|
-
|
132
|
-
path, tsuffix = make_path(encoded_key, "b")
|
133
|
-
unique_id = tsuffix_to_unique_id(tsuffix)
|
134
|
-
FileBufferChunk.new(key, path, unique_id, "a+", @symlink_path)
|
135
|
-
end
|
120
|
+
super
|
121
|
+
end
|
136
122
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
Dir.glob("#{@buffer_path_prefix}*#{@buffer_path_suffix}") {|path|
|
142
|
-
identifier_part = chunk_identifier_in_path(path)
|
143
|
-
if m = PATH_MATCH.match(identifier_part)
|
144
|
-
key = decode_key(m[1])
|
145
|
-
bq = m[2]
|
146
|
-
tsuffix = m[3]
|
147
|
-
timestamp = m[3].to_i(16)
|
148
|
-
unique_id = tsuffix_to_unique_id(tsuffix)
|
149
|
-
|
150
|
-
if bq == 'b'
|
151
|
-
chunk = FileBufferChunk.new(key, path, unique_id, "a+")
|
152
|
-
maps << [timestamp, chunk]
|
153
|
-
elsif bq == 'q'
|
154
|
-
chunk = FileBufferChunk.new(key, path, unique_id, "r")
|
155
|
-
queues << [timestamp, chunk]
|
156
|
-
end
|
157
|
-
end
|
158
|
-
}
|
159
|
-
|
160
|
-
map = {}
|
161
|
-
maps.sort_by {|(timestamp,chunk)|
|
162
|
-
timestamp
|
163
|
-
}.each {|(timestamp,chunk)|
|
164
|
-
map[chunk.key] = chunk
|
165
|
-
}
|
166
|
-
|
167
|
-
queue = queues.sort_by {|(timestamp,chunk)|
|
168
|
-
timestamp
|
169
|
-
}.map {|(timestamp,chunk)|
|
170
|
-
chunk
|
171
|
-
}
|
172
|
-
|
173
|
-
return queue, map
|
174
|
-
end
|
123
|
+
def persistent?
|
124
|
+
true
|
125
|
+
end
|
175
126
|
|
176
|
-
|
177
|
-
|
178
|
-
|
127
|
+
def resume
|
128
|
+
stage = {}
|
129
|
+
queue = []
|
179
130
|
|
180
|
-
|
181
|
-
|
131
|
+
patterns = [@path]
|
132
|
+
patterns.unshift @additional_resume_path if @additional_resume_path
|
133
|
+
Dir.glob(patterns) do |path|
|
134
|
+
next unless File.file?(path)
|
182
135
|
|
183
|
-
|
184
|
-
path = chunk.path
|
185
|
-
identifier_part = chunk_identifier_in_path(path)
|
136
|
+
log.debug { "restoring buffer file: path = #{path}" }
|
186
137
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
138
|
+
m = new_metadata() # this metadata will be overwritten by resuming .meta file content
|
139
|
+
# so it should not added into @metadata_list for now
|
140
|
+
mode = Fluent::Plugin::Buffer::FileChunk.assume_chunk_state(path)
|
141
|
+
if mode == :unknown
|
142
|
+
log.debug "unknown state chunk found", path: path
|
143
|
+
next
|
144
|
+
end
|
191
145
|
|
192
|
-
|
193
|
-
|
146
|
+
begin
|
147
|
+
chunk = Fluent::Plugin::Buffer::FileChunk.new(m, path, mode) # file chunk resumes contents of metadata
|
148
|
+
rescue Fluent::Plugin::Buffer::FileChunk::FileChunkError => e
|
149
|
+
handle_broken_files(path, mode, e)
|
150
|
+
next
|
151
|
+
end
|
194
152
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
}
|
201
|
-
while pop(out)
|
153
|
+
case chunk.state
|
154
|
+
when :staged
|
155
|
+
stage[chunk.metadata] = chunk
|
156
|
+
when :queued
|
157
|
+
queue << chunk
|
202
158
|
end
|
203
159
|
end
|
204
|
-
end
|
205
|
-
end
|
206
160
|
|
207
|
-
|
161
|
+
queue.sort_by!{ |chunk| chunk.modified_at }
|
208
162
|
|
209
|
-
|
210
|
-
|
211
|
-
def encode_key(key)
|
212
|
-
@uri_parser.escape(key, /[^-_.a-zA-Z0-9]/n) # //n switch means explicit 'ASCII-8BIT' pattern
|
213
|
-
end
|
163
|
+
return stage, queue
|
164
|
+
end
|
214
165
|
|
215
|
-
|
216
|
-
|
217
|
-
|
166
|
+
def generate_chunk(metadata)
|
167
|
+
# FileChunk generates real path with unique_id
|
168
|
+
if @file_permission
|
169
|
+
chunk = Fluent::Plugin::Buffer::FileChunk.new(metadata, @path, :create, perm: @file_permission, compress: @compress)
|
170
|
+
else
|
171
|
+
chunk = Fluent::Plugin::Buffer::FileChunk.new(metadata, @path, :create, compress: @compress)
|
172
|
+
end
|
218
173
|
|
219
|
-
|
220
|
-
now = Time.now.utc
|
221
|
-
timestamp = ((now.to_i * 1000 * 1000 + now.usec) << 12 | rand(0xfff))
|
222
|
-
tsuffix = timestamp.to_s(16)
|
223
|
-
path = "#{@buffer_path_prefix}#{encoded_key}.#{bq}#{tsuffix}#{@buffer_path_suffix}"
|
224
|
-
return path, tsuffix
|
225
|
-
end
|
174
|
+
log.debug "Created new chunk", chunk_id: dump_unique_id_hex(chunk.unique_id), metadata: metadata
|
226
175
|
|
227
|
-
|
228
|
-
|
229
|
-
|
176
|
+
return chunk
|
177
|
+
end
|
178
|
+
|
179
|
+
def handle_broken_files(path, mode, e)
|
180
|
+
log.error "found broken chunk file during resume. Deleted corresponding files:", :path => path, :mode => mode, :err_msg => e.message
|
181
|
+
# After support 'backup_dir' feature, these files are moved to backup_dir instead of unlink.
|
182
|
+
File.unlink(path, path + '.meta') rescue nil
|
183
|
+
end
|
230
184
|
end
|
231
185
|
end
|
232
186
|
end
|