#!/usr/bin/env python
# Copyright Trimble Inc. 2020
usage="""\
 Grab NTP statistics from several servers to compare them.
 Example usage for comparing lockbox and 10.1.123.456:
   ./ntp_monitor.py stats.txt lockbox 10.1.123.456
   # Ctrl-C after you've logged for a while (1+ hours)
   ./ntp_plot.py stats.txt
"""
import ntplib
import time
from datetime import datetime

def main(out_filename, ntp_servers):
    c = ntplib.NTPClient()

    with open(out_filename,'w') as f_out:
        print('% N recv_time delay offset precision leap root_dispersion',file=f_out)
        for n,server in enumerate(ntp_servers):
            print('%% N=%d %s'%(n,server),file=f_out)

        while True:
            time.sleep(1)
            responses = [c.request(server, version=4) for server in ntp_servers]
            for n,resp in enumerate(responses):
                t_str = datetime.utcfromtimestamp(resp.recv_time).strftime('%Y-%m-%d %H:%M:%S.%f')
                print('%s %s offset %g'%(ntp_servers[n],t_str,resp.offset))
                print('%d %.3f %g %g %d %d %g' %
                      (n,
                       resp.recv_time,
                       resp.delay,
                       resp.offset,
                       resp.precision,
                       resp.leap,
                       resp.root_dispersion
                      ),
                      file=f_out)

if __name__ == "__main__":
    import argparse
    parser = argparse.ArgumentParser(description=usage,
                                     formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('filename', help='output text filename')
    parser.add_argument('ntp_server', help='NTP server IP address', nargs='+')
    args = parser.parse_args()
    main( args.filename, args.ntp_server )
