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,324 @@
|
|
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 "optparse"
|
18
|
+
require "pathname"
|
19
|
+
require "fileutils"
|
20
|
+
require "erb"
|
21
|
+
require "open-uri"
|
22
|
+
|
23
|
+
require "fluent/registry"
|
24
|
+
require 'fluent/version'
|
25
|
+
|
26
|
+
class FluentPluginGenerator
|
27
|
+
attr_reader :type, :name
|
28
|
+
attr_reader :license_name
|
29
|
+
|
30
|
+
SUPPORTED_TYPES = ["input", "output", "filter", "parser", "formatter"]
|
31
|
+
|
32
|
+
def initialize(argv = ARGV)
|
33
|
+
@argv = argv
|
34
|
+
@parser = prepare_parser
|
35
|
+
|
36
|
+
@license_name = "Apache-2.0"
|
37
|
+
@overwrite_all = false
|
38
|
+
end
|
39
|
+
|
40
|
+
def call
|
41
|
+
parse_options!
|
42
|
+
FileUtils.mkdir_p(gem_name)
|
43
|
+
Dir.chdir(gem_name) do
|
44
|
+
copy_license
|
45
|
+
template_directory.find do |path|
|
46
|
+
next if path.directory?
|
47
|
+
dest_dir = path.dirname.sub(/\A#{Regexp.quote(template_directory.to_s)}\/?/, "")
|
48
|
+
dest_file = dest_filename(path)
|
49
|
+
if path.extname == ".erb"
|
50
|
+
if path.fnmatch?("*/plugin/*")
|
51
|
+
next unless path.basename.fnmatch?("*#{type}*")
|
52
|
+
end
|
53
|
+
template(path, dest_dir + dest_file)
|
54
|
+
else
|
55
|
+
file(path, dest_dir + dest_file)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
pid = spawn("git", "init", ".")
|
59
|
+
Process.wait(pid)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def template_directory
|
66
|
+
(Pathname(__dir__) + "../../../templates/new_gem").realpath
|
67
|
+
end
|
68
|
+
|
69
|
+
def template_file(filename)
|
70
|
+
template_directory + filename
|
71
|
+
end
|
72
|
+
|
73
|
+
def template(source, dest)
|
74
|
+
dest.dirname.mkpath
|
75
|
+
contents =
|
76
|
+
if ERB.instance_method(:initialize).parameters.assoc(:key) # Ruby 2.6+
|
77
|
+
ERB.new(source.read, trim_mode: "-")
|
78
|
+
else
|
79
|
+
ERB.new(source.read, nil, "-")
|
80
|
+
end.result(binding)
|
81
|
+
label = create_label(dest, contents)
|
82
|
+
puts "\t#{label} #{dest}"
|
83
|
+
if label == "conflict"
|
84
|
+
return unless overwrite?(dest)
|
85
|
+
end
|
86
|
+
File.write(dest, contents)
|
87
|
+
end
|
88
|
+
|
89
|
+
def file(source, dest)
|
90
|
+
label = create_label(dest, source.read)
|
91
|
+
puts "\t#{label} #{dest}"
|
92
|
+
if label == "conflict"
|
93
|
+
return unless overwrite?(dest)
|
94
|
+
end
|
95
|
+
FileUtils.cp(source, dest)
|
96
|
+
end
|
97
|
+
|
98
|
+
def prepare_parser
|
99
|
+
@parser = OptionParser.new
|
100
|
+
@parser.version = Fluent::VERSION
|
101
|
+
@parser.banner = <<BANNER
|
102
|
+
Usage: fluent-plugin-generate [options] <type> <name>
|
103
|
+
|
104
|
+
Generate a project skeleton for creating a Fluentd plugin
|
105
|
+
|
106
|
+
Arguments:
|
107
|
+
\ttype: #{SUPPORTED_TYPES.join(",")}
|
108
|
+
\tname: Your plugin name
|
109
|
+
|
110
|
+
Options:
|
111
|
+
BANNER
|
112
|
+
|
113
|
+
@parser.on("--[no-]license=NAME", "Specify license name (default: Apache-2.0)") do |v|
|
114
|
+
@license_name = v || "no-license"
|
115
|
+
end
|
116
|
+
@parser
|
117
|
+
end
|
118
|
+
|
119
|
+
def parse_options!
|
120
|
+
@parser.parse!(@argv)
|
121
|
+
unless @argv.size == 2
|
122
|
+
raise ArgumentError, "Missing arguments"
|
123
|
+
end
|
124
|
+
@type, @name = @argv
|
125
|
+
rescue => e
|
126
|
+
usage("#{e.class}:#{e.message}")
|
127
|
+
end
|
128
|
+
|
129
|
+
def usage(message = "")
|
130
|
+
puts message
|
131
|
+
puts
|
132
|
+
puts @parser.help
|
133
|
+
exit(false)
|
134
|
+
end
|
135
|
+
|
136
|
+
def user_name
|
137
|
+
v = `git config --get user.name`.chomp
|
138
|
+
v.empty? ? "TODO: Write your name" : v
|
139
|
+
end
|
140
|
+
|
141
|
+
def user_email
|
142
|
+
v = `git config --get user.email`.chomp
|
143
|
+
v.empty? ? "TODO: Write your email" : v
|
144
|
+
end
|
145
|
+
|
146
|
+
def gem_name
|
147
|
+
"fluent-plugin-#{dash_name}"
|
148
|
+
end
|
149
|
+
|
150
|
+
def plugin_name
|
151
|
+
underscore_name
|
152
|
+
end
|
153
|
+
|
154
|
+
def class_name
|
155
|
+
"#{capitalized_name}#{type.capitalize}"
|
156
|
+
end
|
157
|
+
|
158
|
+
def plugin_filename
|
159
|
+
case type
|
160
|
+
when "input"
|
161
|
+
"in_#{underscore_name}.rb"
|
162
|
+
when "output"
|
163
|
+
"out_#{underscore_name}.rb"
|
164
|
+
else
|
165
|
+
"#{type}_#{underscore_name}.rb"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_filename
|
170
|
+
case type
|
171
|
+
when "input"
|
172
|
+
"test_in_#{underscore_name}.rb"
|
173
|
+
when "output"
|
174
|
+
"test_out_#{underscore_name}.rb"
|
175
|
+
else
|
176
|
+
"test_#{type}_#{underscore_name}.rb"
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def dest_filename(path)
|
181
|
+
case path.to_s
|
182
|
+
when %r!\.gemspec!
|
183
|
+
"#{gem_name}.gemspec"
|
184
|
+
when %r!lib/fluent/plugin!
|
185
|
+
plugin_filename
|
186
|
+
when %r!test/plugin!
|
187
|
+
test_filename
|
188
|
+
else
|
189
|
+
path.basename.sub_ext("")
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
def capitalized_name
|
194
|
+
@capitalized_name ||= name.split(/[-_]/).map(&:capitalize).join
|
195
|
+
end
|
196
|
+
|
197
|
+
def underscore_name
|
198
|
+
@underscore_name ||= name.tr("-", "_")
|
199
|
+
end
|
200
|
+
|
201
|
+
def dash_name
|
202
|
+
@dash_name ||= name.tr("_", "-")
|
203
|
+
end
|
204
|
+
|
205
|
+
def preamble
|
206
|
+
@license.preamble(user_name)
|
207
|
+
end
|
208
|
+
|
209
|
+
def copy_license
|
210
|
+
# in gem_name directory
|
211
|
+
return unless license_name
|
212
|
+
puts "License: #{license_name}"
|
213
|
+
license_class = self.class.lookup_license(license_name)
|
214
|
+
@license = license_class.new
|
215
|
+
Pathname("LICENSE").write(@license.text) unless @license.text.empty?
|
216
|
+
rescue Fluent::ConfigError
|
217
|
+
usage("Unknown license: #{license_name}")
|
218
|
+
rescue => ex
|
219
|
+
usage("#{ex.class}: #{ex.message}")
|
220
|
+
end
|
221
|
+
|
222
|
+
def create_label(dest, contents)
|
223
|
+
if dest.exist?
|
224
|
+
if dest.read == contents
|
225
|
+
"identical"
|
226
|
+
else
|
227
|
+
"conflict"
|
228
|
+
end
|
229
|
+
else
|
230
|
+
"create"
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
def overwrite?(dest)
|
235
|
+
return true if @overwrite_all
|
236
|
+
loop do
|
237
|
+
print "Overwrite #{dest}? (enter \"h\" for help) [Ynaqh]"
|
238
|
+
answer = $stdin.gets.chomp
|
239
|
+
return true if /\Ay\z/i =~ answer || answer.empty?
|
240
|
+
case answer
|
241
|
+
when "n"
|
242
|
+
return false
|
243
|
+
when "a"
|
244
|
+
@overwrite_all = true
|
245
|
+
return true
|
246
|
+
when "q"
|
247
|
+
exit
|
248
|
+
when "h"
|
249
|
+
puts <<HELP
|
250
|
+
\tY - yes, overwrite
|
251
|
+
\tn - no, do not overwrite
|
252
|
+
\ta - all, overwrite this and all others
|
253
|
+
\tq - quit, abort
|
254
|
+
\th - help, show this help
|
255
|
+
HELP
|
256
|
+
end
|
257
|
+
puts "Retrying..."
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
class NoLicense
|
262
|
+
attr_reader :name, :full_name, :text
|
263
|
+
|
264
|
+
def initialize
|
265
|
+
@name = ""
|
266
|
+
@full_name = ""
|
267
|
+
@text = ""
|
268
|
+
end
|
269
|
+
|
270
|
+
def preamble(usename)
|
271
|
+
""
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
class ApacheLicense
|
276
|
+
LICENSE_URL = "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
277
|
+
|
278
|
+
attr_reader :text
|
279
|
+
|
280
|
+
def initialize
|
281
|
+
@text = ""
|
282
|
+
@preamble_source = ""
|
283
|
+
@preamble = nil
|
284
|
+
open(LICENSE_URL) do |io|
|
285
|
+
@text = io.read
|
286
|
+
end
|
287
|
+
@preamble_source = @text[/^(\s*Copyright.+)/m, 1]
|
288
|
+
end
|
289
|
+
|
290
|
+
def name
|
291
|
+
"Apache-2.0"
|
292
|
+
end
|
293
|
+
|
294
|
+
def full_name
|
295
|
+
"Apache License, Version 2.0"
|
296
|
+
end
|
297
|
+
|
298
|
+
def preamble(user_name)
|
299
|
+
@preamble ||= @preamble_source.dup.tap do |source|
|
300
|
+
source.gsub!(/\[yyyy\]/, "#{Date.today.year}-")
|
301
|
+
source.gsub!(/\[name of copyright owner\]/, user_name)
|
302
|
+
source.gsub!(/^ {2}|^$/, "#")
|
303
|
+
source.chomp!
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
LICENSE_REGISTRY = Fluent::Registry.new(:license, "")
|
309
|
+
|
310
|
+
def self.register_license(license, klass)
|
311
|
+
LICENSE_REGISTRY.register(license, klass)
|
312
|
+
end
|
313
|
+
|
314
|
+
def self.lookup_license(license)
|
315
|
+
LICENSE_REGISTRY.lookup(license)
|
316
|
+
end
|
317
|
+
|
318
|
+
{
|
319
|
+
"no-license" => NoLicense,
|
320
|
+
"Apache-2.0" => ApacheLicense
|
321
|
+
}.each do |license, klass|
|
322
|
+
register_license(license, klass)
|
323
|
+
end
|
324
|
+
end
|
@@ -0,0 +1,67 @@
|
|
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
|
+
module Fluent
|
18
|
+
module Compat
|
19
|
+
module CallSuperMixin
|
20
|
+
# This mixin is to prepend to 3rd party plugins of v0.12 APIs.
|
21
|
+
# In past, there were not strong rule to call super in #start, #before_shutdown and #shutdown.
|
22
|
+
# But v0.14 API requires to call super in these methods to setup/teardown plugin helpers and others.
|
23
|
+
# This mixin prepends method calls to call super forcedly if checker returns false (it shows Fluent::Plugin::Base#methods wasn't called)
|
24
|
+
|
25
|
+
def self.prepended(klass)
|
26
|
+
@@_super_start ||= {}
|
27
|
+
@@_super_before_shutdown ||= {}
|
28
|
+
@@_super_shutdown ||= {}
|
29
|
+
|
30
|
+
# ancestors[0]: this module
|
31
|
+
# ancestors[1]: prepended class (plugin itself)
|
32
|
+
method_search = ->(ancestors, method){
|
33
|
+
closest = ancestors[2, ancestors.size - 2].index{|m| m.method_defined?(method) }
|
34
|
+
ancestors[2 + closest].instance_method(method)
|
35
|
+
}
|
36
|
+
@@_super_start[klass] = method_search.call(klass.ancestors, :start) # this returns Fluent::Compat::*#start (or helpers on it)
|
37
|
+
@@_super_before_shutdown[klass] = method_search.call(klass.ancestors, :before_shutdown)
|
38
|
+
@@_super_shutdown[klass] = method_search.call(klass.ancestors, :shutdown)
|
39
|
+
end
|
40
|
+
|
41
|
+
def start
|
42
|
+
super
|
43
|
+
unless self.started?
|
44
|
+
@@_super_start[self.class].bind(self).call
|
45
|
+
# #super will reset logdev (especially in test), so this warn should be after calling it
|
46
|
+
log.warn "super was not called in #start: called it forcedly", plugin: self.class
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def before_shutdown
|
51
|
+
super
|
52
|
+
unless self.before_shutdown?
|
53
|
+
log.warn "super was not called in #before_shutdown: calling it forcedly", plugin: self.class
|
54
|
+
@@_super_before_shutdown[self.class].bind(self).call
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def shutdown
|
59
|
+
super
|
60
|
+
unless self.shutdown?
|
61
|
+
log.warn "super was not called in #shutdown: calling it forcedly", plugin: self.class
|
62
|
+
@@_super_shutdown[self.class].bind(self).call
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,33 @@
|
|
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
|
+
module Fluent
|
18
|
+
module Compat
|
19
|
+
module DetachProcessMixin
|
20
|
+
def detach_process
|
21
|
+
log.warn "#{__method__} is not supported in this version. ignored."
|
22
|
+
yield
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module DetachMultiProcessMixin
|
27
|
+
def detach_multi_process
|
28
|
+
log.warn "#{__method__} is not supported in this version. ignored."
|
29
|
+
yield
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,129 @@
|
|
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 'msgpack'
|
18
|
+
require 'yajl'
|
19
|
+
|
20
|
+
require 'fluent/engine'
|
21
|
+
require 'fluent/plugin'
|
22
|
+
require 'fluent/parser'
|
23
|
+
|
24
|
+
module Fluent
|
25
|
+
module Compat
|
26
|
+
module ExecUtil
|
27
|
+
SUPPORTED_FORMAT = {
|
28
|
+
'tsv' => :tsv,
|
29
|
+
'json' => :json,
|
30
|
+
'msgpack' => :msgpack,
|
31
|
+
}
|
32
|
+
|
33
|
+
class Parser
|
34
|
+
def initialize(on_message)
|
35
|
+
@on_message = on_message
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class TextParserWrapperParser < Parser
|
40
|
+
def initialize(conf, on_message)
|
41
|
+
@parser = Plugin.new_parser(conf['format'])
|
42
|
+
@parser.configure(conf)
|
43
|
+
super(on_message)
|
44
|
+
end
|
45
|
+
|
46
|
+
def call(io)
|
47
|
+
io.each_line(&method(:each_line))
|
48
|
+
end
|
49
|
+
|
50
|
+
def each_line(line)
|
51
|
+
line.chomp!
|
52
|
+
@parser.parse(line) { |time, record|
|
53
|
+
@on_message.call(record, time)
|
54
|
+
}
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class TSVParser < Parser
|
59
|
+
def initialize(keys, on_message)
|
60
|
+
@keys = keys
|
61
|
+
super(on_message)
|
62
|
+
end
|
63
|
+
|
64
|
+
def call(io)
|
65
|
+
io.each_line(&method(:each_line))
|
66
|
+
end
|
67
|
+
|
68
|
+
def each_line(line)
|
69
|
+
line.chomp!
|
70
|
+
vals = line.split("\t")
|
71
|
+
|
72
|
+
record = Hash[@keys.zip(vals)]
|
73
|
+
|
74
|
+
@on_message.call(record)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class JSONParser < Parser
|
79
|
+
def call(io)
|
80
|
+
y = Yajl::Parser.new
|
81
|
+
y.on_parse_complete = @on_message
|
82
|
+
y.parse(io)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class MessagePackParser < Parser
|
87
|
+
def call(io)
|
88
|
+
@u = Fluent::Engine.msgpack_factory.unpacker(io)
|
89
|
+
begin
|
90
|
+
@u.each(&@on_message)
|
91
|
+
rescue EOFError
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class Formatter
|
97
|
+
end
|
98
|
+
|
99
|
+
class TSVFormatter < Formatter
|
100
|
+
def initialize(in_keys)
|
101
|
+
@in_keys = in_keys
|
102
|
+
super()
|
103
|
+
end
|
104
|
+
|
105
|
+
def call(record, out)
|
106
|
+
last = @in_keys.length-1
|
107
|
+
for i in 0..last
|
108
|
+
key = @in_keys[i]
|
109
|
+
out << record[key].to_s
|
110
|
+
out << "\t" if i != last
|
111
|
+
end
|
112
|
+
out << "\n"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
class JSONFormatter < Formatter
|
117
|
+
def call(record, out)
|
118
|
+
out << Yajl.dump(record) << "\n"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
class MessagePackFormatter < Formatter
|
123
|
+
def call(record, out)
|
124
|
+
record.to_msgpack(out)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,54 @@
|
|
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
|
+
module Fluent
|
18
|
+
module Compat
|
19
|
+
module FileUtil
|
20
|
+
# Check file is writable if file exists
|
21
|
+
# Check directory is writable if file does not exist
|
22
|
+
#
|
23
|
+
# @param [String] path File path
|
24
|
+
# @return [Boolean] file is writable or not
|
25
|
+
def writable?(path)
|
26
|
+
return false if File.directory?(path)
|
27
|
+
return File.writable?(path) if File.exist?(path)
|
28
|
+
|
29
|
+
dirname = File.dirname(path)
|
30
|
+
return false if !File.directory?(dirname)
|
31
|
+
File.writable?(dirname)
|
32
|
+
end
|
33
|
+
module_function :writable?
|
34
|
+
|
35
|
+
# Check file is writable in conjunction with mkdir_p(dirname(path))
|
36
|
+
#
|
37
|
+
# @param [String] path File path
|
38
|
+
# @return [Boolean] file writable or not
|
39
|
+
def writable_p?(path)
|
40
|
+
return false if File.directory?(path)
|
41
|
+
return File.writable?(path) if File.exist?(path)
|
42
|
+
|
43
|
+
dirname = File.dirname(path)
|
44
|
+
until File.exist?(dirname)
|
45
|
+
dirname = File.dirname(dirname)
|
46
|
+
end
|
47
|
+
|
48
|
+
return false if !File.directory?(dirname)
|
49
|
+
File.writable?(dirname)
|
50
|
+
end
|
51
|
+
module_function :writable_p?
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/plugin'
|
18
|
+
require 'fluent/plugin/filter'
|
19
|
+
require 'fluent/compat/call_super_mixin'
|
20
|
+
require 'fluent/compat/formatter_utils'
|
21
|
+
require 'fluent/compat/parser_utils'
|
22
|
+
|
23
|
+
module Fluent
|
24
|
+
module Compat
|
25
|
+
class Filter < Fluent::Plugin::Filter
|
26
|
+
# TODO: warn when deprecated
|
27
|
+
|
28
|
+
helpers_internal :inject
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
super
|
32
|
+
unless self.class.ancestors.include?(Fluent::Compat::CallSuperMixin)
|
33
|
+
self.class.prepend Fluent::Compat::CallSuperMixin
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def configure(conf)
|
38
|
+
ParserUtils.convert_parser_conf(conf)
|
39
|
+
FormatterUtils.convert_formatter_conf(conf)
|
40
|
+
|
41
|
+
super
|
42
|
+
end
|
43
|
+
|
44
|
+
# These definitions are to get instance methods of superclass of 3rd party plugins
|
45
|
+
# to make it sure to call super
|
46
|
+
def start
|
47
|
+
super
|
48
|
+
|
49
|
+
if instance_variable_defined?(:@formatter) && @inject_config
|
50
|
+
unless @formatter.class.ancestors.include?(Fluent::Compat::HandleTagAndTimeMixin)
|
51
|
+
if @formatter.respond_to?(:owner) && !@formatter.owner
|
52
|
+
@formatter.owner = self
|
53
|
+
@formatter.singleton_class.prepend FormatterUtils::InjectMixin
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def before_shutdown
|
60
|
+
super
|
61
|
+
end
|
62
|
+
|
63
|
+
def shutdown
|
64
|
+
super
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|