#!/usr/bin/ruby

require 'time'

usage = "which-traces <traces_dir> <start_date> <end_date>"
traces_dir = ARGV[0] || abort("Expecting traces directory: " + usage);
start_date = ARGV[1] || abort("Expecting start_date: " + usage);
end_date = ARGV[2] || abort("Expecting end_date: " + usage);

def parse_time(s, start)
  if s =~ /^(\d+)(\.\d+)?$/
    return Time.at(s.to_f)
  else
    return Time.parse(s, start)
  end
end

start_date = parse_time(start_date, nil)
end_date = parse_time(end_date, start_date)
abort "end date can not be less than start date" if end_date < start_date

$stderr.puts "which-traces 0.1"
$stderr.puts "traces directory: " + traces_dir
$stderr.puts "from: " + start_date.to_s
$stderr.puts "to: " + end_date.to_s


begin
  if !File.directory?(traces_dir)
    raise "#{traces_dir} doesn't exist!"
  end

  traces = Dir.glob(File.join(traces_dir, "*.pcap*"))
  use_mtime = true
  if traces.size == 0
    traces = Dir.glob(File.join(traces_dir, "[0-9]*.[0-9]*"))
    raise "#{traces_dir} doesn't contain traces!" if traces.size == 0
    use_mtime = false
  end

  traces.sort!
  pt = nil
  while traces.size > 0
    t = traces.shift
    if use_mtime
        ts = File.mtime(t)
    else
        ts = Time.at(File.basename(t).to_f)
    end
    if ts >= start_date
      traces.unshift t
      break
    end
    pt = t
  end
  puts pt if pt != nil

  while traces.size > 0
    t = traces.shift
    if use_mtime
        ts = File.mtime(t)
    else
        ts = Time.at(File.basename(t).to_f)
    end
    break if ts > end_date
    puts t
  end

rescue
  $stderr.puts "ERR: " + $!.to_s
  exit 1
end

