Sha256: 51a36652f73e253b5bf2510f0320415910bde7ff69a539a14e7890be1bdc2681

Contents?: true

Size: 1.46 KB

Versions: 9

Compression:

Stored size: 1.46 KB

Contents

require "eventmachine-tail"
require "logstash/inputs/base"
require "logstash/namespace"
require "socket" # for Socket.gethostname

class LogStash::Inputs::File < LogStash::Inputs::Base
  public
  def initialize(url, type, config={}, &block)
    super

    # Hack the hostname into the url.
    # This works since file:// urls don't generally have a host in it.
    @url.host = Socket.gethostname
  end # def initialize

  public
  def register
    @logger.info("Registering #{@url}")
    EventMachine::FileGlobWatchTail.new(@url.path, Reader, interval=60,
                                        exclude=[], receiver=self)
  end # def register

  public
  def receive(filetail, event)
    url = @url.clone
    url.path = filetail.path
    @logger.debug(["original url", { :originalurl => @url, :newurl => url }])
    event = LogStash::Event.new({
      "@message" => event,
      "@type" => @type,
      "@tags" => @tags.clone,
    })
    event.source = url
    @logger.debug(["Got event", event])
    @callback.call(event)
  end # def receive

  private
  class Reader < EventMachine::FileTail
    def initialize(path, receiver)
      super(path)
      @receiver = receiver
      @buffer = BufferedTokenizer.new  # From eventmachine
    end

    def receive_data(data)
      # TODO(2.0): Support multiline log data
      @buffer.extract(data).each do |line|
        @receiver.receive(self, line)
      end
    end # def receive_data
  end # class Reader
end # class LogStash::Inputs::File

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
logstash-lite-0.2.20110505142231 lib/logstash/inputs/file.rb
logstash-lite-0.2.20110422152244 lib/logstash/inputs/file.rb
logstash-lite-0.2.20110405105201 lib/logstash/inputs/file.rb
logstash-lite-0.2.20110331121236 lib/logstash/inputs/file.rb
logstash-lite-0.2.20110329105411 lib/logstash/inputs/file.rb
logstash-lite-0.2.20110206003603 lib/logstash/inputs/file.rb
logstash-lite-0.2.20110203130400 lib/logstash/inputs/file.rb
logstash-lite-0.2.20110122143801 lib/logstash/inputs/file.rb
logstash-lite-0.2.20110112115019 lib/logstash/inputs/file.rb