fix(status): make is_alive matching flexible for 32-char session name truncation

This commit is contained in:
2026-08-14 10:49:48 +09:00
parent a7f3fc3242
commit 50d12a1bf3
@@ -127,6 +127,17 @@ def _sanitize(n):
return n return n
return f"{n[:16]}-{n[-15:]}"[:32] return f"{n[:16]}-{n[-15:]}"[:32]
def is_alive(name, server):
if f"{name}|{server}" in alive or f"{_sanitize(name)}|{server}" in alive:
return True
prefix = name[:14]
suffix = name[-12:]
for item in alive:
a_name, a_srv = item.split("|", 1) if "|" in item else (item, "default")
if a_srv == server and a_name.startswith(prefix) and a_name.endswith(suffix):
return True
return False
for s in d.get('herdr_sessions', []): for s in d.get('herdr_sessions', []):
name = s.get('name', '?') name = s.get('name', '?')
server = s.get('herdr_session') or s.get('herdr_server') or s.get('herdr_workspace') or 'default' server = s.get('herdr_session') or s.get('herdr_server') or s.get('herdr_workspace') or 'default'
@@ -139,7 +150,7 @@ for s in d.get('herdr_sessions', []):
'name': name, 'name': name,
'server': server, 'server': server,
'status': s.get('status', '?'), 'status': s.get('status', '?'),
'herdr_alive': f"{name}|{server}" in alive or f"{_sanitize(name)}|{server}" in alive, 'herdr_alive': is_alive(name, server),
'cmd': pane.get('cmd'), 'cmd': pane.get('cmd'),
'role': s.get('role'), 'role': s.get('role'),
'resume_state': resume_on_disk(s), 'resume_state': resume_on_disk(s),
@@ -236,11 +247,22 @@ print(f"{'NAME':<44} {'WORKSPACE':<12} {'YAML':<10} {'HERDR':<6} {'CMD':<6} {'RE
print("-" * 136) print("-" * 136)
if not sessions: if not sessions:
print("(no sessions registered)") print("(no sessions registered)")
def is_alive(name, server):
if f"{name}|{server}" in alive or f"{_sanitize(name)}|{server}" in alive:
return True
prefix = name[:14]
suffix = name[-12:]
for item in alive:
a_name, a_srv = item.split("|", 1) if "|" in item else (item, "default")
if a_srv == server and a_name.startswith(prefix) and a_name.endswith(suffix):
return True
return False
for s in sessions: for s in sessions:
name = s.get('name', '?') name = s.get('name', '?')
server = s.get('herdr_session') or s.get('herdr_server') or s.get('herdr_workspace') or 'default' server = s.get('herdr_session') or s.get('herdr_server') or s.get('herdr_workspace') or 'default'
status = s.get('status', '?') status = s.get('status', '?')
herdr = 'alive' if (f"{name}|{server}" in alive or f"{_sanitize(name)}|{server}" in alive) else 'dead' herdr = 'alive' if is_alive(name, server) else 'dead'
cmd = (s.get('pane') or {}).get('cmd', '?') cmd = (s.get('pane') or {}).get('cmd', '?')
res = resume_on_disk(s) res = resume_on_disk(s)
jid, jstatus = get_job_status(s) jid, jstatus = get_job_status(s)