From 414f4d44ae8f45c5e362c0a7f20410c192f43c25 Mon Sep 17 00:00:00 2001 From: Justin Phelps Date: Mon, 8 Feb 2016 10:22:11 -0600 Subject: [PATCH] rebase of pull request sivel/speedtest-cli/pull/162 --- README.rst | 7 ++++--- speedtest-cli.1 | 5 +++++ speedtest_cli.py | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index fccf934..9ed9ad9 100644 --- a/README.rst +++ b/README.rst @@ -74,9 +74,9 @@ Usage :: $ speedtest-cli -h - usage: speedtest-cli [-h] [--bytes] [--share] [--simple] [--list] - [--server SERVER] [--mini MINI] [--source SOURCE] - [--timeout TIMEOUT] [--secure] [--version] + usage: speedtest_cli.py [-h] [--bytes] [--share] [--simple] [--list] + [--server SERVER] [--mini MINI] [--source SOURCE] + [--timeout TIMEOUT] [--csv CSV] [--secure] [--version] Command line interface for testing internet bandwidth using speedtest.net. -------------------------------------------------------------------------- @@ -95,6 +95,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 Add data to file using csv format --secure Use HTTPS instead of HTTP when communicating with speedtest.net operated servers --version Show the version number and exit diff --git a/speedtest-cli.1 b/speedtest-cli.1 index eb20ea7..f0c61e8 100644 --- a/speedtest-cli.1 +++ b/speedtest-cli.1 @@ -58,6 +58,11 @@ URL of the Speedtest Mini server Source IP address to bind to .RE +\fB\-\-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 d93d5c3..3a742af 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.4' @@ -587,6 +589,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') @@ -735,6 +738,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')