Merge branch 'ServerOption' into NewOptions

Adds new server options
This commit is contained in:
Andrew Cammell 2014-10-05 13:23:01 +08:00
commit a4337eb8cb

View File

@ -353,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'
@ -400,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
@ -506,6 +507,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')
@ -569,11 +577,14 @@ def speedtest():
print_(' %s: %s' % (configitem, config[configitem])) print_(' %s: %s' % (configitem, config[configitem]))
sys.exit(0) sys.exit(0)
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) '
@ -590,8 +601,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'])