From 10d666daacce887f4be3cfcd9440265f1d442980 Mon Sep 17 00:00:00 2001 From: Petr Kubica Date: Sat, 30 Apr 2016 18:51:06 +0200 Subject: [PATCH] distance, upload and download options Now user can limit output from --list parameter using --distance parameter (parameter can be used without --list parameter) Added support for testing only download or upload --- README.rst | 49 ++++++++++++++++++-------------- speedtest_cli.py | 74 ++++++++++++++++++++++++++++++------------------ 2 files changed, 74 insertions(+), 49 deletions(-) diff --git a/README.rst b/README.rst index fccf934..25ed98e 100644 --- a/README.rst +++ b/README.rst @@ -74,30 +74,35 @@ 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] + [--distance DISTANCE] [--download] [--upload] + [--server SERVER] [--mini MINI] [--source SOURCE] + [--timeout TIMEOUT] [--secure] [--version] - Command line interface for testing internet bandwidth using speedtest.net. - -------------------------------------------------------------------------- - https://github.com/sivel/speedtest-cli + Command line interface for testing internet bandwidth using speedtest.net. + -------------------------------------------------------------------------- + https://github.com/sivel/speedtest-cli - optional arguments: - -h, --help show this help message and exit - --bytes Display values in bytes instead of bits. Does not affect - the image generated by --share - --share Generate and provide a URL to the speedtest.net share - results image - --simple Suppress verbose output, only show basic information - --list Display a list of speedtest.net servers sorted by - distance - --server SERVER Specify a server ID to test against - --mini MINI URL of the Speedtest Mini server - --source SOURCE Source IP address to bind to - --timeout TIMEOUT HTTP timeout in seconds. Default 10 - --secure Use HTTPS instead of HTTP when communicating with - speedtest.net operated servers - --version Show the version number and exit + optional arguments: + -h, --help show this help message and exit + --bytes Display values in bytes instead of bits. Does not + affect the image generated by --share + --share Generate and provide a URL to the speedtest.net share + results image + --simple Suppress verbose output, only show basic information + --list Display a list of speedtest.net servers sorted by + distance + --distance DISTANCE Limit distance speedtest.net servers, list only closer + servers than specified + --download Test only download + --upload Test only upload + --server SERVER Specify a server ID to test against + --mini MINI URL of the Speedtest Mini server + --source SOURCE Source IP address to bind to + --timeout TIMEOUT HTTP timeout in seconds. Default 10 + --secure Use HTTPS instead of HTTP when communicating with + speedtest.net operated servers + --version Show the version number and exit Inconsistency ------------- diff --git a/speedtest_cli.py b/speedtest_cli.py index d93d5c3..8a3a82a 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -582,6 +582,13 @@ def speedtest(): parser.add_argument('--list', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance') + parser.add_argument('--distance', + help='Limit distance speedtest.net servers, ' + 'list only closer servers than specified') + parser.add_argument('--download', action='store_true', + help='Test only download') + parser.add_argument('--upload', action='store_true', + help='Test only upload') parser.add_argument('--server', help='Specify a server ID to test against') parser.add_argument('--mini', help='URL of the Speedtest Mini server') parser.add_argument('--source', help='Source IP address to bind to') @@ -627,11 +634,13 @@ def speedtest(): if not args.simple: print_('Retrieving speedtest.net server list...') - if args.list or args.server: + if args.list or args.server or args.distance: servers = closestServers(config['client'], True) - if args.list: + if args.list or args.distance: serverList = [] for server in servers: + if args.distance and server['d'] > int(args.distance): + break line = ('%(id)4s) %(sponsor)s (%(name)s, %(country)s) ' '[%(d)0.2f km]' % server) serverList.append(line) @@ -708,36 +717,47 @@ def speedtest(): else: print_('Ping: %(latency)s ms' % best) - sizes = [350, 500, 750, 1000, 1500, 2000, 2500, 3000, 3500, 4000] - urls = [] - for size in sizes: - for i in range(0, 4): - urls.append('%s/random%sx%s.jpg' % - (os.path.dirname(best['url']), size, size)) - if not args.simple: - print_('Testing download speed', end='') - dlspeed = downloadSpeed(urls, args.simple) - if not args.simple: - print_() - print_('Download: %0.2f M%s/s' % - ((dlspeed / 1000 / 1000) * args.units[1], args.units[0])) + if not args.upload or args.download: + sizes = [350, 500, 750, 1000, 1500, 2000, 2500, 3000, 3500, 4000] + urls = [] + for size in sizes: + for i in range(0, 4): + urls.append('%s/random%sx%s.jpg' % + (os.path.dirname(best['url']), size, size)) + if not args.simple: + print_('Testing download speed', end='') + dlspeed = downloadSpeed(urls, args.simple) - sizesizes = [int(.25 * 1000 * 1000), int(.5 * 1000 * 1000)] - sizes = [] - for size in sizesizes: - for i in range(0, 25): - sizes.append(size) - if not args.simple: - print_('Testing upload speed', end='') - ulspeed = uploadSpeed(best['url'], sizes, args.simple) - if not args.simple: - print_() - print_('Upload: %0.2f M%s/s' % - ((ulspeed / 1000 / 1000) * args.units[1], args.units[0])) + if not args.simple: + print_() + print_('Download: %0.2f M%s/s' % + ((dlspeed / 1000 / 1000) * args.units[1], args.units[0])) + else: + dlspeed = 0 + + if not args.download or args.upload: + sizesizes = [int(.25 * 1000 * 1000), int(.5 * 1000 * 1000)] + sizes = [] + for size in sizesizes: + for i in range(0, 25): + sizes.append(size) + if not args.simple: + print_('Testing upload speed', end='') + ulspeed = uploadSpeed(best['url'], sizes, args.simple) + + if not args.simple: + print_() + print_('Upload: %0.2f M%s/s' % + ((ulspeed / 1000 / 1000) * args.units[1], args.units[0])) + else: + ulspeed = 0 if args.share and args.mini: print_('Cannot generate a speedtest.net share results image while ' 'testing against a Speedtest Mini server') + elif args.share and (args.upload != args.download): + print_('Cannot generate a speedtest.net share results image while ' + 'testing only download or upload') elif args.share: dlspeedk = int(round((dlspeed / 1000) * 8, 0)) ping = int(round(best['latency'], 0))