Bug fixes, etc.
If multiple servers reported the exact same lat. and long. then they would overwrite eachother in the dict. I changed it to use a defaultdict so that you could have multiple servers with the exact same distance. (3 of my closest 5 reported the exact same corrdinates.) The latency it was printing was not the latency from the chosen best server. Now it is. Added a print out of the IP and ISP info.
This commit is contained in:
parent
824ec51280
commit
357649cba7
|
@ -23,6 +23,7 @@ import sys
|
||||||
import threading
|
import threading
|
||||||
from Queue import Queue
|
from Queue import Queue
|
||||||
from xml.dom import minidom as DOM
|
from xml.dom import minidom as DOM
|
||||||
|
from collections import defaultdict
|
||||||
try:
|
try:
|
||||||
from urlparse import parse_qs
|
from urlparse import parse_qs
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -203,16 +204,22 @@ def closestServers(client):
|
||||||
return None
|
return None
|
||||||
uh.close()
|
uh.close()
|
||||||
root = DOM.parseString(serversxml)
|
root = DOM.parseString(serversxml)
|
||||||
servers = {}
|
servers = defaultdict(list)
|
||||||
for server in root.getElementsByTagName('server'):
|
for server in root.getElementsByTagName('server'):
|
||||||
attrib = dict(server.attributes.items())
|
attrib = dict(server.attributes.items())
|
||||||
d = distance([float(client['lat']), float(client['lon'])],
|
d = distance([float(client['lat']), float(client['lon'])],
|
||||||
[float(attrib.get('lat')), float(attrib.get('lon'))])
|
[float(attrib.get('lat')), float(attrib.get('lon'))])
|
||||||
servers[d] = attrib
|
servers[d].append(attrib)
|
||||||
|
|
||||||
closest = []
|
closest = []
|
||||||
for d in sorted(servers.keys())[0:4]:
|
for d in sorted(servers.keys()):
|
||||||
closest.append(servers[d])
|
for s in servers[d]:
|
||||||
|
closest.append(s)
|
||||||
|
if(len(closest) == 5):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
break
|
||||||
|
|
||||||
del servers
|
del servers
|
||||||
del root
|
del root
|
||||||
|
@ -241,8 +248,9 @@ def getBestServer(servers):
|
||||||
avg = round((cum / 3) * 1000000, 3)
|
avg = round((cum / 3) * 1000000, 3)
|
||||||
results[avg] = server
|
results[avg] = server
|
||||||
|
|
||||||
best = results[sorted(results.keys())[0]]
|
fastest = sorted(results.keys())[0]
|
||||||
best['latency'] = avg
|
best = results[fastest]
|
||||||
|
best['latency'] = fastest
|
||||||
|
|
||||||
return best
|
return best
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue