agent_name = 'ss1 (1)'
agent = Item.agents.where(name: agent_name).first
raise("agent #{agent_name} not found") unless agent

target = agent.get_parent

evs = Evidence.target(target).where(type: 'sync')

puts "#{target.name} > #{agent.name} > #{evs.count} ip evidence"

columns = {
  'started_at' => 18,
  'ended_at' => 20,
  'elapsed' => 10,
  'total' => 6,
  'count' => 6,
  'speed' => 20,
  'timeout' => 9,
  'size' => 13,
  'ip' => 20,
  'age' => 30,
}

loop do
  puts columns.keys.map { |s| s.ljust(columns[s]) }.join('|')
  index = 0
  evs.each { |ev|
    data = ev.data
    next unless data['total']
    index += 1
    puts columns.keys.map { |s| s.ljust(columns[s], '=') }.join('|') if index % 5 == 0
    hash = {}
    hash['started_at'] = data['started_at'] ? Time.at(data['started_at']).utc.strftime('%H:%M:%S %L') : ''
    hash['ended_at'] = data['ended_at'] ? Time.at(data['ended_at']).utc.strftime('%H:%M:%S %L') : ''
    hash['elapsed'] = data['ended_at'] && data['started_at'] ?  (data['ended_at'] - data['started_at']).round(3) : ''
    hash['total'] = data['total'] || ''
    hash['count'] = data['count'] || ''
    hash['speed'] = data['speed'] ? ((data['speed'] / 1024).round(1).to_s + " kbyte/s") : ''
    hash['timeout'] = data['timeout'] ? 'yes' : 'no'
    hash['size'] = data['size'] ? data['size'].to_s_bytes : ''
    hash['ip'] = data['ip'] || ''
    hash['age'] = data['started_at'] ? ("Started "+(Time.now.utc.to_f - data['started_at']).round(1).to_s + " s ago") : ''

    puts hash.keys.map { |k| hash[k].to_s.ljust(columns[k]) }.join('|')
  }

  sleep 1
end
