From 5a7eb5133d02bf9ac9c5d1a31ede8ab3f21dd409 Mon Sep 17 00:00:00 2001 From: "usman@cyberpersons.com" Date: Sat, 13 May 2023 18:43:48 +0500 Subject: [PATCH] bug fix docker manager issue: https://github.com/usmannasir/cyberpanel/issues/1007 --- dockerManager/container.py | 101 ++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 47 deletions(-) diff --git a/dockerManager/container.py b/dockerManager/container.py index 9364daf5a..a253ac68d 100755 --- a/dockerManager/container.py +++ b/dockerManager/container.py @@ -130,60 +130,67 @@ class ContainerManager(multi.Thread): return proc.render() def loadContainerHome(self, request=None, userID=None, data=None): - name = self.name - - if ACLManager.checkContainerOwnership(name, userID) != 1: - return ACLManager.loadError() - - client = docker.from_env() - dockerAPI = docker.APIClient() - try: - container = client.containers.get(name) - except docker.errors.NotFound as err: - return HttpResponse("Container not found") + name = self.name - data = {} - con = Containers.objects.get(name=name) - data['name'] = name - data['image'] = con.image + ":" + con.tag - data['ports'] = json.loads(con.ports) - data['cid'] = con.cid - data['envList'] = json.loads(con.env) - data['volList'] = json.loads(con.volumes) + if ACLManager.checkContainerOwnership(name, userID) != 1: + return ACLManager.loadError() - stats = container.stats(decode=False, stream=False) - logs = container.logs(stream=True) + client = docker.from_env() + dockerAPI = docker.APIClient() - data['status'] = container.status - data['memoryLimit'] = con.memory - if con.startOnReboot == 1: - data['startOnReboot'] = 'true' - data['restartPolicy'] = "Yes" - else: - data['startOnReboot'] = 'false' - data['restartPolicy'] = "No" + try: + container = client.containers.get(name) + except docker.errors.NotFound as err: + return HttpResponse("Container not found") - if 'usage' in stats['memory_stats']: - # Calculate Usage - # Source: https://github.com/docker/docker/blob/28a7577a029780e4533faf3d057ec9f6c7a10948/api/client/stats.go#L309 - data['memoryUsage'] = (stats['memory_stats']['usage'] / stats['memory_stats']['limit']) * 100 + data = {} + con = Containers.objects.get(name=name) + data['name'] = name + data['image'] = con.image + ":" + con.tag + data['ports'] = json.loads(con.ports) + data['cid'] = con.cid + data['envList'] = json.loads(con.env) + data['volList'] = json.loads(con.volumes) - cpu_count = len(stats["cpu_stats"]["cpu_usage"]["percpu_usage"]) - data['cpuUsage'] = 0.0 - cpu_delta = float(stats["cpu_stats"]["cpu_usage"]["total_usage"]) - \ - float(stats["precpu_stats"]["cpu_usage"]["total_usage"]) - system_delta = float(stats["cpu_stats"]["system_cpu_usage"]) - \ - float(stats["precpu_stats"]["system_cpu_usage"]) - if system_delta > 0.0: - data['cpuUsage'] = round(cpu_delta / system_delta * 100.0 * cpu_count, 3) - else: - data['memoryUsage'] = 0 - data['cpuUsage'] = 0 + stats = container.stats(decode=False, stream=False) + logs = container.logs(stream=True) - template = 'dockerManager/viewContainer.html' - proc = httpProc(request, template, data, 'admin') - return proc.render() + data['status'] = container.status + data['memoryLimit'] = con.memory + if con.startOnReboot == 1: + data['startOnReboot'] = 'true' + data['restartPolicy'] = "Yes" + else: + data['startOnReboot'] = 'false' + data['restartPolicy'] = "No" + + if 'usage' in stats['memory_stats']: + # Calculate Usage + # Source: https://github.com/docker/docker/blob/28a7577a029780e4533faf3d057ec9f6c7a10948/api/client/stats.go#L309 + data['memoryUsage'] = (stats['memory_stats']['usage'] / stats['memory_stats']['limit']) * 100 + + try: + cpu_count = len(stats["cpu_stats"]["cpu_usage"]["percpu_usage"]) + except: + cpu_count = 0 + + data['cpuUsage'] = 0.0 + cpu_delta = float(stats["cpu_stats"]["cpu_usage"]["total_usage"]) - \ + float(stats["precpu_stats"]["cpu_usage"]["total_usage"]) + system_delta = float(stats["cpu_stats"]["system_cpu_usage"]) - \ + float(stats["precpu_stats"]["system_cpu_usage"]) + if system_delta > 0.0: + data['cpuUsage'] = round(cpu_delta / system_delta * 100.0 * cpu_count, 3) + else: + data['memoryUsage'] = 0 + data['cpuUsage'] = 0 + + template = 'dockerManager/viewContainer.html' + proc = httpProc(request, template, data, 'admin') + return proc.render() + except BaseException as msg: + return HttpResponse(str(msg)) def listContainers(self, request=None, userID=None, data=None): client = docker.from_env()