class Fluent::Plugin::StringScrubFilter

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/fluent/plugin/filter_string_scrub.rb, line 8
def initialize
  super
end

Public Instance Methods

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

  if @replace_char =~ /\\u\{*[A-F0-9]{4}\}*/
    @replace_char = eval("\"#{@replace_char}\"")
  end
end
filter_stream(tag, es) click to toggle source
# File lib/fluent/plugin/filter_string_scrub.rb, line 20
def filter_stream(tag, es)
  new_es = Fluent::MultiEventStream.new
  es.each do |time,record|
    begin
      scrubbed = recv_record(record)
      next if scrubbed.nil?
      new_es.add(time, record)
    rescue => e
      router.emit_error_event(tag, time, record, e)
    end
  end

  new_es
end
recv_record(record) click to toggle source
# File lib/fluent/plugin/filter_string_scrub.rb, line 35
def recv_record(record)
  scrubbed = {}
  record.each do |k,v|
    if v.instance_of? Hash
      scrubbed[with_scrub(k)] = recv_record(v)
    else
      scrubbed[with_scrub(k)] = with_scrub(v)
    end
  end
  scrubbed
end
with_scrub(string) click to toggle source
# File lib/fluent/plugin/filter_string_scrub.rb, line 47
def with_scrub(string)
  begin
    string =~ //
    return string
  rescue ArgumentError => e
    raise e unless e.message.index("invalid byte sequence in") == 0
    if string.frozen?
        string = string.dup.scrub!(@replace_char)
    else
        string.scrub!(@replace_char)
    end
    retry
  end
end