class Fluent::Config::Element
Constants
- RESERVED_PARAMETERS
- RESERVED_PARAMETERS_COMPAT
Attributes
arg[RW]
corresponding_proxies[RW]
elements[W]
name[RW]
unused[RW]
unused_in[RW]
v1_config[RW]
Public Class Methods
new(name, arg, attrs, elements, unused = nil)
click to toggle source
Calls superclass method
# File lib/fluent/config/element.rb, line 23 def initialize(name, arg, attrs, elements, unused = nil) @name = name @arg = arg @elements = elements super() attrs.each { |k, v| self[k] = v } @unused = unused || attrs.keys @v1_config = false @corresponding_proxies = [] # some plugins use flat parameters, e.g. in_http doesn't provide <format> section for parser. @unused_in = false # if this element is not used in plugins, correspoing plugin name and parent element name is set, e.g. [source, plugin class]. # it's global logger, not plugin logger: deprecated message should be global warning, not plugin level. @logger = defined?($log) ? $log : nil end
unescape_parameter(v)
click to toggle source
# File lib/fluent/config/element.rb, line 211 def self.unescape_parameter(v) result = '' v.each_char { |c| result << LiteralParser.unescape_char(c) } result end
Public Instance Methods
+(o)
click to toggle source
# File lib/fluent/config/element.rb, line 85 def +(o) e = Element.new(@name.dup, @arg.dup, o.merge(self), @elements + o.elements, (@unused + o.unused).uniq) e.v1_config = @v1_config e end
==(o)
click to toggle source
This method assumes o is an Element object. Should return false for nil or other object
# File lib/fluent/config/element.rb, line 77 def ==(o) self.name == o.name && self.arg == o.arg && self.keys.size == o.keys.size && self.keys.reduce(true){|r, k| r && self[k] == o[k] } && self.elements.size == o.elements.size && [self.elements, o.elements].transpose.reduce(true){|r, e| r && e[0] == e[1] } end
[](key)
click to toggle source
Calls superclass method
# File lib/fluent/config/element.rb, line 110 def [](key) @unused_in = false # ditto @unused.delete(key) if RESERVED_PARAMETERS.include?(key) && !has_key?(key) && has_key?(RESERVED_PARAMETERS_COMPAT[key]) @logger.warn "'#{RESERVED_PARAMETERS_COMPAT[key]}' is deprecated parameter name. use '#{key}' instead." if @logger return self[RESERVED_PARAMETERS_COMPAT[key]] end super end
add_element(name, arg = '')
click to toggle source
# File lib/fluent/config/element.rb, line 64 def add_element(name, arg = '') e = Element.new(name, arg, {}, []) e.v1_config = @v1_config @elements << e e end
check_not_fetched(&block)
click to toggle source
# File lib/fluent/config/element.rb, line 122 def check_not_fetched(&block) each_key { |key| if @unused.include?(key) block.call(key, self) end } @elements.each { |e| e.check_not_fetched(&block) } end
dump_value(k, v, nindent)
click to toggle source
# File lib/fluent/config/element.rb, line 189 def dump_value(k, v, nindent) if secret_param?(k) "#{nindent}#{k} xxxxxx\n" else if @v1_config case param_type(k) when :string "#{nindent}#{k} \"#{self.class.unescape_parameter(v)}\"\n" when :enum, :integer, :float, :size, :bool, :time "#{nindent}#{k} #{v}\n" when :hash, :array "#{nindent}#{k} #{v}\n" else # Unknown type "#{nindent}#{k} #{v}\n" end else "#{nindent}#{k} #{v}\n" end end end
each_element(*names, &block)
click to toggle source
no code in fluentd uses this method
# File lib/fluent/config/element.rb, line 92 def each_element(*names, &block) if names.empty? @elements.each(&block) else @elements.each { |e| if names.include?(e.name) block.yield(e) end } end end
elements(*names, name: nil, arg: nil)
click to toggle source
# File lib/fluent/config/element.rb, line 51 def elements(*names, name: nil, arg: nil) raise ArgumentError, "name and names are exclusive" if name && !names.empty? raise ArgumentError, "arg is available only with name" if arg && !name if name @elements.select{|e| e.name == name && (!arg || e.arg == arg) } elsif !names.empty? @elements.select{|e| names.include?(e.name) } else @elements end end
has_key?(key)
click to toggle source
Calls superclass method
# File lib/fluent/config/element.rb, line 104 def has_key?(key) @unused_in = false # some sections, e.g. <store> in copy, is not defined by config_section so clear unused flag for better warning message in check_not_fetched. @unused.delete(key) super end
inspect()
click to toggle source
Calls superclass method
# File lib/fluent/config/element.rb, line 71 def inspect attrs = super "name:#{@name}, arg:#{@arg}, " + attrs + ", " + @elements.inspect end
param_type(key)
click to toggle source
# File lib/fluent/config/element.rb, line 177 def param_type(key) return nil if @corresponding_proxies.empty? param_key = key.to_sym proxy = @corresponding_proxies.detect do |_proxy| _proxy.params.has_key?(param_key) end return nil unless proxy _block, opts = proxy.params[param_key] opts[:type] end
secret_param?(key)
click to toggle source
# File lib/fluent/config/element.rb, line 163 def secret_param?(key) return false if @corresponding_proxies.empty? param_key = key.to_sym @corresponding_proxies.each { |proxy| _block, opts = proxy.params[param_key] if opts && opts.has_key?(:secret) return opts[:secret] end } false end
to_masked_element()
click to toggle source
# File lib/fluent/config/element.rb, line 152 def to_masked_element new_elems = @elements.map { |e| e.to_masked_element } new_elem = Element.new(@name, @arg, {}, new_elems, @unused) new_elem.v1_config = @v1_config new_elem.corresponding_proxies = @corresponding_proxies each_pair { |k, v| new_elem[k] = secret_param?(k) ? 'xxxxxx' : v } new_elem end
to_s(nest = 0)
click to toggle source
# File lib/fluent/config/element.rb, line 133 def to_s(nest = 0) indent = " " * nest nindent = " " * (nest + 1) out = "" if @arg.empty? out << "#{indent}<#{@name}>\n" else out << "#{indent}<#{@name} #{@arg}>\n" end each_pair { |k, v| out << dump_value(k, v, nindent) } @elements.each { |e| out << e.to_s(nest + 1) } out << "#{indent}</#{@name}>\n" out end