# Show pseudo-graphic tables using rich library, if there is no frontend from rich.console import Console from rich.table import Table from database import fetch_all from kubernetes import client, config def display_metal_nodes(): console = Console() table = Table(title="Metal Nodes") table.add_column("ID", justify="right") table.add_column("Name") table.add_column("Location") table.add_column("Vendor") table.add_column("CPU", justify="right") table.add_column("Memory") table.add_column("Storage") nodes = fetch_all("metal_nodes") for node in nodes: table.add_row( str(node[0]), node[1], node[2], node[3], str(node[4]), node[5], node[6] ) console.print(table) def display_virtual_machines(): console = Console() table = Table(title="Virtual Machines") table.add_column("ID", justify="right") table.add_column("Name") table.add_column("Location") table.add_column("CPU", justify="right") table.add_column("Memory") table.add_column("Storage") table.add_column("Type") vms = fetch_all("virtual_machines") for vm in vms: table.add_row( str(vm[0]), vm[1], vm[2], str(vm[3]), vm[4], vm[5], vm[6] ) console.print(table) def kib_to_gib(kib_value): """ Convert memory from Ki (kibibytes) to GiB (gibibytes). """ try: kib = int(kib_value[:-2]) gib = kib / 1024 / 1024 return f"{gib:.2f} GiB" except ValueError: return kib_value # Return original if conversion fails def display_kubernetes_nodes(): console = Console() config.load_incluster_config() v1 = client.CoreV1Api() table = Table(title="Kubernetes Nodes") table.add_column("Node Name") table.add_column("CPU", justify="right") table.add_column("Memory", justify="right") table.add_column("Pods Allocatable", justify="right") nodes = v1.list_node() for node in nodes.items: table.add_row( node.metadata.name, node.status.capacity.get("cpu"), kib_to_gib(node.status.capacity.get("memory")), node.status.allocatable.get("pods") ) console.print(table) console.print("\n[bold]Namespaces:[/bold]") namespaces = [ns.metadata.name for ns in v1.list_namespace().items] console.print(", ".join(namespaces)) if __name__ == "__main__": display_metal_nodes() display_virtual_machines() display_kubernetes_nodes()