fluentd 1.14.4-x64-mingw-ucrt
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 +7 -0
- data/.deepsource.toml +13 -0
- data/.drone.yml +35 -0
- data/.github/ISSUE_TEMPLATE/bug_report.yaml +70 -0
- data/.github/ISSUE_TEMPLATE/config.yml +5 -0
- data/.github/ISSUE_TEMPLATE/feature_request.yaml +38 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +14 -0
- data/.github/workflows/issue-auto-closer.yml +12 -0
- data/.github/workflows/linux-test.yaml +36 -0
- data/.github/workflows/macos-test.yaml +30 -0
- data/.github/workflows/stale-actions.yml +22 -0
- data/.github/workflows/windows-test.yaml +46 -0
- data/.gitignore +30 -0
- data/.gitlab-ci.yml +103 -0
- data/ADOPTERS.md +5 -0
- data/AUTHORS +2 -0
- data/CHANGELOG.md +2409 -0
- data/CONTRIBUTING.md +45 -0
- data/GOVERNANCE.md +55 -0
- data/Gemfile +9 -0
- data/GithubWorkflow.md +78 -0
- data/LICENSE +202 -0
- data/MAINTAINERS.md +11 -0
- data/README.md +97 -0
- data/Rakefile +79 -0
- data/SECURITY.md +18 -0
- data/bin/fluent-binlog-reader +7 -0
- data/bin/fluent-ca-generate +6 -0
- data/bin/fluent-cap-ctl +7 -0
- data/bin/fluent-cat +5 -0
- data/bin/fluent-ctl +7 -0
- data/bin/fluent-debug +5 -0
- data/bin/fluent-gem +9 -0
- data/bin/fluent-plugin-config-format +5 -0
- data/bin/fluent-plugin-generate +5 -0
- data/bin/fluentd +15 -0
- data/code-of-conduct.md +3 -0
- data/docs/SECURITY_AUDIT.pdf +0 -0
- data/example/copy_roundrobin.conf +39 -0
- data/example/counter.conf +18 -0
- data/example/filter_stdout.conf +22 -0
- data/example/in_forward.conf +14 -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 +16 -0
- data/example/in_out_forward.conf +17 -0
- data/example/in_sample_blocks.conf +17 -0
- data/example/in_sample_with_compression.conf +23 -0
- data/example/in_syslog.conf +15 -0
- data/example/in_tail.conf +14 -0
- data/example/in_tcp.conf +13 -0
- data/example/in_udp.conf +13 -0
- data/example/logevents.conf +25 -0
- data/example/multi_filters.conf +61 -0
- data/example/out_copy.conf +20 -0
- data/example/out_exec_filter.conf +42 -0
- data/example/out_file.conf +13 -0
- data/example/out_forward.conf +35 -0
- 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_sd.conf +17 -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/sd.yaml +8 -0
- data/example/secondary_file.conf +42 -0
- data/example/suppress_config_dump.conf +7 -0
- data/example/v0_12_filter.conf +78 -0
- data/example/v1_literal_example.conf +36 -0
- data/example/worker_section.conf +36 -0
- data/fluent.conf +139 -0
- data/fluentd.gemspec +55 -0
- data/lib/fluent/agent.rb +168 -0
- data/lib/fluent/capability.rb +87 -0
- data/lib/fluent/clock.rb +66 -0
- data/lib/fluent/command/binlog_reader.rb +244 -0
- data/lib/fluent/command/bundler_injection.rb +45 -0
- data/lib/fluent/command/ca_generate.rb +184 -0
- data/lib/fluent/command/cap_ctl.rb +174 -0
- data/lib/fluent/command/cat.rb +365 -0
- data/lib/fluent/command/ctl.rb +177 -0
- data/lib/fluent/command/debug.rb +103 -0
- data/lib/fluent/command/fluentd.rb +374 -0
- data/lib/fluent/command/plugin_config_formatter.rb +308 -0
- data/lib/fluent/command/plugin_generator.rb +365 -0
- data/lib/fluent/compat/call_super_mixin.rb +76 -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 +721 -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/basic_parser.rb +123 -0
- data/lib/fluent/config/configure_proxy.rb +424 -0
- data/lib/fluent/config/dsl.rb +152 -0
- data/lib/fluent/config/element.rb +265 -0
- data/lib/fluent/config/error.rb +32 -0
- data/lib/fluent/config/literal_parser.rb +286 -0
- data/lib/fluent/config/parser.rb +107 -0
- data/lib/fluent/config/section.rb +272 -0
- data/lib/fluent/config/types.rb +249 -0
- data/lib/fluent/config/v1_parser.rb +192 -0
- data/lib/fluent/config.rb +76 -0
- data/lib/fluent/configurable.rb +201 -0
- data/lib/fluent/counter/base_socket.rb +44 -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/daemonizer.rb +88 -0
- data/lib/fluent/engine.rb +253 -0
- data/lib/fluent/env.rb +40 -0
- data/lib/fluent/error.rb +34 -0
- data/lib/fluent/event.rb +326 -0
- data/lib/fluent/event_router.rb +297 -0
- data/lib/fluent/ext_monitor_require.rb +28 -0
- data/lib/fluent/filter.rb +21 -0
- data/lib/fluent/fluent_log_event_router.rb +141 -0
- data/lib/fluent/formatter.rb +23 -0
- data/lib/fluent/input.rb +21 -0
- data/lib/fluent/label.rb +46 -0
- data/lib/fluent/load.rb +34 -0
- data/lib/fluent/log.rb +713 -0
- data/lib/fluent/match.rb +187 -0
- data/lib/fluent/mixin.rb +31 -0
- data/lib/fluent/msgpack_factory.rb +106 -0
- data/lib/fluent/oj_options.rb +62 -0
- data/lib/fluent/output.rb +29 -0
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +23 -0
- data/lib/fluent/plugin/bare_output.rb +104 -0
- data/lib/fluent/plugin/base.rb +197 -0
- data/lib/fluent/plugin/buf_file.rb +213 -0
- data/lib/fluent/plugin/buf_file_single.rb +225 -0
- data/lib/fluent/plugin/buf_memory.rb +34 -0
- data/lib/fluent/plugin/buffer/chunk.rb +240 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +413 -0
- data/lib/fluent/plugin/buffer/file_single_chunk.rb +311 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
- data/lib/fluent/plugin/buffer.rb +918 -0
- data/lib/fluent/plugin/compressable.rb +96 -0
- data/lib/fluent/plugin/exec_util.rb +22 -0
- data/lib/fluent/plugin/file_util.rb +22 -0
- data/lib/fluent/plugin/file_wrapper.rb +187 -0
- data/lib/fluent/plugin/filter.rb +127 -0
- data/lib/fluent/plugin/filter_grep.rb +189 -0
- data/lib/fluent/plugin/filter_parser.rb +130 -0
- data/lib/fluent/plugin/filter_record_transformer.rb +324 -0
- data/lib/fluent/plugin/filter_stdout.rb +53 -0
- data/lib/fluent/plugin/formatter.rb +75 -0
- data/lib/fluent/plugin/formatter_csv.rb +78 -0
- data/lib/fluent/plugin/formatter_hash.rb +35 -0
- data/lib/fluent/plugin/formatter_json.rb +59 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
- data/lib/fluent/plugin/formatter_out_file.rb +53 -0
- data/lib/fluent/plugin/formatter_single_value.rb +36 -0
- data/lib/fluent/plugin/formatter_stdout.rb +76 -0
- data/lib/fluent/plugin/formatter_tsv.rb +40 -0
- data/lib/fluent/plugin/in_debug_agent.rb +71 -0
- data/lib/fluent/plugin/in_dummy.rb +18 -0
- data/lib/fluent/plugin/in_exec.rb +110 -0
- data/lib/fluent/plugin/in_forward.rb +473 -0
- data/lib/fluent/plugin/in_gc_stat.rb +72 -0
- data/lib/fluent/plugin/in_http.rb +667 -0
- data/lib/fluent/plugin/in_monitor_agent.rb +412 -0
- data/lib/fluent/plugin/in_object_space.rb +93 -0
- data/lib/fluent/plugin/in_sample.rb +141 -0
- data/lib/fluent/plugin/in_syslog.rb +276 -0
- data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
- data/lib/fluent/plugin/in_tail.rb +1228 -0
- data/lib/fluent/plugin/in_tcp.rb +181 -0
- data/lib/fluent/plugin/in_udp.rb +92 -0
- data/lib/fluent/plugin/in_unix.rb +195 -0
- data/lib/fluent/plugin/input.rb +75 -0
- data/lib/fluent/plugin/metrics.rb +119 -0
- data/lib/fluent/plugin/metrics_local.rb +96 -0
- data/lib/fluent/plugin/multi_output.rb +195 -0
- data/lib/fluent/plugin/out_copy.rb +120 -0
- data/lib/fluent/plugin/out_exec.rb +105 -0
- data/lib/fluent/plugin/out_exec_filter.rb +319 -0
- data/lib/fluent/plugin/out_file.rb +334 -0
- data/lib/fluent/plugin/out_forward/ack_handler.rb +161 -0
- data/lib/fluent/plugin/out_forward/connection_manager.rb +113 -0
- data/lib/fluent/plugin/out_forward/error.rb +28 -0
- data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
- data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
- data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
- data/lib/fluent/plugin/out_forward/socket_cache.rb +140 -0
- data/lib/fluent/plugin/out_forward.rb +826 -0
- data/lib/fluent/plugin/out_http.rb +275 -0
- data/lib/fluent/plugin/out_null.rb +74 -0
- data/lib/fluent/plugin/out_relabel.rb +32 -0
- data/lib/fluent/plugin/out_roundrobin.rb +84 -0
- data/lib/fluent/plugin/out_secondary_file.rb +131 -0
- data/lib/fluent/plugin/out_stdout.rb +74 -0
- data/lib/fluent/plugin/out_stream.rb +130 -0
- data/lib/fluent/plugin/output.rb +1556 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
- data/lib/fluent/plugin/parser.rb +275 -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 +114 -0
- data/lib/fluent/plugin/parser_json.rb +96 -0
- data/lib/fluent/plugin/parser_ltsv.rb +51 -0
- data/lib/fluent/plugin/parser_msgpack.rb +50 -0
- data/lib/fluent/plugin/parser_multiline.rb +152 -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 +496 -0
- data/lib/fluent/plugin/parser_tsv.rb +42 -0
- data/lib/fluent/plugin/sd_file.rb +156 -0
- data/lib/fluent/plugin/sd_srv.rb +135 -0
- data/lib/fluent/plugin/sd_static.rb +58 -0
- data/lib/fluent/plugin/service_discovery.rb +65 -0
- data/lib/fluent/plugin/socket_util.rb +22 -0
- data/lib/fluent/plugin/storage.rb +84 -0
- data/lib/fluent/plugin/storage_local.rb +162 -0
- data/lib/fluent/plugin/string_util.rb +22 -0
- data/lib/fluent/plugin.rb +206 -0
- data/lib/fluent/plugin_helper/cert_option.rb +191 -0
- data/lib/fluent/plugin_helper/child_process.rb +366 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
- data/lib/fluent/plugin_helper/counter.rb +51 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +100 -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 +92 -0
- data/lib/fluent/plugin_helper/http_server/compat/ssl_context_extractor.rb +52 -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 +93 -0
- data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
- data/lib/fluent/plugin_helper/http_server.rb +135 -0
- data/lib/fluent/plugin_helper/inject.rb +154 -0
- data/lib/fluent/plugin_helper/metrics.rb +129 -0
- data/lib/fluent/plugin_helper/parser.rb +147 -0
- data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
- data/lib/fluent/plugin_helper/retry_state.rb +209 -0
- data/lib/fluent/plugin_helper/server.rb +801 -0
- data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
- data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
- data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
- data/lib/fluent/plugin_helper/socket.rb +277 -0
- data/lib/fluent/plugin_helper/socket_option.rb +98 -0
- data/lib/fluent/plugin_helper/storage.rb +349 -0
- data/lib/fluent/plugin_helper/thread.rb +180 -0
- data/lib/fluent/plugin_helper/timer.rb +92 -0
- data/lib/fluent/plugin_helper.rb +75 -0
- data/lib/fluent/plugin_id.rb +93 -0
- data/lib/fluent/process.rb +22 -0
- data/lib/fluent/registry.rb +116 -0
- data/lib/fluent/root_agent.rb +372 -0
- data/lib/fluent/rpc.rb +94 -0
- data/lib/fluent/static_config_analysis.rb +194 -0
- data/lib/fluent/supervisor.rb +1054 -0
- data/lib/fluent/system_config.rb +187 -0
- data/lib/fluent/test/base.rb +78 -0
- data/lib/fluent/test/driver/base.rb +225 -0
- data/lib/fluent/test/driver/base_owned.rb +83 -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/storage.rb +30 -0
- data/lib/fluent/test/driver/test_event_router.rb +45 -0
- data/lib/fluent/test/filter_test.rb +77 -0
- data/lib/fluent/test/formatter_test.rb +65 -0
- data/lib/fluent/test/helpers.rb +134 -0
- data/lib/fluent/test/input_test.rb +174 -0
- data/lib/fluent/test/log.rb +79 -0
- data/lib/fluent/test/output_test.rb +156 -0
- data/lib/fluent/test/parser_test.rb +70 -0
- data/lib/fluent/test/startup_shutdown.rb +46 -0
- data/lib/fluent/test.rb +58 -0
- data/lib/fluent/time.rb +512 -0
- data/lib/fluent/timezone.rb +171 -0
- data/lib/fluent/tls.rb +81 -0
- data/lib/fluent/unique_id.rb +39 -0
- data/lib/fluent/variable_store.rb +40 -0
- data/lib/fluent/version.rb +21 -0
- data/lib/fluent/winsvc.rb +103 -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/lib/fluent/plugin/storage.rb.erb +40 -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/new_gem/test/plugin/test_storage.rb.erb +18 -0
- data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
- data/templates/plugin_config_formatter/param.md-table.erb +10 -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 +362 -0
- data/test/command/test_ca_generate.rb +70 -0
- data/test/command/test_cap_ctl.rb +100 -0
- data/test/command/test_cat.rb +128 -0
- data/test/command/test_ctl.rb +57 -0
- data/test/command/test_fluentd.rb +1106 -0
- data/test/command/test_plugin_config_formatter.rb +398 -0
- data/test/command/test_plugin_generator.rb +109 -0
- data/test/compat/test_calls_super.rb +166 -0
- data/test/compat/test_parser.rb +92 -0
- data/test/config/assertions.rb +42 -0
- data/test/config/test_config_parser.rb +551 -0
- data/test/config/test_configurable.rb +1784 -0
- data/test/config/test_configure_proxy.rb +604 -0
- data/test/config/test_dsl.rb +415 -0
- data/test/config/test_element.rb +518 -0
- data/test/config/test_literal_parser.rb +309 -0
- data/test/config/test_plugin_configuration.rb +56 -0
- data/test/config/test_section.rb +191 -0
- data/test/config/test_system_config.rb +199 -0
- data/test/config/test_types.rb +408 -0
- data/test/counter/test_client.rb +563 -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 +155 -0
- data/test/helpers/fuzzy_assert.rb +89 -0
- data/test/helpers/process_extenstion.rb +33 -0
- data/test/plugin/data/2010/01/20100102-030405.log +0 -0
- data/test/plugin/data/2010/01/20100102-030406.log +0 -0
- data/test/plugin/data/2010/01/20100102.log +0 -0
- data/test/plugin/data/log/bar +0 -0
- data/test/plugin/data/log/foo/bar.log +0 -0
- data/test/plugin/data/log/foo/bar2 +0 -0
- data/test/plugin/data/log/test.log +0 -0
- data/test/plugin/data/sd_file/config +11 -0
- data/test/plugin/data/sd_file/config.json +17 -0
- data/test/plugin/data/sd_file/config.yaml +11 -0
- data/test/plugin/data/sd_file/config.yml +11 -0
- data/test/plugin/data/sd_file/invalid_config.yml +7 -0
- data/test/plugin/in_tail/test_fifo.rb +121 -0
- data/test/plugin/in_tail/test_io_handler.rb +140 -0
- data/test/plugin/in_tail/test_position_file.rb +379 -0
- data/test/plugin/out_forward/test_ack_handler.rb +101 -0
- data/test/plugin/out_forward/test_connection_manager.rb +145 -0
- data/test/plugin/out_forward/test_handshake_protocol.rb +112 -0
- data/test/plugin/out_forward/test_load_balancer.rb +106 -0
- data/test/plugin/out_forward/test_socket_cache.rb +149 -0
- data/test/plugin/test_bare_output.rb +131 -0
- data/test/plugin/test_base.rb +115 -0
- data/test/plugin/test_buf_file.rb +1275 -0
- data/test/plugin/test_buf_file_single.rb +833 -0
- data/test/plugin/test_buf_memory.rb +42 -0
- data/test/plugin/test_buffer.rb +1383 -0
- data/test/plugin/test_buffer_chunk.rb +198 -0
- data/test/plugin/test_buffer_file_chunk.rb +871 -0
- data/test/plugin/test_buffer_file_single_chunk.rb +611 -0
- data/test/plugin/test_buffer_memory_chunk.rb +339 -0
- data/test/plugin/test_compressable.rb +87 -0
- data/test/plugin/test_file_util.rb +96 -0
- data/test/plugin/test_file_wrapper.rb +126 -0
- data/test/plugin/test_filter.rb +368 -0
- data/test/plugin/test_filter_grep.rb +697 -0
- data/test/plugin/test_filter_parser.rb +731 -0
- data/test/plugin/test_filter_record_transformer.rb +577 -0
- data/test/plugin/test_filter_stdout.rb +207 -0
- data/test/plugin/test_formatter_csv.rb +136 -0
- data/test/plugin/test_formatter_hash.rb +38 -0
- data/test/plugin/test_formatter_json.rb +61 -0
- data/test/plugin/test_formatter_ltsv.rb +70 -0
- data/test/plugin/test_formatter_msgpack.rb +28 -0
- data/test/plugin/test_formatter_out_file.rb +116 -0
- data/test/plugin/test_formatter_single_value.rb +44 -0
- data/test/plugin/test_formatter_tsv.rb +76 -0
- data/test/plugin/test_in_debug_agent.rb +49 -0
- data/test/plugin/test_in_exec.rb +261 -0
- data/test/plugin/test_in_forward.rb +1180 -0
- data/test/plugin/test_in_gc_stat.rb +62 -0
- data/test/plugin/test_in_http.rb +1080 -0
- data/test/plugin/test_in_monitor_agent.rb +923 -0
- data/test/plugin/test_in_object_space.rb +60 -0
- data/test/plugin/test_in_sample.rb +190 -0
- data/test/plugin/test_in_syslog.rb +505 -0
- data/test/plugin/test_in_tail.rb +2363 -0
- data/test/plugin/test_in_tcp.rb +243 -0
- data/test/plugin/test_in_udp.rb +268 -0
- data/test/plugin/test_in_unix.rb +181 -0
- data/test/plugin/test_input.rb +137 -0
- data/test/plugin/test_metadata.rb +89 -0
- data/test/plugin/test_metrics.rb +294 -0
- data/test/plugin/test_metrics_local.rb +96 -0
- data/test/plugin/test_multi_output.rb +204 -0
- data/test/plugin/test_out_copy.rb +308 -0
- data/test/plugin/test_out_exec.rb +312 -0
- data/test/plugin/test_out_exec_filter.rb +606 -0
- data/test/plugin/test_out_file.rb +1037 -0
- data/test/plugin/test_out_forward.rb +1348 -0
- data/test/plugin/test_out_http.rb +428 -0
- 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 +146 -0
- data/test/plugin/test_out_secondary_file.rb +458 -0
- data/test/plugin/test_out_stdout.rb +205 -0
- data/test/plugin/test_out_stream.rb +103 -0
- data/test/plugin/test_output.rb +1065 -0
- data/test/plugin/test_output_as_buffered.rb +2024 -0
- data/test/plugin/test_output_as_buffered_backup.rb +363 -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 +919 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +882 -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 +399 -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 +200 -0
- data/test/plugin/test_parser_json.rb +138 -0
- data/test/plugin/test_parser_labeled_tsv.rb +160 -0
- data/test/plugin/test_parser_multiline.rb +111 -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 +650 -0
- data/test/plugin/test_parser_tsv.rb +122 -0
- data/test/plugin/test_sd_file.rb +228 -0
- data/test/plugin/test_sd_srv.rb +230 -0
- data/test/plugin/test_storage.rb +167 -0
- data/test/plugin/test_storage_local.rb +335 -0
- data/test/plugin/test_string_util.rb +26 -0
- data/test/plugin_helper/data/cert/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert-with-CRLF.pem +19 -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/data/cert/cert_chains/ca-cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +20 -0
- data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert_chains/cert.pem +40 -0
- data/test/plugin_helper/data/cert/empty.pem +0 -0
- data/test/plugin_helper/data/cert/generate_cert.rb +125 -0
- data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +30 -0
- data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +20 -0
- data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +20 -0
- data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +30 -0
- data/test/plugin_helper/data/cert/with_ca/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +21 -0
- data/test/plugin_helper/data/cert/with_ca/cert.pem +21 -0
- data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +30 -0
- data/test/plugin_helper/data/cert/without_ca/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +20 -0
- data/test/plugin_helper/data/cert/without_ca/cert.pem +20 -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/service_discovery/test_manager.rb +93 -0
- data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +21 -0
- data/test/plugin_helper/test_cert_option.rb +25 -0
- data/test/plugin_helper/test_child_process.rb +840 -0
- data/test/plugin_helper/test_compat_parameters.rb +358 -0
- data/test/plugin_helper/test_event_emitter.rb +80 -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 +372 -0
- data/test/plugin_helper/test_inject.rb +561 -0
- data/test/plugin_helper/test_metrics.rb +137 -0
- data/test/plugin_helper/test_parser.rb +264 -0
- data/test/plugin_helper/test_record_accessor.rb +238 -0
- data/test/plugin_helper/test_retry_state.rb +442 -0
- data/test/plugin_helper/test_server.rb +1823 -0
- data/test/plugin_helper/test_service_discovery.rb +165 -0
- data/test/plugin_helper/test_socket.rb +146 -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 +130 -0
- data/test/scripts/exec_script.rb +32 -0
- 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/formatter_known.rb +8 -0
- data/test/scripts/fluent/plugin/out_test.rb +81 -0
- data/test/scripts/fluent/plugin/out_test2.rb +80 -0
- data/test/scripts/fluent/plugin/parser_known.rb +4 -0
- data/test/test_capability.rb +74 -0
- data/test/test_clock.rb +164 -0
- data/test/test_config.rb +202 -0
- data/test/test_configdsl.rb +148 -0
- data/test/test_daemonizer.rb +91 -0
- data/test/test_engine.rb +203 -0
- data/test/test_event.rb +531 -0
- data/test/test_event_router.rb +331 -0
- data/test/test_event_time.rb +199 -0
- data/test/test_filter.rb +121 -0
- data/test/test_fluent_log_event_router.rb +99 -0
- data/test/test_formatter.rb +366 -0
- data/test/test_input.rb +31 -0
- data/test/test_log.rb +994 -0
- data/test/test_logger_initializer.rb +46 -0
- data/test/test_match.rb +148 -0
- data/test/test_mixin.rb +351 -0
- data/test/test_msgpack_factory.rb +18 -0
- data/test/test_oj_options.rb +55 -0
- data/test/test_output.rb +278 -0
- data/test/test_plugin.rb +251 -0
- data/test/test_plugin_classes.rb +370 -0
- data/test/test_plugin_helper.rb +81 -0
- data/test/test_plugin_id.rb +119 -0
- data/test/test_process.rb +14 -0
- data/test/test_root_agent.rb +951 -0
- data/test/test_static_config_analysis.rb +177 -0
- data/test/test_supervisor.rb +601 -0
- data/test/test_test_drivers.rb +136 -0
- data/test/test_time_formatter.rb +301 -0
- data/test/test_time_parser.rb +362 -0
- data/test/test_tls.rb +65 -0
- data/test/test_unique_id.rb +47 -0
- data/test/test_variable_store.rb +65 -0
- metadata +1261 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
#
|
2
|
+
# Fluent
|
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/config/error'
|
18
|
+
require 'fluent/config/element'
|
19
|
+
require 'fluent/configurable'
|
20
|
+
|
21
|
+
module Fluent
|
22
|
+
module Config
|
23
|
+
# @param config_path [String] config file path
|
24
|
+
# @param encoding [String] encoding of config file
|
25
|
+
# @param additional_config [String] config which is added to last of config body
|
26
|
+
# @param use_v1_config [Bool] config is formatted with v1 or not
|
27
|
+
# @return [Fluent::Config]
|
28
|
+
def self.build(config_path:, encoding: 'utf-8', additional_config: nil, use_v1_config: true)
|
29
|
+
config_fname = File.basename(config_path)
|
30
|
+
config_basedir = File.dirname(config_path)
|
31
|
+
config_data = File.open(config_path, "r:#{encoding}:utf-8") do |f|
|
32
|
+
s = f.read
|
33
|
+
if additional_config
|
34
|
+
c = additional_config.gsub("\\n", "\n")
|
35
|
+
s += "\n#{c}"
|
36
|
+
end
|
37
|
+
s
|
38
|
+
end
|
39
|
+
Fluent::Config.parse(config_data, config_fname, config_basedir, use_v1_config)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.parse(str, fname, basepath = Dir.pwd, v1_config = nil, syntax: :v1)
|
43
|
+
parser = if fname =~ /\.rb$/ || syntax == :ruby
|
44
|
+
:ruby
|
45
|
+
elsif v1_config.nil?
|
46
|
+
case syntax
|
47
|
+
when :v1 then :v1
|
48
|
+
when :v0 then :v0
|
49
|
+
else
|
50
|
+
raise ArgumentError, "Unknown Fluentd configuration syntax: '#{syntax}'"
|
51
|
+
end
|
52
|
+
elsif v1_config then :v1
|
53
|
+
else :v0
|
54
|
+
end
|
55
|
+
case parser
|
56
|
+
when :v1
|
57
|
+
require 'fluent/config/v1_parser'
|
58
|
+
V1Parser.parse(str, fname, basepath, Kernel.binding)
|
59
|
+
when :v0
|
60
|
+
# TODO: show deprecated message in v1
|
61
|
+
require 'fluent/config/parser'
|
62
|
+
Parser.parse(str, fname, basepath)
|
63
|
+
when :ruby
|
64
|
+
require 'fluent/config/dsl'
|
65
|
+
$log.warn("Ruby DSL configuration format is deprecated. Please use original configuration format. https://docs.fluentd.org/configuration/config-file") if $log
|
66
|
+
Config::DSL::Parser.parse(str, File.join(basepath, fname))
|
67
|
+
else
|
68
|
+
raise "[BUG] unknown configuration parser specification:'#{parser}'"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.new(name = '')
|
73
|
+
Element.new(name, '', {}, [])
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,201 @@
|
|
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/config/configure_proxy'
|
18
|
+
require 'fluent/config/section'
|
19
|
+
require 'fluent/config/error'
|
20
|
+
require 'fluent/registry'
|
21
|
+
require 'fluent/plugin'
|
22
|
+
require 'fluent/config/types'
|
23
|
+
|
24
|
+
module Fluent
|
25
|
+
module Configurable
|
26
|
+
def self.included(mod)
|
27
|
+
mod.extend(ClassMethods)
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
super
|
32
|
+
# to simulate implicit 'attr_accessor' by config_param / config_section and its value by config_set_default
|
33
|
+
proxy = self.class.merged_configure_proxy
|
34
|
+
proxy.params.keys.each do |name|
|
35
|
+
next if name.to_s.start_with?('@')
|
36
|
+
if proxy.defaults.has_key?(name)
|
37
|
+
instance_variable_set("@#{name}".to_sym, proxy.defaults[name])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
proxy.sections.keys.each do |name|
|
41
|
+
next if name.to_s.start_with?('@')
|
42
|
+
subproxy = proxy.sections[name]
|
43
|
+
if subproxy.multi?
|
44
|
+
instance_variable_set("@#{subproxy.variable_name}".to_sym, [])
|
45
|
+
else
|
46
|
+
instance_variable_set("@#{subproxy.variable_name}".to_sym, nil)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def configure_proxy_generate
|
52
|
+
proxy = self.class.merged_configure_proxy
|
53
|
+
|
54
|
+
if self.respond_to?(:owner) && self.owner
|
55
|
+
owner_proxy = owner.class.merged_configure_proxy
|
56
|
+
if proxy.configured_in_section
|
57
|
+
owner_proxy = owner_proxy.sections[proxy.configured_in_section]
|
58
|
+
end
|
59
|
+
proxy.overwrite_defaults(owner_proxy) if owner_proxy
|
60
|
+
end
|
61
|
+
|
62
|
+
proxy
|
63
|
+
end
|
64
|
+
|
65
|
+
def configured_section_create(name, conf = nil)
|
66
|
+
conf ||= Fluent::Config::Element.new(name.to_s, '', {}, [])
|
67
|
+
root_proxy = configure_proxy_generate
|
68
|
+
proxy = if name.nil? # root
|
69
|
+
root_proxy
|
70
|
+
else
|
71
|
+
root_proxy.sections[name]
|
72
|
+
end
|
73
|
+
# take care to raise Fluent::ConfigError if conf mismatched to proxy
|
74
|
+
Fluent::Config::SectionGenerator.generate(proxy, conf, nil, nil)
|
75
|
+
end
|
76
|
+
|
77
|
+
def configure(conf, strict_config_value=false)
|
78
|
+
@config = conf
|
79
|
+
|
80
|
+
logger = if self.respond_to?(:log)
|
81
|
+
self.log
|
82
|
+
elsif self.respond_to?(:owner) && self.owner.respond_to?(:log)
|
83
|
+
self.owner.log
|
84
|
+
elsif defined?($log)
|
85
|
+
$log
|
86
|
+
else
|
87
|
+
nil
|
88
|
+
end
|
89
|
+
proxy = configure_proxy_generate
|
90
|
+
conf.corresponding_proxies << proxy
|
91
|
+
|
92
|
+
# In the nested section, can't get plugin class through proxies so get plugin class here
|
93
|
+
plugin_class = Fluent::Plugin.lookup_type_from_class(proxy.name.to_s)
|
94
|
+
root = Fluent::Config::SectionGenerator.generate(proxy, conf, logger, plugin_class, [], strict_config_value)
|
95
|
+
@config_root_section = root
|
96
|
+
|
97
|
+
root.instance_eval{ @params.keys }.each do |param_name|
|
98
|
+
next if param_name.to_s.start_with?('@')
|
99
|
+
varname = "@#{param_name}".to_sym
|
100
|
+
instance_variable_set(varname, root[param_name])
|
101
|
+
end
|
102
|
+
|
103
|
+
self
|
104
|
+
end
|
105
|
+
|
106
|
+
def config
|
107
|
+
@masked_config ||= @config.to_masked_element
|
108
|
+
end
|
109
|
+
|
110
|
+
CONFIG_TYPE_REGISTRY = Registry.new(:config_type, 'fluent/plugin/type_')
|
111
|
+
|
112
|
+
def self.register_type(type, callable = nil, &block)
|
113
|
+
callable ||= block
|
114
|
+
CONFIG_TYPE_REGISTRY.register(type, callable)
|
115
|
+
end
|
116
|
+
|
117
|
+
def self.lookup_type(type)
|
118
|
+
CONFIG_TYPE_REGISTRY.lookup(type)
|
119
|
+
end
|
120
|
+
|
121
|
+
{
|
122
|
+
string: Config::STRING_TYPE,
|
123
|
+
enum: Config::ENUM_TYPE,
|
124
|
+
integer: Config::INTEGER_TYPE,
|
125
|
+
float: Config::FLOAT_TYPE,
|
126
|
+
size: Config::SIZE_TYPE,
|
127
|
+
bool: Config::BOOL_TYPE,
|
128
|
+
time: Config::TIME_TYPE,
|
129
|
+
hash: Config::HASH_TYPE,
|
130
|
+
array: Config::ARRAY_TYPE,
|
131
|
+
regexp: Config::REGEXP_TYPE,
|
132
|
+
}.each do |name, type|
|
133
|
+
register_type(name, type)
|
134
|
+
end
|
135
|
+
|
136
|
+
module ClassMethods
|
137
|
+
def configure_proxy_map
|
138
|
+
map = {}
|
139
|
+
self.define_singleton_method(:configure_proxy_map){ map }
|
140
|
+
map
|
141
|
+
end
|
142
|
+
|
143
|
+
def configure_proxy(mod_name)
|
144
|
+
map = configure_proxy_map
|
145
|
+
unless map[mod_name]
|
146
|
+
type_lookup = ->(type) { Fluent::Configurable.lookup_type(type) }
|
147
|
+
proxy = Fluent::Config::ConfigureProxy.new(mod_name, root: true, required: true, multi: false, type_lookup: type_lookup)
|
148
|
+
map[mod_name] = proxy
|
149
|
+
end
|
150
|
+
map[mod_name]
|
151
|
+
end
|
152
|
+
|
153
|
+
def configured_in(section_name)
|
154
|
+
configure_proxy(self.name).configured_in(section_name)
|
155
|
+
end
|
156
|
+
|
157
|
+
def config_param(name, type = nil, **kwargs, &block)
|
158
|
+
configure_proxy(self.name).config_param(name, type, **kwargs, &block)
|
159
|
+
# reserved names '@foo' are invalid as attr_accessor name
|
160
|
+
attr_accessor(name) unless kwargs[:skip_accessor] || Fluent::Config::Element::RESERVED_PARAMETERS.include?(name.to_s)
|
161
|
+
end
|
162
|
+
|
163
|
+
def config_set_default(name, defval)
|
164
|
+
configure_proxy(self.name).config_set_default(name, defval)
|
165
|
+
end
|
166
|
+
|
167
|
+
def config_set_desc(name, desc)
|
168
|
+
configure_proxy(self.name).config_set_desc(name, desc)
|
169
|
+
end
|
170
|
+
|
171
|
+
def config_section(name, **kwargs, &block)
|
172
|
+
section_already_exists = !!merged_configure_proxy.sections[name]
|
173
|
+
configure_proxy(self.name).config_section(name, **kwargs, &block)
|
174
|
+
variable_name = configure_proxy(self.name).sections[name].variable_name
|
175
|
+
if !section_already_exists && !self.respond_to?(variable_name)
|
176
|
+
attr_accessor variable_name
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def desc(description)
|
181
|
+
configure_proxy(self.name).desc(description)
|
182
|
+
end
|
183
|
+
|
184
|
+
def merged_configure_proxy
|
185
|
+
configurables = ancestors.reverse.select{ |a| a.respond_to?(:configure_proxy) }
|
186
|
+
|
187
|
+
# 'a.object_id.to_s' is to support anonymous class
|
188
|
+
# which created in tests to overwrite original behavior temporally
|
189
|
+
#
|
190
|
+
# p Module.new.name #=> nil
|
191
|
+
# p Class.new.name #=> nil
|
192
|
+
# p AnyGreatClass.dup.name #=> nil
|
193
|
+
configurables.map{ |a| a.configure_proxy(a.name || a.object_id.to_s) }.reduce(:merge)
|
194
|
+
end
|
195
|
+
|
196
|
+
def dump_config_definition
|
197
|
+
configure_proxy_map[self.to_s].dump_config_definition
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
@@ -0,0 +1,44 @@
|
|
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/msgpack_factory'
|
19
|
+
|
20
|
+
module Fluent
|
21
|
+
module Counter
|
22
|
+
class BaseSocket < Coolio::TCPSocket
|
23
|
+
def packed_write(data)
|
24
|
+
write pack(data)
|
25
|
+
end
|
26
|
+
|
27
|
+
def on_read(data)
|
28
|
+
Fluent::MessagePackFactory.msgpack_unpacker.feed_each(data) do |d|
|
29
|
+
on_message d
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def on_message(data)
|
34
|
+
raise NotImplementedError
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def pack(data)
|
40
|
+
Fluent::MessagePackFactory.msgpack_packer.pack(data)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -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
|