From 5f10c5618b65d5d155ccd447d08bbcc88eda93ad Mon Sep 17 00:00:00 2001 From: Kenji Okimoto Date: Tue, 19 Jun 2018 17:25:57 +0900 Subject: [PATCH] Add transport section config definitions Signed-off-by: Kenji Okimoto --- .../api/config_definitions_controller.rb | 48 +++++++++++-------- .../concerns/fluentd/setting/configurable.rb | 1 + .../fluentd/setting/plugin_parameter.rb | 42 +++++++++------- 3 files changed, 53 insertions(+), 38 deletions(-) diff --git a/app/controllers/api/config_definitions_controller.rb b/app/controllers/api/config_definitions_controller.rb index 6b5384d..be88c04 100644 --- a/app/controllers/api/config_definitions_controller.rb +++ b/app/controllers/api/config_definitions_controller.rb @@ -22,27 +22,8 @@ class Api::ConfigDefinitionsController < ApplicationController target_class = Fluentd::Setting.const_get("#{prefix}_#{name}".classify) target = target_class.new - common_options = target.common_options.map do |key| - h = { - name: key, - type: target.column_type(key), - desc: target.desc(key), - default: target.default(key) - } - h[:list] = target.list_of(key) if target.column_type(key) == :enum - h - end - - advanced_options = target.advanced_options.map do |key| - h = { - name: key, - type: target.column_type(key), - desc: target.desc(key), - default: target.default(key) - } - h[:list] = target.list_of(key) if target.column_type(key) == :enum - h - end + common_options = build_options(target, target.common_options) + advanced_options = build_options(target, target.advanced_options) options = { type: type, @@ -50,6 +31,31 @@ class Api::ConfigDefinitionsController < ApplicationController commonOptions: common_options, advancedOptions: advanced_options } + + if type == "input" && ["forward", "syslog"].include?(name) + transport = target.class._sections[:transport] + transport_common_options = build_options(transport, target.transport_common_options) + transport_advanced_options = build_options(transport, target.transport_advanced_options) + options[:transport] = { + commonOptions: transport_common_options, + advancedOptions: transport_advanced_options + } + end render json: options end + + private + + def build_options(target, keys) + keys.map do |key| + h = { + name: key, + type: target.column_type(key), + desc: target.desc(key), + default: target.default(key) + } + h[:list] = target.list_of(key) if target.column_type(key) == :enum + h + end + end end diff --git a/app/models/concerns/fluentd/setting/configurable.rb b/app/models/concerns/fluentd/setting/configurable.rb index 669067e..9967a7e 100644 --- a/app/models/concerns/fluentd/setting/configurable.rb +++ b/app/models/concerns/fluentd/setting/configurable.rb @@ -89,6 +89,7 @@ class Fluentd else attribute(name, :section) section_class = Class.new(::Fluentd::Setting::Section) + section_class.include(Fluentd::Setting::PluginParameter) section_class.section_name = name section_class.required = options[:required] section_class.multi = options[:multi] diff --git a/app/models/concerns/fluentd/setting/plugin_parameter.rb b/app/models/concerns/fluentd/setting/plugin_parameter.rb index 8e2a354..267fc88 100644 --- a/app/models/concerns/fluentd/setting/plugin_parameter.rb +++ b/app/models/concerns/fluentd/setting/plugin_parameter.rb @@ -6,19 +6,19 @@ class Fluentd include Fluentd::Setting::Configurable def column_type(name) - self.class._types[name] + self.class.column_type(name) end def list_of(name) - self.class._list[name] + self.class.list_of(name) end def desc(name) - self.class._descriptions[name] + self.class.desc(name) end def default(name) - reformat_value(name, self.class._defaults[name]) + self.class.reformat_value(name, self.class.default(name)) end def common_options @@ -77,19 +77,6 @@ class Fluentd formatter_class.new(format["0"].except("type")) end - def reformat_value(name, value) - type = column_type(name) - return value if type.nil? # name == :time_key - return value if type == :enum - return value if type == :regexp - type_name = if type.is_a?(Fluentd::Setting::Type::Time) - :time - else - type - end - Fluent::Config::REFORMAT_VALUE.call(type_name, value) - end - module ClassMethods def column_type(name) self._types[name] @@ -99,6 +86,14 @@ class Fluentd self._list[name] end + def desc(name) + self._descriptions[name] + end + + def default(name) + reformat_value(name, self._defaults[name]) + end + def have_buffer_section? self._sections.key?(:buffer) end @@ -137,6 +132,19 @@ class Fluentd end keys end + + def reformat_value(name, value) + type = column_type(name) + return value if type.nil? # name == :time_key + return value if type == :enum + return value if type == :regexp + type_name = if type.is_a?(Fluentd::Setting::Type::Time) + :time + else + type + end + Fluent::Config::REFORMAT_VALUE.call(type_name, value) + end end end end