Skip to content

Commit

Permalink
refactor: use @Property instead of method whenever possible in PVEClu…
Browse files Browse the repository at this point in the history
…ster and PVENode
  • Loading branch information
plaffitt committed Jan 23, 2025
1 parent 222bacc commit 4877d70
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 20 deletions.
6 changes: 3 additions & 3 deletions src/pvecontrol/actions/cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@


def action_clusterstatus(proxmox, _args):
status = "healthy" if proxmox.is_healthy() else "not healthy"
status = "healthy" if proxmox.is_healthy else "not healthy"

templates = sum(len(node.templates()) for node in proxmox.nodes)
templates = sum(len(node.templates) for node in proxmox.nodes)
vms = sum(len(node.vms) for node in proxmox.nodes)
metrics = proxmox.metrics()
metrics = proxmox.metrics

def _get_cpu_output():
c_usage = metrics["cpu"]["usage"]
Expand Down
4 changes: 2 additions & 2 deletions src/pvecontrol/actions/vm.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@


def _get_vm(proxmox, vmid):
for vm in proxmox.vms():
for vm in proxmox.vms:
logging.debug("_get_vm: %s", vm)
if vm.vmid == vmid:
return vm
Expand Down Expand Up @@ -63,5 +63,5 @@ def action_vmmigrate(proxmox, args):

def action_vmlist(proxmox, args):
"""List VMs in the Proxmox Cluster"""
vms = proxmox.vms()
vms = proxmox.vms
print_output(vms, columns=args.columns, sortby=args.sort_by, filters=args.filter, output=args.output)
37 changes: 23 additions & 14 deletions src/pvecontrol/cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def _initstatus(self):
self.resources = self.api.cluster.resources.get()

self.nodes = []
for node in self.get_resources_nodes():
for node in self.resources_nodes:
self.nodes.append(
PVENode(
self,
Expand All @@ -35,7 +35,7 @@ def _initstatus(self):
)

self.storages = []
for storage in self.get_resources_storages():
for storage in self.resources_storages:
self.storages.append(PVEStorage(storage.pop("node"), storage.pop("id"), storage.pop("shared"), **storage))

@property
Expand Down Expand Up @@ -81,6 +81,7 @@ def __str__(self):
output += f"{node}\n"
return output

@property
def vms(self):
"""Return all vms on this cluster"""
vms = []
Expand Down Expand Up @@ -111,19 +112,17 @@ def find_task(self, upid):
return task
return False

@property
def is_healthy(self):
return bool([item for item in self.status if item.get("type") == "cluster"][0]["quorate"])

def get_resources_nodes(self):
return [resource for resource in self.resources if resource["type"] == "node"]

def get_vm(self, vm_id):
if isinstance(vm_id, str):
vm_id = int(vm_id)

result = None
node_name = None
for vm in self.get_resources_vms():
for vm in self.resources_vms:
if vm["vmid"] == vm_id:
node_name = vm["node"]
break
Expand All @@ -135,17 +134,24 @@ def get_vm(self, vm_id):

return result

def get_resources_vms(self):
@property
def resources_nodes(self):
return [resource for resource in self.resources if resource["type"] == "node"]

@property
def resources_vms(self):
return [resource for resource in self.resources if resource["type"] == "qemu"]

def get_resources_storages(self):
@property
def resources_storages(self):
return [resource for resource in self.resources if resource["type"] == "storage"]

def get_storage(self, storage_name):
return next(filter(lambda s: s.storage == storage_name, self.storages), None)

@property
def cpu_metrics(self):
nodes = self.get_resources_nodes()
nodes = self.resources_nodes
total_cpu = sum(node["maxcpu"] for node in nodes)
total_cpu_usage = sum(node["cpu"] for node in nodes)
total_cpu_allocated = sum(node.allocatedcpu for node in self.nodes)
Expand All @@ -158,8 +164,9 @@ def cpu_metrics(self):
"percent": cpu_percent,
}

@property
def memory_metrics(self):
nodes = self.get_resources_nodes()
nodes = self.resources_nodes
total_memory = sum(node["maxmem"] for node in nodes)
total_memory_usage = sum(node["mem"] for node in nodes)
total_memory_allocated = sum(node.allocatedmem for node in self.nodes)
Expand All @@ -172,8 +179,9 @@ def memory_metrics(self):
"percent": memory_percent,
}

@property
def disk_metrics(self):
storages = self.get_resources_storages()
storages = self.resources_storages
total_disk = sum(node.get("maxdisk", 0) for node in storages)
total_disk_usage = sum(node.get("disk", 0) for node in storages)
disk_percent = total_disk_usage / total_disk * 100
Expand All @@ -184,9 +192,10 @@ def disk_metrics(self):
"percent": disk_percent,
}

@property
def metrics(self):
return {
"cpu": self.cpu_metrics(),
"memory": self.memory_metrics(),
"disk": self.disk_metrics(),
"cpu": self.cpu_metrics,
"memory": self.memory_metrics,
"disk": self.disk_metrics,
}
1 change: 1 addition & 0 deletions src/pvecontrol/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,5 +86,6 @@ def resources_vms(self):
# return True
# return False

@property
def templates(self):
return [vm for vm in self.vms if vm.template]
2 changes: 1 addition & 1 deletion src/tests/test_cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def test_pvecluster_find_node(request, _proxmox_http_auth):
cluster = PVECluster(
"name", "host", config={"node": "node"}, verify_ssl=False, **{"user": "user", "password": "password"}
)
cluster_vms = cluster.vms()
cluster_vms = cluster.vms

assert len(cluster.nodes) == len(nodes)
assert len(cluster_vms) == len(vms)
Expand Down

0 comments on commit 4877d70

Please sign in to comment.