From e2a15d926cb1940c7832ae59e8475a65c9a42177 Mon Sep 17 00:00:00 2001 From: catborise Date: Thu, 3 Nov 2022 10:20:16 +0300 Subject: [PATCH] eliminate code repetition with class structure --- computes/views.py | 182 +++++++++++++++++++++++----------------------- 1 file changed, 92 insertions(+), 90 deletions(-) diff --git a/computes/views.py b/computes/views.py index e31cc1a..22b7c3e 100644 --- a/computes/views.py +++ b/computes/views.py @@ -138,30 +138,9 @@ def compute_graph(request, compute_id): :param compute_id: :return: """ - compute = get_object_or_404(Compute, pk=compute_id) - try: - conn = wvmHostDetails( - compute.hostname, - compute.login, - compute.password, - compute.type, - ) - current_time = timezone.now().strftime("%H:%M:%S") - cpu_usage = conn.get_cpu_usage() - mem_usage = conn.get_memory_usage() - conn.close() - except libvirtError: - cpu_usage = {"usage": 0} - mem_usage = {"usage": 0} - current_time = 0 + comp_mgr = ComputeManager(compute_id) + data = comp_mgr.compute_graph() - data = json.dumps( - { - "cpudata": cpu_usage["usage"], - "memdata": mem_usage, - "timeline": current_time, - } - ) response = HttpResponse() response["Content-Type"] = "text/javascript" response.write(data) @@ -177,31 +156,8 @@ def get_compute_disk_buses(request, compute_id, arch, machine, disk): :param disk: :return: """ - data = dict() - compute = get_object_or_404(Compute, pk=compute_id) - try: - conn = wvmConnect( - compute.hostname, - compute.login, - compute.password, - compute.type, - ) - - disk_device_types = conn.get_disk_device_types(arch, machine) - - if disk in disk_device_types: - if disk == "disk": - data["bus"] = sorted(disk_device_types) - elif disk == "cdrom": - data["bus"] = ["ide", "sata", "scsi"] - elif disk == "floppy": - data["bus"] = ["fdc"] - elif disk == "lun": - data["bus"] = ["scsi"] - except libvirtError: - pass - - return HttpResponse(json.dumps(data)) + comp_mgr = ComputeManager(compute_id) + return HttpResponse(comp_mgr.get_disk_buses(arch, machine, disk)) def get_compute_machine_types(request, compute_id, arch): @@ -211,20 +167,8 @@ def get_compute_machine_types(request, compute_id, arch): :param arch: :return: """ - data = dict() - try: - compute = get_object_or_404(Compute, pk=compute_id) - conn = wvmConnect( - compute.hostname, - compute.login, - compute.password, - compute.type, - ) - data["machines"] = conn.get_machine_types(arch) - except libvirtError: - pass - - return HttpResponse(json.dumps(data)) + comp_mgr = ComputeManager(compute_id) + return HttpResponse(comp_mgr.get_machine_types(arch)) def get_compute_video_models(request, compute_id, arch, machine): @@ -235,20 +179,8 @@ def get_compute_video_models(request, compute_id, arch, machine): :param machine: :return: """ - data = dict() - try: - compute = get_object_or_404(Compute, pk=compute_id) - conn = wvmConnect( - compute.hostname, - compute.login, - compute.password, - compute.type, - ) - data["videos"] = conn.get_video_models(arch, machine) - except libvirtError: - pass - - return HttpResponse(json.dumps(data)) + comp_mgr = ComputeManager(compute_id) + return HttpResponse(comp_mgr.get_video_models(arch, machine)) def get_dom_capabilities(request, compute_id, arch, machine): @@ -259,18 +191,88 @@ def get_dom_capabilities(request, compute_id, arch, machine): :param machine: :return: """ - data = dict() - try: - compute = get_object_or_404(Compute, pk=compute_id) - conn = wvmConnect( - compute.hostname, - compute.login, - compute.password, - compute.type, - ) - data["videos"] = conn.get_disk_device_types(arch, machine) - data["bus"] = conn.get_disk_device_types(arch, machine) - except libvirtError: - pass + comp_mgr = ComputeManager(compute_id) + return HttpResponse(comp_mgr.get_dom_capabilities(arch, machine)) - return HttpResponse(json.dumps(data)) + +class ComputeManager: + def __init__(self, compute_id): + self.compute = get_object_or_404(Compute, pk=compute_id) + self.conn = wvmConnect( + self.compute.hostname, + self.compute.login, + self.compute.password, + self.compute.type, + ) + + def get_video_models(self, arch, machine): + data = dict() + try: + data["videos"] = self.conn.get_video_models(arch, machine) + except libvirtError: + pass + + return json.dumps(data) + + def get_dom_capabilities(self, arch, machine): + data = dict() + try: + data["videos"] = self.conn.get_disk_device_types(arch, machine) + data["bus"] = self.conn.get_disk_device_types(arch, machine) + except libvirtError: + pass + + return json.dumps(data) + + def get_machine_types(self, arch): + data = dict() + try: + data["machines"] = self.conn.get_machine_types(arch) + except libvirtError: + pass + + return json.dumps(data) + + def get_disk_buses(self, arch, machine, disk): + data = dict() + try: + disk_device_types = self.conn.get_disk_device_types(arch, machine) + + if disk in disk_device_types: + if disk == "disk": + data["bus"] = sorted(disk_device_types) + elif disk == "cdrom": + data["bus"] = ["ide", "sata", "scsi"] + elif disk == "floppy": + data["bus"] = ["fdc"] + elif disk == "lun": + data["bus"] = ["scsi"] + except libvirtError: + pass + + return json.dumps(data) + + def compute_graph(self): + try: + conn = wvmHostDetails( + self.compute.hostname, + self.compute.login, + self.compute.password, + self.compute.type, + ) + current_time = timezone.now().strftime("%H:%M:%S") + cpu_usage = conn.get_cpu_usage() + mem_usage = conn.get_memory_usage() + conn.close() + except libvirtError: + cpu_usage = {"usage": 0} + mem_usage = {"usage": 0} + current_time = 0 + + return json.dumps( + { + "cpudata": cpu_usage["usage"], + "memdata": mem_usage, + "timeline": current_time, + } + )