#!/usr/bin/python3.6

import sys, os

ip = sys.argv[1]
rtt = []

if ip=="-c":
  # create configuration
  source = sys.argv[2]
  def ifcfg(ip):
      yield "%s_packet_loss" % ip, dict(
        file="%s/packet_loss" % ip,
        log="logs/%s_packet_loss" % ip,
        ifDescr="packet_loss %s@%s" % (ip, source),
        unit="%"
      )
      for rtt in ["min", "avg", "max", "std"]:
        yield "%s_rtt_%s" % (ip, rtt), dict(
          file="%s/rtt_%s" % (ip, rtt),
          log="logs/%s_rtt_%s" % (ip, rtt),
          ifDescr="rtt_%s %s@%s" % (rtt, ip, source),
          unit="ms"
        )
  conf = dict(
    ip = source,
    ifs = {},
    name = source,
    cmd_type = "files",
    max_age = 3660
  )
  for ip in sys.argv[3:]:
    try:
      os.makedirs(ip)
    except FileExistsError:
      pass
    for cfg in ifcfg(ip):
      conf["ifs"][cfg[0]] = cfg[1]
  import json
  print(json.dumps(conf, indent=2))
  sys.exit()

ping = os.popen("ping -i 0.2 -c 10 -n %s" % ip)
for row in ping.readlines():
  rowa = row.split(" ")
  # 20 packets transmitted, 20 received, 0% packet loss, time 3952ms
  # rtt min/avg/max/mdev = 0.012/0.042/0.056/0.013 ms
  if "packets transmitted," in row:
    transmit = int(rowa[0])
    receive = int(rowa[3])
  elif rowa[0]=="rtt":
    rtt = [float(x) for x in rowa[3].split("/")]

loss = (transmit-receive)/transmit

def save(name, value):
    open(os.path.join(path, name), "wt").write(str(value))

if sys.argv[2:]:
  path = sys.argv[2]
  save("packet_loss", loss)
  if rtt:
    save("rtt_min", rtt[0])
    save("rtt_avg", rtt[1])
    save("rtt_max", rtt[2])
    save("rtt_std", rtt[3])
else:
  print(transmit, receive, loss, rtt)
