diff --git a/lib/logstash/agent.rb b/lib/logstash/agent.rb index 1d4c17e0044..ef56de0bd01 100644 --- a/lib/logstash/agent.rb +++ b/lib/logstash/agent.rb @@ -38,12 +38,14 @@ def log_to(target) public def run # Load the config file - p @settings.config_file config = LogStash::Config::File.new(@settings.config_file) config.parse do |plugin| - ap plugin + # 'plugin' is a has containing: + # :type => the base class of the plugin (LogStash::Inputs::Base, etc) + # :plugin => the class of the plugin (LogStash::Inputs::File, etc) + # :parameters => hash of key-value parameters from the config. + p plugin[:plugin].name end - exit if @config["inputs"].length == 0 or @config["outputs"].length == 0 raise "Must have both inputs and outputs configured." diff --git a/lib/logstash/config/file.rb b/lib/logstash/config/file.rb index f16421da45f..e398361928d 100644 --- a/lib/logstash/config/file.rb +++ b/lib/logstash/config/file.rb @@ -39,8 +39,10 @@ def parse def tryload(parent, child) child = child.downcase if child.is_a? String begin - p "Trying to load logstash/#{parent}s/#{child}" => \ - (require "logstash/#{parent}s/#{child}") + loaded = (require "logstash/#{parent}s/#{child}") + #if loaded + #puts "Loading logstash/#{parent}s/#{child}" + #end rescue => e if child == :base $stderr.puts "Failure loading base class '#{parent}': #{e.inspect}" diff --git a/lib/logstash/config/grammar.rl b/lib/logstash/config/grammar.rl index 34304c1d428..23c5080465a 100644 --- a/lib/logstash/config/grammar.rl +++ b/lib/logstash/config/grammar.rl @@ -33,7 +33,7 @@ require "logstash/namespace" token = string[startpos + 1 ... endpos - 1] # Skip quotations # Parse escapes. - token.gsub(/\\./) { |m| return m[1,1] } + token.gsub(/\\./) { |m| m[1,1] } #puts "quotedstring: #{token}" @stack << token } @@ -63,15 +63,16 @@ require "logstash/namespace" @parameters[name] << value } - action component_implementation { + action plugin { @components ||= [] name = @stack.pop #@components << { :name => name, :parameters => @parameters } @components << { name => @parameters } + @parameters = {} } action component_init { - #puts "current component: " + @stack.last + puts "current component: " + @stack.last @components = [] } @@ -79,21 +80,25 @@ require "logstash/namespace" name = @stack.pop @config ||= Hash.new { |h,k| h[k] = [] } @config[name] += @components + puts "Config component: #{name}" } - comment = "#" (any - "\n")* ; + comment = "#" (any - [\n])* >mark %{ e = @tokenstack.pop; puts "Comment: #{string[e ... p]}" }; ws = ([ \t\n] | comment)** ; #ws = ([ \t\n])** ; # TODO(sissel): Support floating point values? numeric = ( ("+" | "-")? [0-9] :>> [0-9]** ) >mark %stack_numeric; quoted_string = ( - ( "\"" ( ( (any - [\\"\n]) | "\\" any )* ) "\"" ) | - ( "'" ( ( (any - [\\'\n]) | "\\" any )* ) "'" ) + ( "\"" ( ( (any - [\\"\n]) | "\\" any )* ) "\"" ) + | ( "'" ( ( (any - [\\'\n]) | "\\" any )* ) "'" ) ) >mark %stack_quoted_string ; naked_string = ( [A-Za-z_] :>> [A-Za-z0-9_]* ) >mark %stack_string ; string = ( quoted_string | naked_string ) ; + # TODO(sissel): allow use of this. + regexp_literal = ( "/" ( ( (any - [\\'\n]) | "\\" any )* ) "/" ) ; + array = ( "[" ws string ws ("," ws string ws)* "]" ) >array_init %array_push; parameter_value = ( numeric | string | array ); parameter = ( string ws "=>" ws parameter_value ) %parameter ; @@ -101,14 +106,14 @@ require "logstash/namespace" # Statement: # component { - # component_implementation_name { + # plugin_name { # bar => ... # baz => ... # } # ... # } - component_implementation = ( + plugin = ( ( naked_string ws "{" ws parameters @@ -116,18 +121,18 @@ require "logstash/namespace" ) | ( naked_string ws "{" ws "}" ) - ) %component_implementation ; + ) %plugin ; component = ( naked_string ws "{" >component_init - ( ws component_implementation )** + ( ws plugin )** ws "}" ) %component ; - config = (ws component)** ; + config = (ws component? )** ; - main := config + main := config %{ puts "END" } $err { # Compute line and column of the cursor (p) puts "Error at line #{self.line(string, p)}, column #{self.column(string, p)}: #{string[p .. -1].inspect}" @@ -167,6 +172,10 @@ class LogStash::Config::Grammar raise e end + if cs < self.logstash_config_first_final + $stderr.puts "Error at line #{self.line(string, p)}, column #{self.column(string, p)}: #{string[p .. -1].inspect}" + raise "Invalid Configuration. Check syntax of config file." + end return cs end # def parse diff --git a/lib/logstash/config/mixin.rb b/lib/logstash/config/mixin.rb index fb6e7cf3895..6178952a373 100644 --- a/lib/logstash/config/mixin.rb +++ b/lib/logstash/config/mixin.rb @@ -23,7 +23,7 @@ module LogStash::Config::Mixin # This method is called when someone does 'include LogStash::Config' def self.included(base) - puts "Configurable class #{base.name}" + #puts "Configurable class #{base.name}" # # Add the DSL methods to the 'base' given. base.extend(LogStash::Config::Mixin::DSL) diff --git a/lib/logstash/filters/date.rb b/lib/logstash/filters/date.rb index 5b8bcc84796..041dc1e72f8 100644 --- a/lib/logstash/filters/date.rb +++ b/lib/logstash/filters/date.rb @@ -4,6 +4,8 @@ class LogStash::Filters::Date < LogStash::Filters::Base + config_name "filter" + # Config for date is: # fieldname: dateformat # Allow arbitrary keys for this config. diff --git a/lib/logstash/filters/field.rb b/lib/logstash/filters/field.rb index b27b1bae874..b47ba684f71 100644 --- a/lib/logstash/filters/field.rb +++ b/lib/logstash/filters/field.rb @@ -3,6 +3,10 @@ require "ostruct" class LogStash::Filters::Field < LogStash::Filters::Base + + # TODO(sissel): Finish this. + config_name "field" + class EvalSpace < OpenStruct def get_binding return binding diff --git a/lib/logstash/filters/grep.rb b/lib/logstash/filters/grep.rb index 737b2e6d8bb..beef1f9fdef 100644 --- a/lib/logstash/filters/grep.rb +++ b/lib/logstash/filters/grep.rb @@ -24,6 +24,9 @@ # - tag2 # class LogStash::Filters::Grep < LogStash::Filters::Base + + config_name "grep" + public def initialize(config = {}) super diff --git a/lib/logstash/filters/grok.rb b/lib/logstash/filters/grok.rb index 355be7bbffe..9117c2fb74c 100644 --- a/lib/logstash/filters/grok.rb +++ b/lib/logstash/filters/grok.rb @@ -6,6 +6,7 @@ class LogStash::Filters::Grok < LogStash::Filters::Base + config_name "grok" config :pattern => :string config :patterns_dir => :path config :drop_if_match => :boolean # googlecode/issue/26 diff --git a/lib/logstash/filters/grokdiscovery.rb b/lib/logstash/filters/grokdiscovery.rb index 954690fc698..b8fde1269a2 100644 --- a/lib/logstash/filters/grokdiscovery.rb +++ b/lib/logstash/filters/grokdiscovery.rb @@ -4,6 +4,9 @@ require "grok" # rubygem 'jls-grok' class LogStash::Filters::Grokdiscovery < LogStash::Filters::Base + + config_name "grokdiscovery" + public def initialize(config = {}) super diff --git a/lib/logstash/filters/multiline.rb b/lib/logstash/filters/multiline.rb index 7600aafee6d..f2fadf0f12f 100644 --- a/lib/logstash/filters/multiline.rb +++ b/lib/logstash/filters/multiline.rb @@ -8,6 +8,7 @@ class LogStash::Filters::Multiline < LogStash::Filters::Base + config_name "multiline" config :pattern => :string config :negate => :boolean config :what => ["previous", "next"] diff --git a/lib/logstash/outputs/base.rb b/lib/logstash/outputs/base.rb index 5235b8f5e74..c9fbb735a9f 100644 --- a/lib/logstash/outputs/base.rb +++ b/lib/logstash/outputs/base.rb @@ -10,7 +10,7 @@ class LogStash::Outputs::Base attr_accessor :logger - config_name "outputs" + config_name "output" public def initialize(url) diff --git a/lib/logstash/outputs/beanstalk.rb b/lib/logstash/outputs/beanstalk.rb index c4fc8342eb4..5681d4db87d 100644 --- a/lib/logstash/outputs/beanstalk.rb +++ b/lib/logstash/outputs/beanstalk.rb @@ -3,6 +3,9 @@ require "em-jack" class LogStash::Outputs::Beanstalk < LogStash::Outputs::Base + + config_name "beanstalk" + public def initialize(url, config={}, &block) super diff --git a/lib/logstash/outputs/elasticsearch.rb b/lib/logstash/outputs/elasticsearch.rb index 85a58b39af2..edf49537d39 100644 --- a/lib/logstash/outputs/elasticsearch.rb +++ b/lib/logstash/outputs/elasticsearch.rb @@ -6,6 +6,7 @@ class LogStash::Outputs::Elasticsearch < LogStash::Outputs::Base # http://host/index/type + config_name "elasticsearch" config :host => :string config :index => :string config :type => :string diff --git a/lib/logstash/outputs/gelf.rb b/lib/logstash/outputs/gelf.rb index 19ee4c34c1b..75fbe52acda 100644 --- a/lib/logstash/outputs/gelf.rb +++ b/lib/logstash/outputs/gelf.rb @@ -9,6 +9,9 @@ require "logstash/outputs/base" class LogStash::Outputs::Gelf < LogStash::Outputs::Base + + config_name "gelf" + public def register # nothing to do diff --git a/lib/logstash/outputs/internal.rb b/lib/logstash/outputs/internal.rb index ba291175202..87aae644c18 100644 --- a/lib/logstash/outputs/internal.rb +++ b/lib/logstash/outputs/internal.rb @@ -2,6 +2,9 @@ require "logstash/outputs/base" class LogStash::Outputs::Internal < LogStash::Outputs::Base + + config_name "internal" + public def initialize(url, config={}, &block) super diff --git a/lib/logstash/outputs/mongodb.rb b/lib/logstash/outputs/mongodb.rb index 53f8956576c..cf99484dea8 100644 --- a/lib/logstash/outputs/mongodb.rb +++ b/lib/logstash/outputs/mongodb.rb @@ -3,6 +3,9 @@ require "em-mongo" class LogStash::Outputs::Mongodb < LogStash::Outputs::Base + + config_name "mongodb" + public def register # TODO(sissel): Port? diff --git a/lib/logstash/outputs/nagios.rb b/lib/logstash/outputs/nagios.rb index fd09b3e57f1..dfa5c65c143 100644 --- a/lib/logstash/outputs/nagios.rb +++ b/lib/logstash/outputs/nagios.rb @@ -5,6 +5,7 @@ class LogStash::Outputs::Nagios < LogStash::Outputs::Base NAGIOS_CRITICAL = 2 NAGIOS_WARN = 1 + config_name "nagios" config :commandfile => :string public diff --git a/lib/logstash/outputs/stdout.rb b/lib/logstash/outputs/stdout.rb index ed425c5f5af..bb339dc4b2c 100644 --- a/lib/logstash/outputs/stdout.rb +++ b/lib/logstash/outputs/stdout.rb @@ -3,6 +3,7 @@ class LogStash::Outputs::Stdout < LogStash::Outputs::Base + config_name "stdout" config :debug => :boolean public diff --git a/lib/logstash/outputs/stomp.rb b/lib/logstash/outputs/stomp.rb index 23e88b48abc..b309f248a93 100644 --- a/lib/logstash/outputs/stomp.rb +++ b/lib/logstash/outputs/stomp.rb @@ -5,6 +5,8 @@ class LogStash::Outputs::Stomp < LogStash::Outputs::Base attr_reader :url + config_name "stomp" + public def initialize(url, config={}, &block) super