class LogStash::Config::AST::Config

Public Instance Methods

compile() click to toggle source
# File lib/logstash/config/config_ast.rb, line 45
def compile
  # TODO(sissel): Move this into config/config_ast.rb
  code = []
  code << "@inputs = []"
  code << "@filters = []"
  code << "@outputs = []"
  sections = recursive_select(LogStash::Config::AST::PluginSection)
  sections.each do |s|
    code << s.compile_initializer
  end

  # start inputs
  #code << "class << self"
  definitions = []
    
  ["filter", "output"].each do |type|
    #definitions << "def #{type}(event)"
    definitions << "@#{type}_func = lambda do |event, &block|"
    if type == "filter"
      definitions << "  extra_events = []"
    end

    definitions << "  @logger.info? && @logger.info(\"#{type} received\", :event => event)"
    sections.select { |s| s.plugin_type.text_value == type }.each do |s|
      definitions << s.compile.split("\n", -1).map { |e| "  #{e}" }
    end

    if type == "filter"
      definitions << "  extra_events.each(&block)"
    end
    definitions << "end"
  end

  code += definitions.join("\n").split("\n", -1).collect { |l| "  #{l}" }
  #code << "end"
  return code.join("\n")
end