mirror of
https://github.com/fluent/fluentd-ui.git
synced 2025-08-15 02:37:08 +02:00
In such case, use value set by super class. Signed-off-by: Kenji Okimoto <okimoto@clear-code.com>
120 lines
3.8 KiB
Ruby
120 lines
3.8 KiB
Ruby
require "fluent/plugin"
|
|
require "fluent/plugin/buf_file"
|
|
require "fluent/test/log"
|
|
require "fluent/test/driver/input"
|
|
require "fluent/test/driver/output"
|
|
require "fluent/test/driver/filter"
|
|
require "fluent/test/driver/parser"
|
|
require "fluent/test/driver/formatter"
|
|
|
|
class Fluentd
|
|
module Setting
|
|
module Plugin
|
|
extend ActiveSupport::Concern
|
|
|
|
include ActiveModel::Model
|
|
include ActiveModel::Attributes
|
|
include Fluentd::Setting::Configurable
|
|
include Fluentd::Setting::PluginConfig
|
|
include Fluentd::Setting::SectionParser
|
|
include Fluentd::Setting::PluginParameter
|
|
|
|
included do
|
|
cattr_accessor :plugin_type, :plugin_name, :config_definition
|
|
end
|
|
|
|
module ClassMethods
|
|
def register_plugin(type, name)
|
|
self.plugin_type = type
|
|
self.plugin_name = name
|
|
|
|
if ["filter", "output"].include?(type)
|
|
include Fluentd::Setting::Pattern
|
|
end
|
|
|
|
if ["input", "filter", "output"].include?(type)
|
|
include Fluentd::Setting::Label
|
|
end
|
|
|
|
if ["parser"].include?(type)
|
|
include Fluentd::Setting::ParserAdvancedOptions
|
|
end
|
|
|
|
if ["formatter"].include?(type)
|
|
include Fluentd::Setting::FormatterAdvancedOptions
|
|
end
|
|
|
|
self.load_plugin_config do |_name, params|
|
|
params.each do |param_name, definition|
|
|
if definition[:section]
|
|
parse_section(param_name, definition)
|
|
if %i(buffer storage parse format).include?(param_name)
|
|
attribute("#{param_name}_type", :string)
|
|
end
|
|
else
|
|
config_param(param_name, definition[:type] || self._types[param_name], **definition.except(:type))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def load_plugin_config
|
|
dumped_config = {}
|
|
plugin_class.ancestors.reverse_each do |klass|
|
|
next unless klass.respond_to?(:dump_config_definition)
|
|
dumped_config_definition = klass.dump_config_definition
|
|
dumped_config[klass.name] = dumped_config_definition unless dumped_config_definition.empty?
|
|
end
|
|
self.config_definition = dumped_config
|
|
dumped_config.each do |name, config|
|
|
yield name, config
|
|
end
|
|
end
|
|
|
|
def plugin_instance
|
|
@plugin_instance ||= Fluent::Plugin.__send__("new_#{plugin_type}", plugin_name)
|
|
end
|
|
|
|
def plugin_class
|
|
@plugin_class ||= plugin_instance.class
|
|
end
|
|
|
|
def create_driver(config)
|
|
case plugin_type
|
|
when "input"
|
|
if plugin_class.class_variable_defined?(:@@pos_file_paths)
|
|
plugin_class.class_variable_set(:@@pos_file_paths, {})
|
|
end
|
|
Fluent::Test::Driver::Input.new(plugin_class).configure(config)
|
|
when "output"
|
|
if Fluent::Plugin::FileBuffer.class_variable_defined?(:@@buffer_paths)
|
|
Fluent::Plugin::FileBuffer.class_variable_set(:@@buffer_paths, {})
|
|
end
|
|
Fluent::Test::Driver::Output.new(plugin_class).configure(config)
|
|
when "filter"
|
|
Fluent::Test::Driver::Filter.new(plugin_class).configure(config)
|
|
when "parser"
|
|
Fluent::Test::Driver::Parser.new(plugin_class).configure(config)
|
|
when "formatter"
|
|
FLuent::Test::Driver::Formatter.new(plugin_class).configure(config)
|
|
else
|
|
nil
|
|
end
|
|
end
|
|
|
|
def plugin_helpers
|
|
@plugin_helpers ||= if plugin_instance.respond_to?(:plugin_helpers)
|
|
plugin_instance.plugin_helpers
|
|
else
|
|
[]
|
|
end
|
|
end
|
|
|
|
def section?
|
|
false
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|