pygui: added support for a details pane, can be toggled on/off, can be used to quickly view details for nodes or links
This commit is contained in:
parent
bb2ceaf993
commit
f582306bb9
12 changed files with 226 additions and 17 deletions
58
daemon/core/gui/frames/link.py
Normal file
58
daemon/core/gui/frames/link.py
Normal file
|
@ -0,0 +1,58 @@
|
|||
import tkinter as tk
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from core.gui.frames.base import DetailsFrame, InfoFrameBase
|
||||
from core.gui.utils import bandwidth_text
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from core.gui.app import Application
|
||||
from core.gui.graph.edges import CanvasEdge
|
||||
|
||||
|
||||
class EdgeInfoFrame(InfoFrameBase):
|
||||
def __init__(
|
||||
self, master: tk.BaseWidget, app: "Application", edge: "CanvasEdge"
|
||||
) -> None:
|
||||
super().__init__(master, app)
|
||||
self.edge: "CanvasEdge" = edge
|
||||
|
||||
def draw(self) -> None:
|
||||
self.columnconfigure(0, weight=1)
|
||||
link = self.edge.link
|
||||
options = link.options
|
||||
src_canvas_node = self.app.core.canvas_nodes[link.node1_id]
|
||||
src_node = src_canvas_node.core_node
|
||||
dst_canvas_node = self.app.core.canvas_nodes[link.node2_id]
|
||||
dst_node = dst_canvas_node.core_node
|
||||
|
||||
frame = DetailsFrame(self)
|
||||
frame.grid(sticky="ew")
|
||||
frame.add_detail("Source", src_node.name)
|
||||
iface1 = link.iface1
|
||||
if iface1:
|
||||
mac = iface1.mac if iface1.mac else "auto"
|
||||
frame.add_detail("MAC", mac)
|
||||
ip4 = f"{iface1.ip4}/{iface1.ip4_mask}" if iface1.ip4 else ""
|
||||
frame.add_detail("IP4", ip4)
|
||||
ip6 = f"{iface1.ip6}/{iface1.ip6_mask}" if iface1.ip6 else ""
|
||||
frame.add_detail("IP6", ip6)
|
||||
|
||||
frame.add_separator()
|
||||
frame.add_detail("Destination", dst_node.name)
|
||||
iface2 = link.iface2
|
||||
if iface2:
|
||||
mac = iface2.mac if iface2.mac else "auto"
|
||||
frame.add_detail("MAC", mac)
|
||||
ip4 = f"{iface2.ip4}/{iface2.ip4_mask}" if iface2.ip4 else ""
|
||||
frame.add_detail("IP4", ip4)
|
||||
ip6 = f"{iface2.ip6}/{iface2.ip6_mask}" if iface2.ip6 else ""
|
||||
frame.add_detail("IP6", ip6)
|
||||
|
||||
if link.HasField("options"):
|
||||
frame.add_separator()
|
||||
bandwidth = bandwidth_text(options.bandwidth)
|
||||
frame.add_detail("Bandwidth", bandwidth)
|
||||
frame.add_detail("Delay", f"{options.delay} us")
|
||||
frame.add_detail("Jitter", f"\u00B1{options.jitter} us")
|
||||
frame.add_detail("Loss", f"{options.loss}%")
|
||||
frame.add_detail("Duplicate", f"{options.dup}%")
|
Loading…
Add table
Add a link
Reference in a new issue