class LogStash::Inputs::Exec

Run command line tools and capture the whole output as an event.

Notes:

Public Instance Methods

register() click to toggle source
# File lib/logstash/inputs/exec.rb, line 31
def register
  @logger.info("Registering Exec Input", :type => @type,
               :command => @command, :interval => @interval)
end
run(queue) click to toggle source
# File lib/logstash/inputs/exec.rb, line 37
def run(queue)
  hostname = Socket.gethostname
  loop do
    start = Time.now
    @logger.info("Running exec", :command => @command) if @debug
    out = IO.popen(@command)
    # out.read will block until the process finishes.
    @codec.decode(out.read) do |event|
      decorate(event)
      event["host"] = hostname
      event["command"] = @command
      queue << event
    end
    
    duration = Time.now - start
    if @debug
      @logger.info("Command completed", :command => @command,
                   :duration => duration)
    end

    # Sleep for the remainder of the interval, or 0 if the duration ran
    # longer than the interval.
    sleeptime = [0, @interval - duration].max
    if sleeptime == 0
      @logger.warn("Execution ran longer than the interval. Skipping sleep.",
                   :command => @command, :duration => duration,
                   :interval => @interval)
    else
      sleep(sleeptime)
    end
  end # loop
end