Sha256: 5c8bc8e06fefda0f632d9404454cd71e0c7779660d0745e92630eec4c4ef3c4b

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 KB

Contents

class Fluent::QueryStringParserFilter < Fluent::Filter
  Fluent::Plugin.register_filter("query_string_parser", self)

  config_param :key_name, :string
  config_param :hash_value_field, :string, default: nil
  config_param :inject_key_prefix, :string, default: nil
  config_param :suppress_parse_error_log, :bool, default: false
  config_param :ignore_key_not_exist, :bool, default: false

  def initialize
    super
    require "uri"
  end

  def filter_stream(tag, es)
    new_es = Fluent::MultiEventStream.new

    es.each do |time, record|
      raw_value = record[@key_name]
      if raw_value.nil?
        new_es.add(time, record) unless @ignore_key_not_exist
        next
      end

      begin
        values = Hash[URI.decode_www_form(raw_value)]

        unless values.empty?
          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

        new_es.add(time, record)
      rescue => e
        log.warn "parse failed #{e.message}" unless @suppress_parse_error_log
      end
    end

    new_es
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
fluent-plugin-uri-parser-0.1.0 lib/fluent/plugin/filter_query_string_parser.rb
fluent-plugin-uri-parser-0.0.2 lib/fluent/plugin/filter_query_string_parser.rb
fluent-plugin-uri-parser-0.0.1 lib/fluent/plugin/filter_query_string_parser.rb