Change : dashboard , containers

This commit is contained in:
2026-06-12 21:49:47 +01:00
parent df99603d9e
commit c3e3a3b28c
5 changed files with 480 additions and 190 deletions

View File

@@ -446,6 +446,18 @@ def get_backup_script_path():
# CONTAINERS
# ────────────────────────────────────────────────────────────────
def _parse_uptime(status):
"""Human uptime snippet from docker ps Status field."""
if not status:
return ''
if status.startswith('Up'):
m = re.match(r'Up\s+([^(]+)', status)
return ('Up ' + m.group(1).strip()) if m else status.split('(')[0].strip()
if status.startswith('Exited'):
return status.split('(')[0].strip() or status
return status
def _parse_containers(raw, owner='root'):
containers = []
if raw:
@@ -453,19 +465,28 @@ def _parse_containers(raw, owner='root'):
if '|' not in line:
continue
parts = line.split('|')
status = parts[1].strip() if len(parts) > 1 else ''
containers.append({
'name': parts[0].strip(),
'status': parts[1].strip() if len(parts) > 1 else '',
'image': parts[2].strip() if len(parts) > 2 else '',
'ports': parts[3].strip() if len(parts) > 3 else '',
'owner': owner,
'name': parts[0].strip(),
'status': status,
'image': parts[2].strip() if len(parts) > 2 else '',
'ports': parts[3].strip() if len(parts) > 3 else '',
'created_at': parts[4].strip() if len(parts) > 4 else '',
'uptime': _parse_uptime(status),
'running': status.startswith('Up'),
'owner': owner,
})
return containers
_DOCKER_PS_FMT = (
"{{.Names}}|{{.Status}}|{{.Image}}|{{.Ports}}|{{.CreatedAt}}"
)
def get_containers():
stdout, _ = _ssh_main(
"docker ps -a --format '{{.Names}}|{{.Status}}|{{.Image}}|{{.Ports}}' 2>/dev/null | "
f"docker ps -a --format '{_DOCKER_PS_FMT}' 2>/dev/null | "
"grep -E 'frappe|nextcloud|mautic|n8n|odoo'"
)
return _parse_containers(stdout)
@@ -473,7 +494,7 @@ def get_containers():
def get_all_root_containers():
stdout, _ = _ssh_main(
"docker ps -a --format '{{.Names}}|{{.Status}}|{{.Image}}|{{.Ports}}' 2>/dev/null"
f"docker ps -a --format '{_DOCKER_PS_FMT}' 2>/dev/null"
)
return _parse_containers(stdout)
@@ -496,7 +517,7 @@ def get_rootless_user_containers_remote():
username = name_out.strip() or f"uid{uid}"
ctr_out, _ = _ssh_main(
f"DOCKER_HOST=unix://{sock_path} "
f"docker ps -a --format '{{{{.Names}}}}|{{{{.Status}}}}|{{{{.Image}}}}|{{{{.Ports}}}}' 2>/dev/null"
f"docker ps -a --format '{_DOCKER_PS_FMT}' 2>/dev/null"
)
containers.extend(_parse_containers(ctr_out, owner=username))
return containers