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')