class Fluent::TextParser::KVPParser

Public Instance Methods

configure(conf={}) click to toggle source
Calls superclass method
# File lib/fluent/plugin/parser_kvp.rb, line 15
def configure(conf={})
  super
  if @key_value_pair_delimiter[0] == '/' and @key_value_pair_delimiter[-1] == '/'
    @kv_delimiter = @key_value_pair_delimiter[1..-2]
  end

  @kv_regex_str = '(?:^|[' + @key_value_pair_delimiter + ']+)(?:(?:([' + @key_char + ']+)\s*[' + @key_value_delimiter + ']\s*("(?:(?:\\\.|[^"])*)"|(?:[^"' + @key_value_pair_delimiter + ']*)))(?:|[' + @key_value_pair_delimiter + ']*))'
  @kv_regex = Regexp.new(@kv_regex_str)
end
parse(text) { |time, record| ... } click to toggle source
# File lib/fluent/plugin/parser_kvp.rb, line 25
def parse(text)
  record = {}

  text.scan(@kv_regex) do | m |
    k = @key_prefix + m[0]
    v = (m[1][0] == '"' and m[1][-1] == '"') ? m[1][1..-2] : m[1]
    record[k] = v
  end

  convert_field_type!(record) if @type_converters
  time = record.delete(@time_key)
  if time.nil?
    time = Engine.now
  elsif time.respond_to?(:to_i)
    time = time.to_i
  else
    raise RuntimeError, "The #{@time_key}=#{time} is a bad time field"
  end

  yield time, record
end

Private Instance Methods

convert_field_type!(record) click to toggle source
# File lib/fluent/plugin/parser_kvp.rb, line 49
def convert_field_type!(record)
  @type_converters.each_key { |key|
    if value = record[key]
      record[key] = convert_type(key, value)
    end
  }
end