Bound namespace startup and measure LAN quality before stream tests
This commit is contained in:
1 parent
649be77fa3
commit
57bf4e490d
2 files changed
+9
-4
No files matched your search
@@ -3,6 +3,7 @@
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import select
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
@@ -89,7 +90,7 @@ class Network:
|
||||
child = subprocess.Popen(["unshare", "--net", "--", "python3", "-u", "-c", keeper],
|
||||
stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
|
||||
self.children.append(child)
|
||||
if child.stdout.readline().strip() != str(child.pid):
|
||||
if not select.select([child.stdout], [], [], 5)[0] or child.stdout.readline().strip() != str(child.pid):
|
||||
raise RuntimeError(f"Cannot create namespace {name}")
|
||||
inode = os.readlink(f"/proc/{child.pid}/ns/net")
|
||||
if inode in {self.controller, self.host_namespace}:
|
||||
|
||||
@@ -54,8 +54,6 @@ def serve(address):
|
||||
samples.append((time.monotonic() - started) * 1000)
|
||||
observed = reply["observed"]
|
||||
break
|
||||
else:
|
||||
pass
|
||||
if len(samples) + lost < _ + 1:
|
||||
lost += 1
|
||||
print(json.dumps({"samples_ms": samples, "observed": observed, "lost": lost}), flush=True)
|
||||
@@ -90,8 +88,14 @@ class Probes:
|
||||
return json.loads(line)
|
||||
|
||||
def calibrate(self):
|
||||
results = {"wan": [], "nat": []}
|
||||
results = {"lan": [], "wan": [], "nat": []}
|
||||
public = {n.country: n for n in NODES if not n.nat and n.client_type == 0}
|
||||
for country, first in public.items():
|
||||
second = next(n for n in NODES if n.country == country and not n.nat and n.name != first.name)
|
||||
result = self.exchange(first.name, second.ip, count=20)
|
||||
if len(result["samples_ms"]) < 19 or statistics.median(result["samples_ms"]) > 10:
|
||||
raise RuntimeError(f"LAN {country}: measured connection is not a good local link: {result}")
|
||||
results["lan"].append(dict(result, country=country, median_ms=statistics.median(result["samples_ms"])))
|
||||
for link in WANS:
|
||||
result = self.exchange(public[link.a].name, public[link.b].ip, count=40)
|
||||
if len(result["samples_ms"]) < 30:
|
||||
|
||||
Reference in new issue
Block a user