Change : dashboard , containers
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user