class Fluent::ParserOutput

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/fluent/plugin/out_ltsv_parser.rb, line 13
def initialize
    super
    require 'time'
end

Public Instance Methods

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

    if @key_name[0] == ":" 
        @key_name = @key_name[1..-1].to_sym
    end

    @filter_in = @filter_in.split(",").map(&:strip).select{ |e| e != "" }
    @required_fields = @required_fields.split(",").map(&:strip).select{ |e| e != "" }

    if @transform_values then
        @transform_values = Hash[@transform_values.split(",").map{|p| p.split(":",2)}]
    end


end
emit(tag,es,chain) click to toggle source
# File lib/fluent/plugin/out_ltsv_parser.rb, line 40
def emit(tag,es,chain)
    tag = @tag || tag
    if @add_prefix
        tag = @add_prefix + "." + tag
    end
    es.each do |time,record|
        raw_value = record[@key_name]
        values = raw_value ? transform_values(filter(parse(raw_value))) : nil

        r = @reserve_data ? record.merge(values) : values 
        if r
            Fluent::Engine.emit(tag,time,r)
        end
    end

    chain.next
end

Private Instance Methods

filter(record) click to toggle source
# File lib/fluent/plugin/out_ltsv_parser.rb, line 60
def filter(record)
    if @required_fields.length > 0 then
        if record.count { |k,v| @required_fields.include? k } != @required_fields.length then
            return nil
        end
    end

    if @filter_in.length <= 0 then
        return record
    end

    _record = record.select{ |x| @filter_in.include? x } 

    if not @min_field.nil? then
        if  _record.keys.length >= @min_field then
            return _record
        else
            #log.debug("#{record} has an missing fields")
            return nil
        end
    end

    return _record
end
parse(text) click to toggle source
# File lib/fluent/plugin/out_ltsv_parser.rb, line 97
def parse(text)
    return Hash[text.split("\t").map{|p| p.split(":", 2)}]
end
transform_values(record) click to toggle source
# File lib/fluent/plugin/out_ltsv_parser.rb, line 85
def transform_values(record)
    return record if record.nil?
    return record if @transform_values.nil?

    @transform_values.each do |key,value|
        field_name,field_value = key.split("=")
        next if record[field_name].nil? or field_name.nil? or field_value.nil? 
        record[field_name] = value if field_value == record[field_name]
    end
    return record
end