Sha256: 3cff67809c3afbec9ad86607a852f953b17374b0e64d99b243508dc86f0ab333

Contents?: true

Size: 1.41 KB

Versions: 3

Compression:

Stored size: 1.41 KB

Contents

# encoding: utf-8
require "logstash/filters/base"
require "logstash/namespace"
require "uri"

# The urldecode filter is for decoding fields that are urlencoded.
class LogStash::Filters::Urldecode < LogStash::Filters::Base
  config_name "urldecode"
  milestone 2

  # The field which value is urldecoded
  config :field, :validate => :string, :default => "message"

  # Urldecode all fields
  config :all_fields, :validate => :boolean, :default => false

  public
  def register
    # Nothing to do
  end #def register

  public
  def filter(event)
    return unless filter?(event)

    # If all_fields is true then try to decode them all
    if @all_fields
      event.to_hash.each do |name, value|
        event[name] = urldecode(value)
      end
    # Else decode the specified field
    else
      event[@field] = urldecode(event[@field])
    end
    filter_matched(event)
  end # def filter

  # Attempt to handle string, array, and hash values for fields.
  # For all other datatypes, just return, URI.unescape doesn't support them.
  private
  def urldecode(value)
    case value
    when String
      return URI.unescape(value)
    when Array
      ret_values = []
      value.each { |v| ret_values << urldecode(v) }
      return ret_values
    when Hash
      ret_values = {}
      value.each { |k,v| ret_values[k] = urldecode(v) }
      return ret_values
    else
      return value
    end
  end
end # class LogStash::Filters::Urldecode

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
logstash-filter-urldecode-0.1.2 lib/logstash/filters/urldecode.rb
logstash-filter-urldecode-0.1.0 lib/logstash/filters/urldecode.rb
logstash-lib-1.3.2 lib/logstash/filters/urldecode.rb