class Fluent::EvalFilterOutput

Public Instance Methods

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

  if @requires
    @requires.split(',').each do |lib|
      begin
        require lib
      rescue Exception => e
        raise Fluent::ConfigError, "\n#{e.message}\n#{e.backtrace.join("\n")}"
      end
    end
  end

  if remove_tag_prefix = conf['remove_tag_prefix']
    @remove_tag_prefix = /^#{Regexp.escape(remove_tag_prefix)}\.*/
  end
  if remove_tag_suffix = conf['remove_tag_suffix']
    @remove_tag_suffix = /\.*#{Regexp.escape(remove_tag_suffix)}$/
  end
  @add_tag_prefix = conf['add_tag_prefix']
  @add_tag_suffix = conf['add_tag_suffix']

  conf.keys.select { |key| key =~ /^config\d+$/ }.sort_by { |key| key.sub('config', '').to_i }.each do |key|
    begin
      instance_eval("#{conf[key]}")
    rescue Exception => e
      raise Fluent::ConfigError, "#{key} #{conf[key]}\n" + e.to_s
    end
  end

  @filters = []
  conf.keys.select { |key| key =~ /^filter\d+$/ }.sort_by { |key| key.sub('filter', '').to_i }.each do |key|
    begin
      @filters << instance_eval("lambda do |tag, time, record| #{conf[key]} end")
    rescue Exception => e
      raise Fluent::ConfigError, "#{key} #{conf[key]}\n" + e.to_s
    end
  end

  if @filters.empty?
    raise Fluent::ConfigError, "missing filters"
  end
end
create_result(tag, time, record, result) click to toggle source
# File lib/fluent/plugin/out_eval_filter.rb, line 91
def create_result(tag, time, record, result)
  result = [result] unless result.is_a?(Array)

  result.each do |value|
    tag = value if value.is_a?(String)
    time = value if value.is_a?(Integer)
    record = value if value.is_a?(Hash)
  end

  [tag, time, record]
end
emit(tag, es, chain) click to toggle source
# File lib/fluent/plugin/out_eval_filter.rb, line 56
def emit(tag, es, chain)
  tag = handle_tag(tag)
  es.each do |time, record|
    results = filter_record(tag, time, record)
    if results
      results.each do |result|
        router.emit(*result)
      end
    end
  end
  chain.next
end
filter_record(tag, time, record) click to toggle source
# File lib/fluent/plugin/out_eval_filter.rb, line 77
def filter_record(tag, time, record)
  @filters.each do |filter|
    results = []
    filter_results = filter.call(tag, time, record)
    filter_results = [filter_results] unless filter_results.instance_of?(Enumerator)
    filter_results.each do |filter_result|
      result = create_result(tag, time, record, filter_result) if filter_result
      results << result if result
    end
    return results unless results.empty?
  end
  nil
end
handle_tag(tag) click to toggle source
# File lib/fluent/plugin/out_eval_filter.rb, line 69
def handle_tag(tag)
  tag = tag.sub(@remove_tag_prefix, '') if @remove_tag_prefix
  tag = tag.sub(@remove_tag_suffix, '') if @remove_tag_suffix
  tag = tag.sub(/^\.*/, "#{@add_tag_prefix}.") if @add_tag_prefix
  tag = tag.sub(/\.*$/, ".#{@add_tag_suffix}") if @add_tag_suffix
  tag
end