diff --git a/dockerManager/container.py b/dockerManager/container.py
index 69b8fef01..ff41e790e 100755
--- a/dockerManager/container.py
+++ b/dockerManager/container.py
@@ -3,6 +3,7 @@
import os.path
import sys
import django
+from datetime import datetime
from plogical.DockerSites import Docker_Sites
@@ -1116,27 +1117,67 @@ class ContainerManager(multi.Thread):
if admin.acl.adminStatus != 1:
return ACLManager.loadError()
-
name = data['name']
containerID = data['id']
- passdata = {}
- passdata["JobID"] = None
- passdata['name'] = name
- passdata['containerID'] = containerID
- da = Docker_Sites(None, passdata)
- retdata = da.ContainerInfo()
+ # Create a Docker client
+ client = docker.from_env()
+ container = client.containers.get(containerID)
+ # Get detailed container info
+ container_info = container.attrs
- data_ret = {'status': 1, 'error_message': 'None', 'data':retdata}
+ # Calculate uptime
+ started_at = container_info.get('State', {}).get('StartedAt', '')
+ if started_at:
+ started_time = datetime.strptime(started_at.split('.')[0], '%Y-%m-%dT%H:%M:%S')
+ uptime = datetime.now() - started_time
+ uptime_str = str(uptime).split('.')[0] # Format as HH:MM:SS
+ else:
+ uptime_str = "N/A"
+
+ # Get container details
+ details = {
+ 'id': container.short_id,
+ 'name': container.name,
+ 'status': container.status,
+ 'created': container_info.get('Created', ''),
+ 'started_at': started_at,
+ 'uptime': uptime_str,
+ 'ports': container_info.get('NetworkSettings', {}).get('Ports', {}),
+ 'volumes': container_info.get('Mounts', []),
+ 'environment': self._mask_sensitive_env(container_info.get('Config', {}).get('Env', [])),
+ 'memory_usage': container.stats(stream=False)['memory_stats'].get('usage', 0),
+ 'cpu_usage': container.stats(stream=False)['cpu_stats']['cpu_usage'].get('total_usage', 0)
+ }
+
+ data_ret = {'status': 1, 'error_message': 'None', 'data': [1, details]}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException as msg:
- data_ret = {'removeImageStatus': 0, 'error_message': str(msg)}
+ data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
+ def _mask_sensitive_env(self, env_vars):
+ """Helper method to mask sensitive data in environment variables"""
+ masked_vars = []
+ sensitive_keywords = ['password', 'secret', 'key', 'token', 'auth']
+
+ for var in env_vars:
+ if '=' in var:
+ name, value = var.split('=', 1)
+ # Check if this is a sensitive variable
+ if any(keyword in name.lower() for keyword in sensitive_keywords):
+ masked_vars.append(f"{name}=********")
+ else:
+ masked_vars.append(var)
+ else:
+ masked_vars.append(var)
+
+ return masked_vars
+
def getContainerApplog(self, userID=None, data=None):
try:
admin = Administrator.objects.get(pk=userID)
diff --git a/websiteFunctions/templates/websiteFunctions/DockerSiteHome.html b/websiteFunctions/templates/websiteFunctions/DockerSiteHome.html
index c28b88923..0b3434cdf 100644
--- a/websiteFunctions/templates/websiteFunctions/DockerSiteHome.html
+++ b/websiteFunctions/templates/websiteFunctions/DockerSiteHome.html
@@ -7,6 +7,139 @@
{% get_current_language as LANGUAGE_CODE %}
+
+