class Fluent::SplitRecordFilter

Public Instance Methods

configure(conf) click to toggle source

Configuration

Calls superclass method
# File lib/fluent/plugin/filter_split_record.rb, line 26
def configure(conf)
  super
  @format_regex = Regexp.new(@format)
  @format_regex_substring = Regexp.new(@substring_format)
  unless @format_regex.names.include?("key") and @format_regex.names.include?("value")
      raise ConfigError, "split_record: format must have named_captures of key and value"
  end
  if (!keys_prefix.nil? && keys_prefix.is_a?(String))
    @store_fun = method(:store_with_prefix)
  else
    @store_fun = method(:store)
  end
end
filter(tag, time, record) click to toggle source
# File lib/fluent/plugin/filter_split_record.rb, line 49
def filter(tag, time, record)
  record
end
filter_stream(tag, es) click to toggle source
# File lib/fluent/plugin/filter_split_record.rb, line 53
def filter_stream(tag, es)
  mes = MultiEventStream.new
  es.each { |time, record|
    begin
      msg = record[@key_name]
      record.delete(@key_name) unless @reserve_msg
      data = split_message(msg)
      if @out_key.nil?
        record.merge!(data)
      else
        record[@out_key] = data
      end
      mes.add(time, record)
    rescue => e
      router.emit_error_event(tag, time, record, e)
    end
  }
  mes
end
shutdown() click to toggle source
Calls superclass method
# File lib/fluent/plugin/filter_split_record.rb, line 45
def shutdown
  super
end
start() click to toggle source
Required API methods =====
Calls superclass method
# File lib/fluent/plugin/filter_split_record.rb, line 41
def start
  super
end

Private Instance Methods

split_message(message) click to toggle source

Message splitter

# File lib/fluent/plugin/filter_split_record.rb, line 77
def split_message(message)
  return {} unless message.is_a?(String)
  # Convert key-pairs as found
  if @format_regex_substring.nil?
    key_values = message.scan @format_regex
  # Pop off substrings; get their key-pairs; then scan the leftovers
  else
    key_values = message.scan @format_regex_substring
    leftovers = message.gsub(@format_regex_substring,'').scan(@format_regex)
    leftovers.each { |e| key_values << e }
  end
  # Store key pairs
  data = {}
  key_values.each { |e| @store_fun.call(data,e[0],e[1]) }
  data
end
store(data, key, value) click to toggle source

Store key/value pair

# File lib/fluent/plugin/filter_split_record.rb, line 95
def store(data, key, value)
  data.store(key, value)
end
store_with_prefix(data, key, value) click to toggle source

Store key/value pair, with prefix

# File lib/fluent/plugin/filter_split_record.rb, line 100
def store_with_prefix(data, key, value)
  data.store(@keys_prefix+key, value)
end