#!/usr/bin/env ruby

require "filewatch/tail"
require "optparse"

progname = File.basename($0)

config = {
  :verbose => false,
}

opts = OptionParser.new do |opts|
  opts.banner = "#{progname} [-v] [-s path] [-i interval] [-x glob] path/glob ..."

  opts.on("-v", "--verbose", "Enable verbose/debug output") do
    config[:verbose] = true
  end

  opts.on("-x", "--exclude PATH", String, "path to exclude from watching") do |path|
    config[:exclude] ||= []
    config[:exclude] << path
  end

  opts.on("-s", "--sincedb PATH", String, "Sincedb path") do |path|
    config[:sincedb_path] = path
  end

  opts.on("-i", "--interval SECONDS", Integer,
          "Sincedb write interval") do |path|
    config[:sincedb_write_interval] = path
  end
end

begin
  opts.order!
rescue OptionParser::InvalidOption
  $stderr.puts "#{progname}: #{$!}"
  $stderr.puts opts.usage
end

logger = Logger.new(STDERR)
logger.progname = progname
logger.level = config[:verbose] ? Logger::DEBUG : Logger::INFO
config[:logger] = logger

tail = FileWatch::Tail.new(config)

ARGV.each { |path| tail.tail(path) }

Signal.trap("EXIT") { tail.sincedb_write("globtail exiting") }

$stdout.sync = true
tail.subscribe do |path, line|
  puts "#{path}: #{line}"
end
