fluentd 1.20.0-aarch64-mingw-ucrt
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rubocop.yml +116 -0
- data/ADOPTERS.md +5 -0
- data/AGENTS.md +46 -0
- data/AUTHORS +2 -0
- data/CHANGELOG.md +3324 -0
- data/CONTRIBUTING.md +45 -0
- data/GOVERNANCE.md +55 -0
- data/GithubWorkflow.md +78 -0
- data/LICENSE +202 -0
- data/MAINTAINERS.md +19 -0
- data/README.md +73 -0
- data/Rakefile +89 -0
- data/SECURITY.md +47 -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/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 +180 -0
- data/lib/fluent/command/debug.rb +103 -0
- data/lib/fluent/command/fluentd.rb +385 -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 +144 -0
- data/lib/fluent/compat/file_util.rb +54 -0
- data/lib/fluent/compat/filter.rb +68 -0
- data/lib/fluent/compat/formatter.rb +117 -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 +122 -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 +44 -0
- data/lib/fluent/config/literal_parser.rb +305 -0
- data/lib/fluent/config/parser.rb +119 -0
- data/lib/fluent/config/section.rb +272 -0
- data/lib/fluent/config/types.rb +257 -0
- data/lib/fluent/config/v1_parser.rb +200 -0
- data/lib/fluent/config/yaml_parser/fluent_value.rb +47 -0
- data/lib/fluent/config/yaml_parser/loader.rb +124 -0
- data/lib/fluent/config/yaml_parser/parser.rb +179 -0
- data/lib/fluent/config/yaml_parser/section_builder.rb +107 -0
- data/lib/fluent/config/yaml_parser.rb +56 -0
- data/lib/fluent/config.rb +89 -0
- data/lib/fluent/configurable.rb +202 -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 +14 -0
- data/lib/fluent/daemonizer.rb +88 -0
- data/lib/fluent/engine.rb +269 -0
- data/lib/fluent/env.rb +45 -0
- data/lib/fluent/error.rb +37 -0
- data/lib/fluent/event.rb +369 -0
- data/lib/fluent/event_router.rb +315 -0
- data/lib/fluent/ext_monitor_require.rb +28 -0
- data/lib/fluent/file_wrapper.rb +137 -0
- data/lib/fluent/filter.rb +21 -0
- data/lib/fluent/fluent_log_event_router.rb +139 -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 +33 -0
- data/lib/fluent/log/console_adapter.rb +66 -0
- data/lib/fluent/log.rb +775 -0
- data/lib/fluent/match.rb +187 -0
- data/lib/fluent/mixin.rb +31 -0
- data/lib/fluent/msgpack_factory.rb +111 -0
- data/lib/fluent/oj_options.rb +61 -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 +88 -0
- data/lib/fluent/plugin/base.rb +219 -0
- data/lib/fluent/plugin/buf_file.rb +256 -0
- data/lib/fluent/plugin/buf_file_single.rb +272 -0
- data/lib/fluent/plugin/buf_memory.rb +34 -0
- data/lib/fluent/plugin/buffer/chunk.rb +313 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +432 -0
- data/lib/fluent/plugin/buffer/file_single_chunk.rb +325 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
- data/lib/fluent/plugin/buffer.rb +1063 -0
- data/lib/fluent/plugin/compressable.rb +87 -0
- data/lib/fluent/plugin/exec_util.rb +22 -0
- data/lib/fluent/plugin/extractor.rb +132 -0
- data/lib/fluent/plugin/file_util.rb +22 -0
- data/lib/fluent/plugin/filter.rb +119 -0
- data/lib/fluent/plugin/filter_grep.rb +189 -0
- data/lib/fluent/plugin/filter_parser.rb +124 -0
- data/lib/fluent/plugin/filter_record_transformer.rb +325 -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 +92 -0
- data/lib/fluent/plugin/formatter_hash.rb +35 -0
- data/lib/fluent/plugin/formatter_json.rb +62 -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 +55 -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 +124 -0
- data/lib/fluent/plugin/in_forward.rb +489 -0
- data/lib/fluent/plugin/in_gc_stat.rb +72 -0
- data/lib/fluent/plugin/in_http.rb +737 -0
- data/lib/fluent/plugin/in_monitor_agent.rb +406 -0
- data/lib/fluent/plugin/in_object_space.rb +93 -0
- data/lib/fluent/plugin/in_sample.rb +148 -0
- data/lib/fluent/plugin/in_syslog.rb +346 -0
- data/lib/fluent/plugin/in_tail/compatibility.rb +111 -0
- data/lib/fluent/plugin/in_tail/dir_watcher.rb +713 -0
- data/lib/fluent/plugin/in_tail/group_watch.rb +204 -0
- data/lib/fluent/plugin/in_tail/io_handler.rb +391 -0
- data/lib/fluent/plugin/in_tail/line_feeder.rb +230 -0
- data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
- data/lib/fluent/plugin/in_tail/stat_watcher.rb +52 -0
- data/lib/fluent/plugin/in_tail/tail_watcher.rb +276 -0
- data/lib/fluent/plugin/in_tail/worker_pool.rb +298 -0
- data/lib/fluent/plugin/in_tail.rb +917 -0
- data/lib/fluent/plugin/in_tcp.rb +230 -0
- data/lib/fluent/plugin/in_udp.rb +101 -0
- data/lib/fluent/plugin/in_unix.rb +197 -0
- data/lib/fluent/plugin/input.rb +71 -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 +179 -0
- data/lib/fluent/plugin/out_buffer.rb +40 -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 +371 -0
- data/lib/fluent/plugin/out_forward/ack_handler.rb +176 -0
- data/lib/fluent/plugin/out_forward/connection_manager.rb +131 -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 +177 -0
- data/lib/fluent/plugin/out_forward.rb +865 -0
- data/lib/fluent/plugin/out_http.rb +419 -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 +148 -0
- data/lib/fluent/plugin/out_stdout.rb +81 -0
- data/lib/fluent/plugin/out_stream.rb +130 -0
- data/lib/fluent/plugin/output.rb +1688 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +41 -0
- data/lib/fluent/plugin/parser.rb +274 -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 +124 -0
- data/lib/fluent/plugin/parser_json.rb +118 -0
- data/lib/fluent/plugin/parser_ltsv.rb +49 -0
- data/lib/fluent/plugin/parser_msgpack.rb +72 -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 +543 -0
- data/lib/fluent/plugin/parser_tsv.rb +47 -0
- data/lib/fluent/plugin/sd_file.rb +157 -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 +166 -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 +199 -0
- data/lib/fluent/plugin_helper/child_process.rb +369 -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 +112 -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 +81 -0
- data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
- data/lib/fluent/plugin_helper/http_server/request.rb +53 -0
- data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
- data/lib/fluent/plugin_helper/http_server/server.rb +116 -0
- data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
- data/lib/fluent/plugin_helper/http_server.rb +129 -0
- data/lib/fluent/plugin_helper/inject.rb +154 -0
- data/lib/fluent/plugin_helper/metrics.rb +136 -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 +219 -0
- data/lib/fluent/plugin_helper/server.rb +840 -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 +288 -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 +117 -0
- data/lib/fluent/root_agent.rb +468 -0
- data/lib/fluent/rpc.rb +95 -0
- data/lib/fluent/source_only_buffer_agent.rb +102 -0
- data/lib/fluent/static_config_analysis.rb +195 -0
- data/lib/fluent/supervisor.rb +1347 -0
- data/lib/fluent/system_config.rb +213 -0
- data/lib/fluent/test/base.rb +83 -0
- data/lib/fluent/test/driver/base.rb +231 -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 +61 -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 +138 -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 +44 -0
- data/lib/fluent/test.rb +61 -0
- data/lib/fluent/time.rb +513 -0
- data/lib/fluent/timezone.rb +171 -0
- data/lib/fluent/tls.rb +105 -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/win32api.rb +38 -0
- data/lib/fluent/winsvc.rb +130 -0
- data/templates/new_gem/.gitignore +8 -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 +28 -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 +7 -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
- metadata +996 -0
|
@@ -0,0 +1,104 @@
|
|
|
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/event'
|
|
18
|
+
require 'fluent/time'
|
|
19
|
+
require 'fluent/configurable'
|
|
20
|
+
|
|
21
|
+
module Fluent
|
|
22
|
+
module PluginHelper
|
|
23
|
+
module Extract
|
|
24
|
+
def extract_tag_from_record(record)
|
|
25
|
+
return nil unless @_extract_enabled
|
|
26
|
+
|
|
27
|
+
if @_extract_tag_key && record.has_key?(@_extract_tag_key)
|
|
28
|
+
v = @_extract_keep_tag_key ? record[@_extract_tag_key] : record.delete(@_extract_tag_key)
|
|
29
|
+
return v.to_s
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def extract_time_from_record(record)
|
|
36
|
+
return nil unless @_extract_enabled
|
|
37
|
+
|
|
38
|
+
if @_extract_time_key && record.has_key?(@_extract_time_key)
|
|
39
|
+
v = @_extract_keep_time_key ? record[@_extract_time_key] : record.delete(@_extract_time_key)
|
|
40
|
+
return @_extract_time_parser.call(v)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
nil
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
module ExtractParams
|
|
47
|
+
include Fluent::Configurable
|
|
48
|
+
config_section :extract, required: false, multi: false, param_name: :extract_config do
|
|
49
|
+
config_param :tag_key, :string, default: nil
|
|
50
|
+
config_param :keep_tag_key, :bool, default: false
|
|
51
|
+
config_param :time_key, :string, default: nil
|
|
52
|
+
config_param :keep_time_key, :bool, default: false
|
|
53
|
+
|
|
54
|
+
# To avoid defining :time_type twice
|
|
55
|
+
config_param :time_type, :enum, list: [:float, :unixtime, :string], default: :float
|
|
56
|
+
|
|
57
|
+
Fluent::TimeMixin::TIME_PARAMETERS.each do |name, type, opts|
|
|
58
|
+
config_param(name, type, **opts)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.included(mod)
|
|
64
|
+
mod.include ExtractParams
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def initialize
|
|
68
|
+
super
|
|
69
|
+
@_extract_enabled = false
|
|
70
|
+
@_extract_tag_key = nil
|
|
71
|
+
@_extract_keep_tag_key = nil
|
|
72
|
+
@_extract_time_key = nil
|
|
73
|
+
@_extract_keep_time_key = nil
|
|
74
|
+
@_extract_time_parser = nil
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def configure(conf)
|
|
78
|
+
super
|
|
79
|
+
|
|
80
|
+
if @extract_config
|
|
81
|
+
@_extract_tag_key = @extract_config.tag_key
|
|
82
|
+
@_extract_keep_tag_key = @extract_config.keep_tag_key
|
|
83
|
+
@_extract_time_key = @extract_config.time_key
|
|
84
|
+
if @_extract_time_key
|
|
85
|
+
@_extract_keep_time_key = @extract_config.keep_time_key
|
|
86
|
+
@_extract_time_parser = case @extract_config.time_type
|
|
87
|
+
when :float then Fluent::NumericTimeParser.new(:float)
|
|
88
|
+
when :unixtime then Fluent::NumericTimeParser.new(:unixtime)
|
|
89
|
+
else
|
|
90
|
+
localtime = @extract_config.localtime && !@extract_config.utc
|
|
91
|
+
Fluent::TimeParser.new(@extract_config.time_format, localtime, @extract_config.timezone)
|
|
92
|
+
end
|
|
93
|
+
else
|
|
94
|
+
if @extract_config.time_format
|
|
95
|
+
log.warn "'time_format' specified without 'time_key', will be ignored"
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
@_extract_enabled = @_extract_tag_key || @_extract_time_key
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,147 @@
|
|
|
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/formatter'
|
|
19
|
+
require 'fluent/config/element'
|
|
20
|
+
require 'fluent/configurable'
|
|
21
|
+
|
|
22
|
+
module Fluent
|
|
23
|
+
module PluginHelper
|
|
24
|
+
module Formatter
|
|
25
|
+
def formatter_create(usage: '', type: nil, conf: nil, default_type: nil)
|
|
26
|
+
formatter = @_formatters[usage]
|
|
27
|
+
return formatter if formatter && !type && !conf
|
|
28
|
+
|
|
29
|
+
type = if type
|
|
30
|
+
type
|
|
31
|
+
elsif conf && conf.respond_to?(:[])
|
|
32
|
+
raise Fluent::ConfigError, "@type is required in <format>" unless conf['@type']
|
|
33
|
+
conf['@type']
|
|
34
|
+
elsif default_type
|
|
35
|
+
default_type
|
|
36
|
+
else
|
|
37
|
+
raise ArgumentError, "BUG: both type and conf are not specified"
|
|
38
|
+
end
|
|
39
|
+
formatter = Fluent::Plugin.new_formatter(type, parent: self)
|
|
40
|
+
config = case conf
|
|
41
|
+
when Fluent::Config::Element
|
|
42
|
+
conf
|
|
43
|
+
when Hash
|
|
44
|
+
# in code, programmer may use symbols as keys, but Element needs strings
|
|
45
|
+
conf = Hash[conf.map{|k,v| [k.to_s, v]}]
|
|
46
|
+
Fluent::Config::Element.new('format', usage, conf, [])
|
|
47
|
+
when nil
|
|
48
|
+
Fluent::Config::Element.new('format', usage, {}, [])
|
|
49
|
+
else
|
|
50
|
+
raise ArgumentError, "BUG: conf must be a Element, Hash (or unspecified), but '#{conf.class}'"
|
|
51
|
+
end
|
|
52
|
+
formatter.configure(config)
|
|
53
|
+
if @_formatters_started
|
|
54
|
+
formatter.start
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
@_formatters[usage] = formatter
|
|
58
|
+
formatter
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
module FormatterParams
|
|
62
|
+
include Fluent::Configurable
|
|
63
|
+
# minimum section definition to instantiate formatter plugin instances
|
|
64
|
+
config_section :format, required: false, multi: true, init: true, param_name: :formatter_configs do
|
|
65
|
+
config_argument :usage, :string, default: ''
|
|
66
|
+
config_param :@type, :string # config_set_default required for :@type
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def self.included(mod)
|
|
71
|
+
mod.include FormatterParams
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
attr_reader :_formatters # for tests
|
|
75
|
+
|
|
76
|
+
def initialize
|
|
77
|
+
super
|
|
78
|
+
@_formatters_started = false
|
|
79
|
+
@_formatters = {} # usage => formatter
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def configure(conf)
|
|
83
|
+
super
|
|
84
|
+
|
|
85
|
+
@formatter_configs.each do |section|
|
|
86
|
+
if @_formatters[section.usage]
|
|
87
|
+
raise Fluent::ConfigError, "duplicated formatter configured: #{section.usage}"
|
|
88
|
+
end
|
|
89
|
+
formatter = Plugin.new_formatter(section[:@type], parent: self)
|
|
90
|
+
formatter.configure(section.corresponding_config_element)
|
|
91
|
+
@_formatters[section.usage] = formatter
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def start
|
|
96
|
+
super
|
|
97
|
+
@_formatters_started = true
|
|
98
|
+
@_formatters.each_pair do |usage, formatter|
|
|
99
|
+
formatter.start
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def formatter_operate(method_name, &block)
|
|
104
|
+
@_formatters.each_pair do |usage, formatter|
|
|
105
|
+
begin
|
|
106
|
+
formatter.__send__(method_name)
|
|
107
|
+
block.call(formatter) if block_given?
|
|
108
|
+
rescue => e
|
|
109
|
+
log.error "unexpected error while #{method_name}", usage: usage, formatter: formatter, error: e
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def stop
|
|
115
|
+
super
|
|
116
|
+
formatter_operate(:stop)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def before_shutdown
|
|
120
|
+
formatter_operate(:before_shutdown)
|
|
121
|
+
super
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def shutdown
|
|
125
|
+
formatter_operate(:shutdown)
|
|
126
|
+
super
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def after_shutdown
|
|
130
|
+
formatter_operate(:after_shutdown)
|
|
131
|
+
super
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def close
|
|
135
|
+
formatter_operate(:close)
|
|
136
|
+
super
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def terminate
|
|
140
|
+
formatter_operate(:terminate)
|
|
141
|
+
@_formatters_started = false
|
|
142
|
+
@_formatters = {}
|
|
143
|
+
super
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
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 'async/http/protocol'
|
|
18
|
+
require 'fluent/plugin_helper/http_server/methods'
|
|
19
|
+
require 'fluent/plugin_helper/http_server/request'
|
|
20
|
+
|
|
21
|
+
module Fluent
|
|
22
|
+
module PluginHelper
|
|
23
|
+
module HttpServer
|
|
24
|
+
class App
|
|
25
|
+
def initialize(router, logger)
|
|
26
|
+
@logger = logger
|
|
27
|
+
@router = router
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Required method by async-http
|
|
31
|
+
def call(request)
|
|
32
|
+
method = request.method
|
|
33
|
+
resp =
|
|
34
|
+
case method
|
|
35
|
+
when HttpServer::Methods::GET
|
|
36
|
+
get(request)
|
|
37
|
+
when HttpServer::Methods::HEAD
|
|
38
|
+
head(request)
|
|
39
|
+
when HttpServer::Methods::POST
|
|
40
|
+
post(request)
|
|
41
|
+
when HttpServer::Methods::PATCH
|
|
42
|
+
patch(request)
|
|
43
|
+
when HttpServer::Methods::PUT
|
|
44
|
+
put(request)
|
|
45
|
+
when HttpServer::Methods::DELETE
|
|
46
|
+
delete(request)
|
|
47
|
+
when HttpServer::Methods::OPTIONS
|
|
48
|
+
options(request)
|
|
49
|
+
when HttpServer::Methods::CONNECT
|
|
50
|
+
connect(request)
|
|
51
|
+
when HttpServer::Methods::TRACE
|
|
52
|
+
trace(request)
|
|
53
|
+
else
|
|
54
|
+
raise "Unknown method #{method}"
|
|
55
|
+
end
|
|
56
|
+
Protocol::HTTP::Response[*resp]
|
|
57
|
+
rescue => e
|
|
58
|
+
@logger.error(e)
|
|
59
|
+
Protocol::HTTP::Response[500, { 'Content-Type' => 'text/plain' }, 'Internal Server Error']
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
HttpServer::Methods::ALL.map { |e| e.downcase.to_sym }.each do |name|
|
|
63
|
+
define_method(name) do |request|
|
|
64
|
+
req = Request.new(request)
|
|
65
|
+
|
|
66
|
+
path = req.path
|
|
67
|
+
canonical_path =
|
|
68
|
+
if path.size >= 2 && !path.end_with?('/')
|
|
69
|
+
"#{path}/"
|
|
70
|
+
else
|
|
71
|
+
path
|
|
72
|
+
end
|
|
73
|
+
@router.route!(name, canonical_path, req)
|
|
74
|
+
ensure
|
|
75
|
+
request.body&.close
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
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 PluginHelper
|
|
19
|
+
module HttpServer
|
|
20
|
+
module Methods
|
|
21
|
+
GET = 'GET'.freeze
|
|
22
|
+
HEAD = 'HEAD'.freeze
|
|
23
|
+
POST = 'POST'.freeze
|
|
24
|
+
PUT = 'PUT'.freeze
|
|
25
|
+
PATCH = 'PATCH'.freeze
|
|
26
|
+
DELETE = 'DELETE'.freeze
|
|
27
|
+
OPTIONS = 'OPTIONS'.freeze
|
|
28
|
+
CONNECT = 'CONNECT'.freeze
|
|
29
|
+
TRACE = 'TRACE'.freeze
|
|
30
|
+
|
|
31
|
+
ALL = [GET, HEAD, POST, PUT, PATCH, DELETE, CONNECT, OPTIONS, TRACE].freeze
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
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 'uri'
|
|
18
|
+
require 'async/http/protocol'
|
|
19
|
+
require 'fluent/plugin_helper/http_server/methods'
|
|
20
|
+
|
|
21
|
+
module Fluent
|
|
22
|
+
module PluginHelper
|
|
23
|
+
module HttpServer
|
|
24
|
+
class Request
|
|
25
|
+
attr_reader :path, :query_string
|
|
26
|
+
|
|
27
|
+
def initialize(request)
|
|
28
|
+
@request = request
|
|
29
|
+
path = request.path
|
|
30
|
+
@path, @query_string = path.split('?', 2)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def headers
|
|
34
|
+
@request.headers
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def query
|
|
38
|
+
if @query_string
|
|
39
|
+
hash = Hash.new { |h, k| h[k] = [] }
|
|
40
|
+
# For compatibility with CGI.parse
|
|
41
|
+
URI.decode_www_form(@query_string).each_with_object(hash) do |(key, value), h|
|
|
42
|
+
h[key] << value
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def body
|
|
48
|
+
@request.body&.read
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
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
|
+
require 'async/http/protocol'
|
|
18
|
+
|
|
19
|
+
module Fluent
|
|
20
|
+
module PluginHelper
|
|
21
|
+
module HttpServer
|
|
22
|
+
class Router
|
|
23
|
+
class NotFoundApp
|
|
24
|
+
def self.call(req)
|
|
25
|
+
[404, { 'Content-Type' => 'text/plain' }, "404 Not Found\n"]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def initialize(default_app = nil)
|
|
30
|
+
@router = { get: {}, head: {}, post: {}, put: {}, patch: {}, delete: {}, connect: {}, options: {}, trace: {} }
|
|
31
|
+
@default_app = default_app || NotFoundApp
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @param method [Symbol]
|
|
35
|
+
# @param path [String]
|
|
36
|
+
# @param app [Object]
|
|
37
|
+
def mount(method, path, app)
|
|
38
|
+
if @router[method].include?(path)
|
|
39
|
+
raise "#{path} is already mounted"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
@router[method][path] = app
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @param method [Symbol]
|
|
46
|
+
# @param path [String]
|
|
47
|
+
# @param request [Fluent::PluginHelper::HttpServer::Request]
|
|
48
|
+
def route!(method, path, request)
|
|
49
|
+
@router.fetch(method).fetch(path, @default_app).call(request)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
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 'async'
|
|
18
|
+
require 'async/http'
|
|
19
|
+
require 'async/http/endpoint'
|
|
20
|
+
|
|
21
|
+
require 'fluent/plugin_helper/http_server/app'
|
|
22
|
+
require 'fluent/plugin_helper/http_server/router'
|
|
23
|
+
require 'fluent/plugin_helper/http_server/methods'
|
|
24
|
+
require 'fluent/log/console_adapter'
|
|
25
|
+
|
|
26
|
+
module Fluent
|
|
27
|
+
module PluginHelper
|
|
28
|
+
module HttpServer
|
|
29
|
+
class Server
|
|
30
|
+
# @param logger [Logger]
|
|
31
|
+
# @param default_app [Object] This method must have #call.
|
|
32
|
+
# @param tls_context [OpenSSL::SSL::SSLContext]
|
|
33
|
+
def initialize(addr:, port:, logger:, default_app: nil, tls_context: nil)
|
|
34
|
+
# Normalize the address: strip brackets if present
|
|
35
|
+
# Brackets are only for URI formatting, not for socket binding
|
|
36
|
+
@addr = if addr.start_with?('[') && addr.end_with?(']')
|
|
37
|
+
addr[1..-2] # Remove surrounding brackets
|
|
38
|
+
else
|
|
39
|
+
addr
|
|
40
|
+
end
|
|
41
|
+
@port = port
|
|
42
|
+
@logger = logger
|
|
43
|
+
|
|
44
|
+
# TODO: support http2
|
|
45
|
+
scheme = tls_context ? 'https' : 'http'
|
|
46
|
+
# Handle IPv6 addresses properly in URI construction per RFC 3986
|
|
47
|
+
# Add brackets to IPv6 addresses for URI compliance (ip-literal per RFC 3986)
|
|
48
|
+
ip_literal = if @addr.include?(":")
|
|
49
|
+
"[#{@addr}]" # IPv6 address - add brackets
|
|
50
|
+
else
|
|
51
|
+
@addr # IPv4 or hostname - use directly
|
|
52
|
+
end
|
|
53
|
+
@uri = URI("#{scheme}://#{ip_literal}:#{@port}").to_s
|
|
54
|
+
@router = Router.new(default_app)
|
|
55
|
+
@server_task_queue = ::Thread::Queue.new
|
|
56
|
+
Console.logger = Fluent::Log::ConsoleAdapter.wrap(@logger)
|
|
57
|
+
|
|
58
|
+
opts = if tls_context
|
|
59
|
+
{ ssl_context: tls_context }
|
|
60
|
+
else
|
|
61
|
+
{}
|
|
62
|
+
end
|
|
63
|
+
@server = Async::HTTP::Server.new(App.new(@router, @logger), Async::HTTP::Endpoint.parse(@uri, **opts))
|
|
64
|
+
|
|
65
|
+
if block_given?
|
|
66
|
+
yield(self)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def start(notify = nil)
|
|
71
|
+
Console.logger = Fluent::Log::ConsoleAdapter.wrap(@logger)
|
|
72
|
+
@logger.debug("Start async HTTP server listening #{@uri}")
|
|
73
|
+
|
|
74
|
+
Async do |task|
|
|
75
|
+
Console.logger = Fluent::Log::ConsoleAdapter.wrap(@logger)
|
|
76
|
+
begin
|
|
77
|
+
@server.endpoint.accept(&@server.method(:accept))
|
|
78
|
+
if notify
|
|
79
|
+
notify.push(:ready)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
@server_task_queue.pop
|
|
83
|
+
rescue => e
|
|
84
|
+
@logger.error("Failed to run HTTP server listening #{@uri}: #{e.class}: #{e.message}")
|
|
85
|
+
raise unless notify
|
|
86
|
+
notify.push(e)
|
|
87
|
+
ensure
|
|
88
|
+
task.children&.each(&:stop)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
@logger.debug('Finished HTTP server')
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def stop
|
|
96
|
+
@logger.debug('closing HTTP server')
|
|
97
|
+
@server_task_queue.push(:stop)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
HttpServer::Methods::ALL.map { |e| e.downcase.to_sym }.each do |name|
|
|
101
|
+
define_method(name) do |path, app = nil, &block|
|
|
102
|
+
unless path.end_with?('/')
|
|
103
|
+
path += '/'
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
if (block && app) || (!block && !app)
|
|
107
|
+
raise 'You must specify either app or block in the same time'
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
@router.mount(name, path, app || block)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
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_helper/cert_option'
|
|
18
|
+
|
|
19
|
+
module Fluent
|
|
20
|
+
module PluginHelper
|
|
21
|
+
module HttpServer
|
|
22
|
+
# In order not to expose CertOption's methods unnecessary
|
|
23
|
+
class SSLContextBuilder
|
|
24
|
+
include Fluent::PluginHelper::CertOption
|
|
25
|
+
|
|
26
|
+
def initialize(log)
|
|
27
|
+
@log = log
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @param config [Fluent::Config::Section] @transport_config
|
|
31
|
+
def build(config)
|
|
32
|
+
cert_option_create_context(config.version, config.insecure, config.ciphers, config)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
attr_reader :log
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|