Bound namespace startup and measure LAN quality before stream tests

This commit is contained in:
evgeny committed 2026-10-12 00:01:40 +02:00
1 parent 649be77fa3
commit 57bf4e490d
2 files changed
+9 -4

No files matched your search

+2 -1
View File
@@ -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}:
+7 -3
View File
@@ -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: