class Fluent::KeyValueParser

Public Instance Methods

configure(conf) click to toggle source
Calls superclass method
# File lib/fluent/plugin/filter_key_value_parser.rb, line 20
def configure(conf)
  super

  regex = /^\/.+\/$/

  if regex.match(@keys_delimiter.to_s)
    @keys_delimiter = Regexp.new(@keys_delimiter[1..-2])
  end

  if regex.match(@remove_prefix.to_s)
    @remove_prefix = Regexp.new(@remove_prefix[1..-2])
  end

  if regex.match(@filtered_keys_regex.to_s)
     @filtered_keys_regex = Regexp.new(@filtered_keys_regex[1..-2])
  end

  @filtered_keys_list = parse_filtered_keys_parameter
end
filter(tag, time, record) click to toggle source
# File lib/fluent/plugin/filter_key_value_parser.rb, line 40
def filter(tag, time, record)
  return if record[@key].nil?

  keys = extracted_keys(extract_log_line(record[@key]))

  return if @filter_out_lines_without_keys && keys.empty?

  record.merge! keys
  record.tap { |r| r.delete(@key) if @remove_key }.compact
end

Private Instance Methods

delimiter_filter(line) click to toggle source
# File lib/fluent/plugin/filter_key_value_parser.rb, line 63
def delimiter_filter(line)
  items = {}
  line.split(@keys_delimiter).each do |kv|
    key, value = kv.split(@kv_delimiter_char, 2)
    items[key] = value if value
  end
  items
end
extract_log_line(line) click to toggle source
# File lib/fluent/plugin/filter_key_value_parser.rb, line 76
def extract_log_line(line)
  line.gsub(@remove_prefix,'').strip
end
extracted_keys(line) click to toggle source
# File lib/fluent/plugin/filter_key_value_parser.rb, line 57
def extracted_keys(line)
  keys = @use_regex ? regex_filter(line) : delimiter_filter(line)
  filtered_keys = @filtered_keys_list.empty? ? keys : keys.slice(*@filtered_keys_list)
  @filtered_keys_regex.nil? ? filtered_keys : filtered_keys.merge(keys.select{ |k,v| @filtered_keys_regex.match(k.to_s)})
end
parse_filtered_keys_parameter() click to toggle source
# File lib/fluent/plugin/filter_key_value_parser.rb, line 72
def parse_filtered_keys_parameter
  @filtered_keys.to_s.split(@filtered_keys_delimiter)
end
regex_filter(line) click to toggle source
# File lib/fluent/plugin/filter_key_value_parser.rb, line 53
def regex_filter(line)
  "#{line} ".scan(/(?<key>[a-zA-Z_0-9]+)=(?<value>([^=]+|[^ ]+))\s/).to_h
end