From b0257ba12a59ffae330afe15b38ba629375d20ef Mon Sep 17 00:00:00 2001 From: Gonzalo Cao Cabeza de Vaca Date: Mon, 6 Jul 2015 12:25:31 +0200 Subject: [PATCH 1/4] Added CSV mode --- README.rst | 1 + speedtest-cli.1 | 6 ++++++ speedtest_cli.py | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) 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 2beeb35..4bc36c7 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -23,6 +23,8 @@ import signal import socket import timeit import threading +import csv +import datetime __version__ = '0.3.2' @@ -547,6 +549,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('--version', action='store_true', help='Show the version number and exit') @@ -703,6 +706,39 @@ 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: + with open(filename, 'ab+') as csvfile: + + 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().isoformat() + 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': ping, + 'Dowload Speed (Kb/s)': dlspeedk, + 'Upload Speed (Kb/s)': ulspeedk + }) + 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') From bd4bced3990906bc9256829fe00721b9eb124bbd Mon Sep 17 00:00:00 2001 From: Gonzalo Cao Cabeza de Vaca Date: Tue, 7 Jul 2015 09:04:26 +0200 Subject: [PATCH 2/4] Minor format fixes --- speedtest_cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index 100eb30..b8479b3 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -760,7 +760,7 @@ def speedtest(): csvwriter.writerow({'Test server': server, 'Date/Time': current_time, - 'Latency': ping, + 'Latency (ms)': ping, 'Dowload Speed (Kb/s)': dlspeedk, 'Upload Speed (Kb/s)': ulspeedk }) From cdf2724bd851b76bd68d7ffc182f4d477fafc3f7 Mon Sep 17 00:00:00 2001 From: Gonzalo Cao Cabeza de Vaca Date: Tue, 7 Jul 2015 09:37:31 +0200 Subject: [PATCH 3/4] Solved Python 2.4 build compatibilty and flake8 warnings --- speedtest_cli.py | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index b8479b3..0e78afa 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -736,34 +736,34 @@ def speedtest(): print_('Upload: %0.2f M%s/s' % ((ulspeed / 1000 / 1000) * args.units[1], args.units[0])) - if args.csv: + if args.csv: filename = args.csv file_exists = os.path.isfile(filename) - try: - with open(filename, 'ab+') as csvfile: + 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) + 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().isoformat() - dlspeedk = int(round((dlspeed / 1000) * 8, 0)) - ping = float(round(best['latency'], 2)) - ulspeedk = int(round((ulspeed / 1000) * 8, 0)) + server = '%(sponsor)s (%(name)s) [%(d)0.2f km]' % best + current_time = datetime.datetime.now().isoformat() + 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() - 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 - }) + 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") From 7bd66d654b19b0a4c9f3b5c261111c4ffb3a5b51 Mon Sep 17 00:00:00 2001 From: Gonzalo Cao Cabeza de Vaca Date: Tue, 7 Jul 2015 10:42:54 +0200 Subject: [PATCH 4/4] Improved compatibility of datetime field --- speedtest_cli.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index 0e78afa..7670a91 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -750,7 +750,8 @@ def speedtest(): fieldnames=headers) server = '%(sponsor)s (%(name)s) [%(d)0.2f km]' % best - current_time = datetime.datetime.now().isoformat() + 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))