latency, country labels
This commit is contained in:
parent
0005a15922
commit
1d6ccaf5bb
21
kglobe.py
21
kglobe.py
@ -69,7 +69,7 @@ def generate_arch(p1, p2, height_factor=0.2, n_points=100):
|
||||
return arch_points
|
||||
|
||||
|
||||
def traceroute(target: str) -> list[tuple[int, int]]:
|
||||
def traceroute(target: str):
|
||||
database = IP2Location.IP2Location("IP2LOCATION-LITE-DB5.BIN", "SHARED_MEMORY")
|
||||
|
||||
# Run traceroute command
|
||||
@ -78,10 +78,11 @@ def traceroute(target: str) -> list[tuple[int, int]]:
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
hops: list[str] = re.findall(r"\n\s*\d+\s+([\d.]+)", result.stdout)
|
||||
ips: list[str] = re.findall(r"\n\s*\d+\s+([\d.]+)\s+([\d.]+)", result.stdout)
|
||||
|
||||
coords: list[tuple[int, int]] = []
|
||||
for ip in hops:
|
||||
hops = []
|
||||
print(ips)
|
||||
for ip, latency in ips:
|
||||
if ip.startswith(
|
||||
(
|
||||
"10.",
|
||||
@ -108,10 +109,10 @@ def traceroute(target: str) -> list[tuple[int, int]]:
|
||||
):
|
||||
# exclude common local network addreses
|
||||
continue
|
||||
info = database.get_all(ip)
|
||||
coords.append((float(info.latitude), float(info.longitude)))
|
||||
return coords
|
||||
|
||||
hop = database.get_all(ip)
|
||||
hop.latency = latency
|
||||
hops.append(hop)
|
||||
return hops
|
||||
|
||||
async def main():
|
||||
|
||||
@ -150,7 +151,7 @@ async def main():
|
||||
if args.example:
|
||||
points_3d = [latlon_to_xyz(lat, lon) for lat, lon in EXAMPLE_ROUTE]
|
||||
else:
|
||||
points_3d = [latlon_to_xyz(lat, lon) for lat, lon in locations]
|
||||
points_3d = [latlon_to_xyz(float(_.latitude), float(_.longitude)) for _ in locations]
|
||||
|
||||
if args.size:
|
||||
width, height = args.size
|
||||
@ -165,7 +166,7 @@ async def main():
|
||||
city_marker = pv.Sphere(center=point, radius=0.02)
|
||||
plotter.add_mesh(city_marker, color="blue")
|
||||
|
||||
labels = [str(_) for _ in range(len(points_3d))]
|
||||
labels = [ f'{_.country_short}: {_.latency}ms' for _ in locations]
|
||||
raised_points = [point * 1.1 for point in points_3d]
|
||||
if raised_points:
|
||||
plotter.add_point_labels(raised_points, labels, point_size=0, font_size=14)
|
||||
|
@ -5,6 +5,7 @@ description = "Add your description here"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.13"
|
||||
dependencies = [
|
||||
"ip2location>=8.10.5",
|
||||
"numpy<2",
|
||||
"pyrender>=0.1.45",
|
||||
"pyvista>=0.45.3",
|
||||
|
@ -42,6 +42,7 @@ class TerminalPlotter(pv.Plotter):
|
||||
self.start_y -= missing
|
||||
print("\n" * self.needed_lines, end="")
|
||||
kitty.set_position(self.start_y, self.start_x)
|
||||
self.orbit = self.generate_orbital_path()
|
||||
|
||||
async def _handle_key(self, c):
|
||||
if c == "a":
|
||||
@ -56,6 +57,8 @@ class TerminalPlotter(pv.Plotter):
|
||||
self.camera.zoom(1.1)
|
||||
elif c == "-":
|
||||
self.camera.zoom(0.9)
|
||||
elif c == "p":
|
||||
self.fly_to(self.orbit.points[15])
|
||||
|
||||
async def _input_loop(self):
|
||||
fd = sys.stdin.fileno()
|
||||
@ -70,7 +73,7 @@ class TerminalPlotter(pv.Plotter):
|
||||
self._running = False
|
||||
else:
|
||||
await self._handle_key(c)
|
||||
await asyncio.sleep(0.01)
|
||||
await asyncio.sleep(0.001)
|
||||
finally:
|
||||
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
|
||||
|
||||
@ -98,6 +101,7 @@ class TerminalPlotter(pv.Plotter):
|
||||
img.save(buffer, format="PNG")
|
||||
await kitty.draw_to_terminal(buffer)
|
||||
kitty.set_position(self.start_y, self.start_x)
|
||||
self.camera.Azimuth(1)
|
||||
|
||||
async def run(self):
|
||||
await self.initialize()
|
||||
|
Loading…
Reference in New Issue
Block a user