diff --git a/AppImage/components/network-metrics.tsx b/AppImage/components/network-metrics.tsx index a10db1e..254c63a 100644 --- a/AppImage/components/network-metrics.tsx +++ b/AppImage/components/network-metrics.tsx @@ -323,13 +323,13 @@ export function NetworkMetrics() { {/* First row: Icon, Name, Type Badge, Physical Interface, Status */}
-
+
{interface_.name}
{typeBadge.label} {interface_.bridge_physical_interface && ( -
+
→ {interface_.bridge_physical_interface} {interface_.bridge_physical_interface.startsWith("bond") && networkData.physical_interfaces && ( @@ -529,9 +529,54 @@ export function NetworkMetrics() { {selectedInterface.type === "bridge" && selectedInterface.bridge_physical_interface && (
Physical Interface
-
+
{selectedInterface.bridge_physical_interface}
+ {selectedInterface.bridge_physical_interface.startsWith("bond") && + networkData?.physical_interfaces && ( + <> + {(() => { + const bondInterface = networkData.physical_interfaces.find( + (iface) => iface.name === selectedInterface.bridge_physical_interface, + ) + if (bondInterface?.bond_slaves && bondInterface.bond_slaves.length > 0) { + return ( +
+
Bond Members
+
+ {bondInterface.bond_slaves.map((slave, idx) => ( + + {slave} + + ))} +
+
+ ) + } + return null + })()} + + )} + {selectedInterface.bridge_bond_slaves && selectedInterface.bridge_bond_slaves.length > 0 && ( +
+
Bond Members
+
+ {selectedInterface.bridge_bond_slaves.map((slave, idx) => ( + + {slave} + + ))} +
+
+ )}
)} {selectedInterface.type === "vm_lxc" && selectedInterface.vm_name && ( @@ -691,64 +736,36 @@ export function NetworkMetrics() { )} {/* Bridge Information */} - {selectedInterface.type === "bridge" && ( + {selectedInterface.type === "bridge" && selectedInterface.bridge_members && (

Bridge Configuration

-
- {selectedInterface.bridge_physical_interface && ( -
-
Physical Interface
-
- {selectedInterface.bridge_physical_interface} -
-
- )} - {selectedInterface.bridge_bond_slaves && selectedInterface.bridge_bond_slaves.length > 0 && ( -
-
Bond Slave Interfaces
-
- {selectedInterface.bridge_bond_slaves.map((slave, idx) => ( +
+
Virtual Member Interfaces
+
+ {selectedInterface.bridge_members.length > 0 ? ( + selectedInterface.bridge_members + .filter( + (member) => + !member.startsWith("enp") && + !member.startsWith("eth") && + !member.startsWith("eno") && + !member.startsWith("ens") && + !member.startsWith("wlan") && + !member.startsWith("wlp"), + ) + .map((member, idx) => ( - {slave} + {member} - ))} -
-
- )} - {selectedInterface.bridge_members && ( -
-
Virtual Member Interfaces
-
- {selectedInterface.bridge_members.length > 0 ? ( - selectedInterface.bridge_members - .filter( - (member) => - !member.startsWith("enp") && - !member.startsWith("eth") && - !member.startsWith("eno") && - !member.startsWith("ens") && - !member.startsWith("wlan") && - !member.startsWith("wlp"), - ) - .map((member, idx) => ( - - {member} - - )) - ) : ( -
No virtual members
- )} -
-
- )} + )) + ) : ( +
No virtual members
+ )} +
)} diff --git a/AppImage/components/virtual-machines.tsx b/AppImage/components/virtual-machines.tsx index 1027705..75abecd 100644 --- a/AppImage/components/virtual-machines.tsx +++ b/AppImage/components/virtual-machines.tsx @@ -94,24 +94,6 @@ const formatBytes = (bytes: number | undefined): string => { return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}` } -const extractIPFromNetConfig = (netConfig: string | undefined): string => { - if (!netConfig) return "N/A" - - // Parse the network config string: name=eth0,bridge=vmbr0,gw=192.168.0.1,hwaddr=...,ip=192.168.0.4/24,type=veth - const ipMatch = netConfig.match(/ip=([^,]+)/) - if (ipMatch && ipMatch[1]) { - const ip = ipMatch[1] - // Check if it's DHCP - if (ip.toLowerCase() === "dhcp") { - return "DHCP" - } - // Return the IP without the subnet mask for cleaner display - return ip.split("/")[0] - } - - return "N/A" -} - export function VirtualMachines() { const { data: vmData, @@ -414,7 +396,7 @@ export function VirtualMachines() {
-
+
CPU Usage
{cpuPercent}%
@@ -642,31 +624,16 @@ export function VirtualMachines() {
{Object.keys(vmDetails.config) .filter((key) => key.match(/^net\d+$/)) - .map((netKey) => { - const netConfig = vmDetails.config[netKey] - const ipAddress = selectedVM?.type === "lxc" ? extractIPFromNetConfig(netConfig) : null - - return ( -
-
- Network Interface {netKey.replace("net", "")} -
- {ipAddress && ( -
- IP Address: - - {ipAddress} - -
- )} -
- {netConfig} -
+ .map((netKey) => ( +
+
+ Network Interface {netKey.replace("net", "")}
- ) - })} +
+ {vmDetails.config[netKey]} +
+
+ ))} {vmDetails.config.nameserver && (
DNS Nameserver