class Fluent::Plugin::QueryStringParserFilter

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/fluent/plugin/filter_query_string_parser.rb, line 14
def initialize
  super
  require "uri"
end

Public Instance Methods

filter(tag, time, record) click to toggle source
# File lib/fluent/plugin/filter_query_string_parser.rb, line 19
def filter(tag, time, record)
  raw_value = record[@key_name]

  if raw_value.nil?
    if @emit_invalid_record_to_error
      router.emit_error_event(tag, time, record, ArgumentError.new("#{@key_name} does not exist"))
    end
    return @ignore_key_not_exist ? nil : record
  end

  begin
    params = URI.decode_www_form(raw_value)

    unless params.empty?
      if @multi_value_params
        values = Hash.new {|h,k| h[k] = [] }
        params.each{|pair| values[pair[0]].push(pair[1])}
      else
        values = Hash[params]
      end

      if @inject_key_prefix
        values = Hash[values.map{|k,v| [ @inject_key_prefix + k, v ]}]
      end
      r = @hash_value_field ? { @hash_value_field => values } : values
      record = record.merge(r)
    end
  rescue => e
    log.warn "parse failed #{e.message}" unless @suppress_parse_error_log
  end

  return record
end