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,297 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'cool.io'
|
18
|
+
require 'fluent/counter/base_socket'
|
19
|
+
require 'fluent/counter/error'
|
20
|
+
require 'timeout'
|
21
|
+
|
22
|
+
module Fluent
|
23
|
+
module Counter
|
24
|
+
class Client
|
25
|
+
DEFAULT_PORT = 24321
|
26
|
+
DEFAULT_ADDR = '127.0.0.1'
|
27
|
+
DEFAULT_TIMEOUT = 5
|
28
|
+
ID_LIMIT_COUNT = 1 << 31
|
29
|
+
|
30
|
+
def initialize(loop = nil, opt = {})
|
31
|
+
@loop = loop || Coolio::Loop.new
|
32
|
+
@port = opt[:port] || DEFAULT_PORT
|
33
|
+
@host = opt[:host] || DEFAULT_ADDR
|
34
|
+
@log = opt[:log] || $log
|
35
|
+
@timeout = opt[:timeout] || DEFAULT_TIMEOUT
|
36
|
+
@conn = Connection.connect(@host, @port, method(:on_message))
|
37
|
+
@responses = {}
|
38
|
+
@id = 0
|
39
|
+
@id_mutex = Mutex.new
|
40
|
+
@loop_mutex = Mutex.new
|
41
|
+
end
|
42
|
+
|
43
|
+
def start
|
44
|
+
@loop.attach(@conn)
|
45
|
+
@log.debug("starting counter client: #{@host}:#{@port}")
|
46
|
+
self
|
47
|
+
rescue => e
|
48
|
+
if @log
|
49
|
+
@log.error e
|
50
|
+
else
|
51
|
+
STDERR.puts e
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def stop
|
56
|
+
@conn.close
|
57
|
+
@log.debug("calling stop in counter client: #{@host}:#{@port}")
|
58
|
+
end
|
59
|
+
|
60
|
+
def establish(scope)
|
61
|
+
scope = Timeout.timeout(@timeout) {
|
62
|
+
response = send_request('establish', nil, [scope])
|
63
|
+
Fluent::Counter.raise_error(response.errors.first) if response.errors?
|
64
|
+
data = response.data
|
65
|
+
data.first
|
66
|
+
}
|
67
|
+
@scope = scope
|
68
|
+
rescue Timeout::Error
|
69
|
+
raise "Can't establish the connection to counter server due to timeout"
|
70
|
+
end
|
71
|
+
|
72
|
+
# === Example
|
73
|
+
# `init` receives various arguments.
|
74
|
+
#
|
75
|
+
# 1. init(name: 'name')
|
76
|
+
# 2. init({ name: 'name',reset_interval: 20 }, options: {})
|
77
|
+
# 3. init([{ name: 'name1',reset_interval: 20 }, { name: 'name2',reset_interval: 20 }])
|
78
|
+
# 4. init([{ name: 'name1',reset_interval: 20 }, { name: 'name2',reset_interval: 20 }], options: {})
|
79
|
+
# 5. init([{ name: 'name1',reset_interval: 20 }, { name: 'name2',reset_interval: 20 }]) { |res| ... }
|
80
|
+
def init(params, options: {})
|
81
|
+
exist_scope!
|
82
|
+
params = [params] unless params.is_a?(Array)
|
83
|
+
res = send_request('init', @scope, params, options)
|
84
|
+
|
85
|
+
# if `async` is false or missing, block at this method and return a Future::Result object.
|
86
|
+
if block_given?
|
87
|
+
Thread.start do
|
88
|
+
yield res.get
|
89
|
+
end
|
90
|
+
else
|
91
|
+
res
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def delete(*params, options: {})
|
96
|
+
exist_scope!
|
97
|
+
res = send_request('delete', @scope, params, options)
|
98
|
+
|
99
|
+
if block_given?
|
100
|
+
Thread.start do
|
101
|
+
yield res.get
|
102
|
+
end
|
103
|
+
else
|
104
|
+
res
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# === Example
|
109
|
+
# `inc` receives various arguments.
|
110
|
+
#
|
111
|
+
# 1. inc(name: 'name')
|
112
|
+
# 2. inc({ name: 'name',value: 20 }, options: {})
|
113
|
+
# 3. inc([{ name: 'name1',value: 20 }, { name: 'name2',value: 20 }])
|
114
|
+
# 4. inc([{ name: 'name1',value: 20 }, { name: 'name2',value: 20 }], options: {})
|
115
|
+
def inc(params, options: {})
|
116
|
+
exist_scope!
|
117
|
+
params = [params] unless params.is_a?(Array)
|
118
|
+
res = send_request('inc', @scope, params, options)
|
119
|
+
|
120
|
+
if block_given?
|
121
|
+
Thread.start do
|
122
|
+
yield res.get
|
123
|
+
end
|
124
|
+
else
|
125
|
+
res
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def get(*params, options: {})
|
130
|
+
exist_scope!
|
131
|
+
res = send_request('get', @scope, params, options)
|
132
|
+
|
133
|
+
if block_given?
|
134
|
+
Thread.start do
|
135
|
+
yield res.get
|
136
|
+
end
|
137
|
+
else
|
138
|
+
res
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def reset(*params, options: {})
|
143
|
+
exist_scope!
|
144
|
+
res = send_request('reset', @scope, params, options)
|
145
|
+
|
146
|
+
if block_given?
|
147
|
+
Thread.start do
|
148
|
+
yield res.get
|
149
|
+
end
|
150
|
+
else
|
151
|
+
res
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
private
|
156
|
+
|
157
|
+
def exist_scope!
|
158
|
+
raise 'Call `establish` method to get a `scope` before calling this method' unless @scope
|
159
|
+
end
|
160
|
+
|
161
|
+
def on_message(data)
|
162
|
+
if response = @responses.delete(data['id'])
|
163
|
+
response.set(data)
|
164
|
+
else
|
165
|
+
@log.warn("Receiving missing id data: #{data}")
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
def send_request(method, scope, params, opt = {})
|
170
|
+
id = generate_id
|
171
|
+
res = Future.new(@loop, @loop_mutex)
|
172
|
+
@responses[id] = res # set a response value to this future object at `on_message`
|
173
|
+
request = build_request(method, id, scope, params, opt)
|
174
|
+
@log.debug(request)
|
175
|
+
@conn.send_data request
|
176
|
+
res
|
177
|
+
end
|
178
|
+
|
179
|
+
def build_request(method, id, scope = nil, params = nil, options = nil)
|
180
|
+
r = { id: id, method: method }
|
181
|
+
r[:scope] = scope if scope
|
182
|
+
r[:params] = params if params
|
183
|
+
r[:options] = options if options
|
184
|
+
r
|
185
|
+
end
|
186
|
+
|
187
|
+
def generate_id
|
188
|
+
id = 0
|
189
|
+
@id_mutex.synchronize do
|
190
|
+
id = @id
|
191
|
+
@id += 1
|
192
|
+
@id = 0 if ID_LIMIT_COUNT < @id
|
193
|
+
end
|
194
|
+
id
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
class Connection < Fluent::Counter::BaseSocket
|
199
|
+
def initialize(io, on_message)
|
200
|
+
super(io)
|
201
|
+
@connection = false
|
202
|
+
@buffer = ''
|
203
|
+
@on_message = on_message
|
204
|
+
end
|
205
|
+
|
206
|
+
def send_data(data)
|
207
|
+
if @connection
|
208
|
+
packed_write data
|
209
|
+
else
|
210
|
+
@buffer += pack(data)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def on_connect
|
215
|
+
@connection = true
|
216
|
+
write @buffer
|
217
|
+
@buffer = ''
|
218
|
+
end
|
219
|
+
|
220
|
+
def on_close
|
221
|
+
@connection = false
|
222
|
+
end
|
223
|
+
|
224
|
+
def on_message(data)
|
225
|
+
@on_message.call(data)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
class Future
|
230
|
+
class Result
|
231
|
+
attr_reader :data, :errors
|
232
|
+
|
233
|
+
def initialize(result)
|
234
|
+
@errors = result['errors']
|
235
|
+
@data = result['data']
|
236
|
+
end
|
237
|
+
|
238
|
+
def success?
|
239
|
+
@errors.nil? || @errors.empty?
|
240
|
+
end
|
241
|
+
|
242
|
+
def error?
|
243
|
+
!success?
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def initialize(loop, mutex)
|
248
|
+
@set = false
|
249
|
+
@result = nil
|
250
|
+
@mutex = mutex
|
251
|
+
@loop = loop
|
252
|
+
end
|
253
|
+
|
254
|
+
def set(v)
|
255
|
+
@result = Result.new(v)
|
256
|
+
@set = true
|
257
|
+
end
|
258
|
+
|
259
|
+
def errors
|
260
|
+
get.errors
|
261
|
+
end
|
262
|
+
|
263
|
+
def errors?
|
264
|
+
es = errors
|
265
|
+
es && !es.empty?
|
266
|
+
end
|
267
|
+
|
268
|
+
def data
|
269
|
+
get.data
|
270
|
+
end
|
271
|
+
|
272
|
+
def get
|
273
|
+
# Block until `set` method is called and @result is set
|
274
|
+
join if @result.nil?
|
275
|
+
@result
|
276
|
+
end
|
277
|
+
|
278
|
+
def wait
|
279
|
+
res = get
|
280
|
+
if res.error?
|
281
|
+
Fluent::Counter.raise_error(res.errors.first)
|
282
|
+
end
|
283
|
+
res
|
284
|
+
end
|
285
|
+
|
286
|
+
private
|
287
|
+
|
288
|
+
def join
|
289
|
+
until @set
|
290
|
+
@mutex.synchronize do
|
291
|
+
@loop.run_once(0.0001) # return a lock as soon as possible
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
297
|
+
end
|
@@ -0,0 +1,86 @@
|
|
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 Counter
|
19
|
+
class BaseError < StandardError
|
20
|
+
def to_hash
|
21
|
+
{ 'code' => code, 'message' => message }
|
22
|
+
end
|
23
|
+
|
24
|
+
def code
|
25
|
+
raise NotImplementedError
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class InvalidParams < BaseError
|
30
|
+
def code
|
31
|
+
'invalid_params'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class UnknownKey < BaseError
|
36
|
+
def code
|
37
|
+
'unknown_key'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class ParseError < BaseError
|
42
|
+
def code
|
43
|
+
'parse_error'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class InvalidRequest < BaseError
|
48
|
+
def code
|
49
|
+
'invalid_request'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class MethodNotFound < BaseError
|
54
|
+
def code
|
55
|
+
'method_not_found'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class InternalServerError < BaseError
|
60
|
+
def code
|
61
|
+
'internal_server_error'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def raise_error(response)
|
66
|
+
msg = response['message']
|
67
|
+
case response['code']
|
68
|
+
when 'invalid_params'
|
69
|
+
raise InvalidParams.new(msg)
|
70
|
+
when 'unknown_key'
|
71
|
+
raise UnknownKey.new(msg)
|
72
|
+
when 'parse_error'
|
73
|
+
raise ParseError.new(msg)
|
74
|
+
when 'invalid_request'
|
75
|
+
raise InvalidRequest.new(msg)
|
76
|
+
when 'method_not_found'
|
77
|
+
raise MethodNotFound.new(msg)
|
78
|
+
when 'internal_server_error'
|
79
|
+
raise InternalServerError.new(msg)
|
80
|
+
else
|
81
|
+
raise "Unknown code: #{response['code']}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
module_function :raise_error
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,163 @@
|
|
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 'timeout'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module Counter
|
21
|
+
class MutexHash
|
22
|
+
def initialize(data_store)
|
23
|
+
@mutex = Mutex.new
|
24
|
+
@data_store = data_store
|
25
|
+
@mutex_hash = {}
|
26
|
+
@thread = nil
|
27
|
+
@cleanup_thread = CleanupThread.new(@data_store, @mutex_hash, @mutex)
|
28
|
+
end
|
29
|
+
|
30
|
+
def start
|
31
|
+
@data_store.start
|
32
|
+
@cleanup_thread.start
|
33
|
+
end
|
34
|
+
|
35
|
+
def stop
|
36
|
+
@data_store.stop
|
37
|
+
@cleanup_thread.stop
|
38
|
+
end
|
39
|
+
|
40
|
+
def synchronize(*keys)
|
41
|
+
return if keys.empty?
|
42
|
+
|
43
|
+
locks = {}
|
44
|
+
loop do
|
45
|
+
@mutex.synchronize do
|
46
|
+
keys.each do |key|
|
47
|
+
mutex = @mutex_hash[key]
|
48
|
+
unless mutex
|
49
|
+
v = Mutex.new
|
50
|
+
@mutex_hash[key] = v
|
51
|
+
mutex = v
|
52
|
+
end
|
53
|
+
|
54
|
+
if mutex.try_lock
|
55
|
+
locks[key] = mutex
|
56
|
+
else
|
57
|
+
locks.values.each(&:unlock)
|
58
|
+
locks = {} # flush locked keys
|
59
|
+
break
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
next if locks.empty? # failed to lock all keys
|
65
|
+
|
66
|
+
locks.each do |(k, v)|
|
67
|
+
yield @data_store, k
|
68
|
+
v.unlock
|
69
|
+
end
|
70
|
+
break
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def synchronize_keys(*keys)
|
75
|
+
return if keys.empty?
|
76
|
+
keys = keys.dup
|
77
|
+
|
78
|
+
while key = keys.shift
|
79
|
+
@mutex.lock
|
80
|
+
|
81
|
+
mutex = @mutex_hash[key]
|
82
|
+
unless mutex
|
83
|
+
v = Mutex.new
|
84
|
+
@mutex_hash[key] = v
|
85
|
+
mutex = v
|
86
|
+
end
|
87
|
+
|
88
|
+
if mutex.try_lock
|
89
|
+
@mutex.unlock
|
90
|
+
yield @data_store, key
|
91
|
+
mutex.unlock
|
92
|
+
else
|
93
|
+
# release global lock
|
94
|
+
@mutex.unlock
|
95
|
+
keys.push(key) # failed lock, retry this key
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class CleanupThread
|
102
|
+
CLEANUP_INTERVAL = 60 * 15 # 15 min
|
103
|
+
|
104
|
+
def initialize(store, mutex_hash, mutex)
|
105
|
+
@store = store
|
106
|
+
@mutex_hash = mutex_hash
|
107
|
+
@mutex = mutex
|
108
|
+
@thread = nil
|
109
|
+
@running = false
|
110
|
+
end
|
111
|
+
|
112
|
+
def start
|
113
|
+
@running = true
|
114
|
+
@thread = Thread.new do
|
115
|
+
while @running
|
116
|
+
sleep CLEANUP_INTERVAL
|
117
|
+
run_once
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def stop
|
123
|
+
return unless @running
|
124
|
+
@running = false
|
125
|
+
begin
|
126
|
+
# Avoid waiting CLEANUP_INTERVAL
|
127
|
+
Timeout.timeout(1) do
|
128
|
+
@thread.join
|
129
|
+
end
|
130
|
+
rescue Timeout::Error
|
131
|
+
@thread.kill
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
private
|
136
|
+
|
137
|
+
def run_once
|
138
|
+
@mutex.synchronize do
|
139
|
+
last_cleanup_at = (Time.now - CLEANUP_INTERVAL).to_i
|
140
|
+
@mutex_hash.each do |(key, mutex)|
|
141
|
+
v = @store.get(key, raw: true)
|
142
|
+
next unless v
|
143
|
+
next if last_cleanup_at < v['last_modified_at'][0] # v['last_modified_at'] = [sec, nsec]
|
144
|
+
next unless mutex.try_lock
|
145
|
+
|
146
|
+
@mutex_hash[key] = nil
|
147
|
+
mutex.unlock
|
148
|
+
|
149
|
+
# Check that a waiting thread is in a lock queue.
|
150
|
+
# Can't get a lock here means this key is used in other places.
|
151
|
+
# So restore a mutex value to a corresponding key.
|
152
|
+
if mutex.try_lock
|
153
|
+
@mutex_hash.delete(key)
|
154
|
+
mutex.unlock
|
155
|
+
else
|
156
|
+
@mutex_hash[key] = mutex
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|