Load, Save and List servers
This commit is contained in:
parent
b0e1e58a0b
commit
066f8acaad
@ -30,6 +30,7 @@ import signal
|
|||||||
import socket
|
import socket
|
||||||
import timeit
|
import timeit
|
||||||
import threading
|
import threading
|
||||||
|
from json import dump as jsonDump, load as jsonLoad
|
||||||
|
|
||||||
# Used for bound_interface
|
# Used for bound_interface
|
||||||
socket_socket = socket.socket
|
socket_socket = socket.socket
|
||||||
@ -352,9 +353,10 @@ def getConfig():
|
|||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
def closestServers(client, all=False):
|
def closestServers(client, numServers = 5):
|
||||||
"""Determine the 5 closest speedtest.net servers based on geographic
|
"""Determine the closest speedtest.net servers based on geographic
|
||||||
distance
|
distance. The default number of servers to return is 5. If the
|
||||||
|
number of servers is specified as 0 then all servers are returned.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
url = 'http://www.speedtest.net/speedtest-servers-static.php'
|
url = 'http://www.speedtest.net/speedtest-servers-static.php'
|
||||||
@ -399,7 +401,7 @@ def closestServers(client, all=False):
|
|||||||
for d in sorted(servers.keys()):
|
for d in sorted(servers.keys()):
|
||||||
for s in servers[d]:
|
for s in servers[d]:
|
||||||
closest.append(s)
|
closest.append(s)
|
||||||
if len(closest) == 5 and not all:
|
if len(closest) == numServers and numServers != 0:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
@ -499,6 +501,13 @@ def speedtest():
|
|||||||
parser.add_argument('--list', action='store_true',
|
parser.add_argument('--list', action='store_true',
|
||||||
help='Display a list of speedtest.net servers '
|
help='Display a list of speedtest.net servers '
|
||||||
'sorted by distance')
|
'sorted by distance')
|
||||||
|
parser.add_argument('--listservers', action='store_true',
|
||||||
|
help='Display a list of speedtest.net servers '
|
||||||
|
'sorted by distance. Synonym for --list')
|
||||||
|
parser.add_argument('--saveservers', help='Specify a file to save the speedtest.net '
|
||||||
|
'servers list to')
|
||||||
|
parser.add_argument('--loadservers', help='Specify a file of speedtest.net servers '
|
||||||
|
'to use instead of downloading the list')
|
||||||
parser.add_argument('--server', help='Specify a server ID to test against')
|
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('--mini', help='URL of the Speedtest Mini server')
|
||||||
parser.add_argument('--source', help='Source IP address to bind to')
|
parser.add_argument('--source', help='Source IP address to bind to')
|
||||||
@ -533,11 +542,14 @@ def speedtest():
|
|||||||
print_('Cannot retrieve speedtest configuration')
|
print_('Cannot retrieve speedtest configuration')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if not args.simple:
|
# Retrieve speedtest server list
|
||||||
print_('Retrieving speedtest.net server list...')
|
if args.list or args.listservers or args.saveservers != None or (args.server and args.loadservers == None):
|
||||||
if args.list or args.server:
|
if not args.simple:
|
||||||
servers = closestServers(config['client'], True)
|
print_('Retrieving speedtest.net server list...')
|
||||||
if args.list:
|
servers = closestServers(config['client'], 0) # return all servers
|
||||||
|
|
||||||
|
# Display the server list and exit
|
||||||
|
if args.list or args.listservers:
|
||||||
serverList = []
|
serverList = []
|
||||||
for server in servers:
|
for server in servers:
|
||||||
line = ('%(id)4s) %(sponsor)s (%(name)s, %(country)s) '
|
line = ('%(id)4s) %(sponsor)s (%(name)s, %(country)s) '
|
||||||
@ -554,8 +566,36 @@ def speedtest():
|
|||||||
except IOError:
|
except IOError:
|
||||||
pass
|
pass
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
elif args.saveservers != None:
|
||||||
|
if not args.simple:
|
||||||
|
print_('Saving speedtest.net server list to %s...' % args.saveservers)
|
||||||
|
try:
|
||||||
|
svrFile = open(args.saveservers, 'w')
|
||||||
|
except:
|
||||||
|
print_('Unable to open server file')
|
||||||
|
sys.exit(1)
|
||||||
|
jsonDump(servers, svrFile)
|
||||||
|
svrFile.close()
|
||||||
|
print_('Done')
|
||||||
|
sys.exit(0)
|
||||||
|
elif args.loadservers != None:
|
||||||
|
if not args.simple:
|
||||||
|
print_('Loading speedtest.net server list from %s' % args.loadservers)
|
||||||
|
try:
|
||||||
|
svrFile = open(args.loadservers, 'r')
|
||||||
|
except:
|
||||||
|
print_('Unable to open server file')
|
||||||
|
sys.exit(1)
|
||||||
|
allServers = jsonLoad(svrFile)
|
||||||
|
svrFile.close()
|
||||||
|
if len(allServers) > 10:
|
||||||
|
servers = allServers[:5]
|
||||||
|
else:
|
||||||
|
servers = allServers
|
||||||
else:
|
else:
|
||||||
servers = closestServers(config['client'])
|
if not args.simple:
|
||||||
|
print_('Retrieving speedtest.net server list...')
|
||||||
|
servers = closestServers(config['client']) # return closest 5 servers
|
||||||
|
|
||||||
if not args.simple:
|
if not args.simple:
|
||||||
print_('Testing from %(isp)s (%(ip)s)...' % config['client'])
|
print_('Testing from %(isp)s (%(ip)s)...' % config['client'])
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user