diff --git a/README.rst b/README.rst index 88baef9..65a11a6 100644 --- a/README.rst +++ b/README.rst @@ -91,6 +91,7 @@ Usage --mini MINI URL of the Speedtest Mini server --source SOURCE Source IP address to bind to --timeout TIMEOUT HTTP timeout in seconds. Default 10 + --csv CSV Write output to CSV file --version Show the version number and exit Inconsistency diff --git a/speedtest-cli.1 b/speedtest-cli.1 index eb20ea7..6183f36 100644 --- a/speedtest-cli.1 +++ b/speedtest-cli.1 @@ -58,6 +58,12 @@ URL of the Speedtest Mini server Source IP address to bind to .RE +\fB\-\-csv CSV\fR +.RS +CSV file to write to +.RE + + \fB\-\-version\fR .RS Show the version number and exit diff --git a/speedtest_cli.py b/speedtest_cli.py index 5f343f6..7670a91 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -24,6 +24,8 @@ import socket import timeit import platform import threading +import csv +import datetime __version__ = '0.3.3b' @@ -585,6 +587,7 @@ def speedtest(): parser.add_argument('--source', help='Source IP address to bind to') parser.add_argument('--timeout', default=10, type=int, help='HTTP timeout in seconds. Default 10') + parser.add_argument('--csv', help='Add data to file using csv format') parser.add_argument('--secure', action='store_true', help='Use HTTPS instead of HTTP when communicating ' 'with speedtest.net operated servers') @@ -733,6 +736,40 @@ def speedtest(): print_('Upload: %0.2f M%s/s' % ((ulspeed / 1000 / 1000) * args.units[1], args.units[0])) + if args.csv: + filename = args.csv + file_exists = os.path.isfile(filename) + try: + csvfile = open(filename, 'ab+') + try: + + headers = ['Test server', 'Date/Time', 'Latency (ms)', + 'Dowload Speed (Kb/s)', 'Upload Speed (Kb/s)'] + csvwriter = csv.DictWriter(csvfile, delimiter=';', + lineterminator='\n', + fieldnames=headers) + + server = '%(sponsor)s (%(name)s) [%(d)0.2f km]' % best + current_time = datetime.datetime.now().strftime( + "%Y/%m/%d %H:%M:%S") + dlspeedk = int(round((dlspeed / 1000) * 8, 0)) + ping = float(round(best['latency'], 2)) + ulspeedk = int(round((ulspeed / 1000) * 8, 0)) + + if not file_exists: + csvwriter.writeheader() + + csvwriter.writerow({'Test server': server, + 'Date/Time': current_time, + 'Latency (ms)': ping, + 'Dowload Speed (Kb/s)': dlspeedk, + 'Upload Speed (Kb/s)': ulspeedk}) + finally: + csvfile.close() + except IOError: + print_("Unable to write CSV file") + sys.exit(1) + if args.share and args.mini: print_('Cannot generate a speedtest.net share results image while ' 'testing against a Speedtest Mini server')