astra / utils /mirrortest
Lorenzob's picture
Upload folder using huggingface_hub
859a779 verified
raw
history blame
3.59 kB
#!/usr/bin/env python3
import threading, queue, time, re, os, tempfile
import aptsources.sourceslist
import aptsources.distro
from timeit import Timer
import urllib.request, urllib.parse, urllib.error
import socket
import random
socket.setdefaulttimeout(2)
class MirrorTest:
class PingWorker(threading.Thread):
def __init__(self, jobs, results, id):
self.id = id
self.jobs = jobs
self.results = results
self.match_result = re.compile(r"^rtt .* = [\.\d]+/([\.\d]+)/.*")
threading.Thread.__init__(self)
def run(self):
result = None
while MirrorTest.completed_pings < MirrorTest.todo:
try:
mirror = self.jobs.get(True, 1)
host = mirror.hostname
except:
continue
print("Pinging (Worker %s) %s (%s) ..." % (self.id,
host,
MirrorTest.completed_pings))
commando = os.popen("ping -q -c 4 -W 2 -i 0.3 %s" % host,
"r")
while True:
line = commando.readline()
if not line:
break
result = re.findall(self.match_result, line)
MirrorTest.completed_pings_lock.acquire()
MirrorTest.completed_pings += 1
if result:
self.results.append([float(result[0]), host, mirror])
MirrorTest.completed_pings_lock.release()
def speed_test(self, mirror):
url = "%s/%s" % (mirror.get_repo_urls()[0],
self.test_file)
print("Downloading %s ..." % url)
start = time.time()
try:
data = urllib.request.urlopen(url).read(51200)
return 50 / (time.time() - start)
except:
return 0
def __init__(self, hosts, test_file):
self.test_file = test_file
jobs = queue.Queue()
results = []
for h in hosts:
jobs.put(h)
self.threads = []
MirrorTest.completed_pings = 0
MirrorTest.completed_pings_lock = threading.Lock()
MirrorTest.todo = len(hosts)
for i in range(10):
t = MirrorTest.PingWorker(jobs, results, i)
self.threads.append(t)
t.start()
for t in self.threads:
t.join()
results.sort()
print("\n\nTop ten RTTs:")
for r in results[0:10]:
print("%s: %s" % (r[1], r[0]))
print("\n\n")
results.insert(0, [0, "rand", hosts[random.randint(1, len(hosts))]])
results.insert(0, [0, "rand", hosts[random.randint(1, len(hosts))]])
final = [(self.speed_test(r[2]), r[2]) for r in results[0:12]]
final.sort()
final.reverse()
print("\n\nBest mirrors:")
for f in final:
print("%s: %s KByte/s" % (f[1].hostname, int(f[0])))
if __name__ == "__main__":
distro = aptsources.distro.get_distro()
distro.get_sources(aptsources.sourceslist.SourcesList())
pipe = os.popen("dpkg --print-architecture")
arch = pipe.read().strip()
test_file = "dists/%s/%s/binary-%s/Packages.gz" % \
(distro.source_template.name,
distro.source_template.components[0].name,
arch)
app = MirrorTest(distro.source_template.mirror_set.values(),
test_file)