From 21f22bb926f541cb68044db44acdfae9958248f7 Mon Sep 17 00:00:00 2001 From: James Maes Date: Thu, 15 Oct 2026 12:24:56 -0500 Subject: [PATCH] fix(widget): cluster nodes table in four columns Where the node runs and its version fold into the Node column, so the table stays readable at every width (hosts gate widgets at four columns). Co-Authored-By: Claude Opus 5.5 --- .../widgets/ClusterNodesWidgetRenderer.java | 24 +++++++++++++------ .../ClusterSettingsWidgetHealthTest.java | 2 +- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/kingsrook/qbits/cluster/widgets/ClusterNodesWidgetRenderer.java b/src/main/java/com/kingsrook/qbits/cluster/widgets/ClusterNodesWidgetRenderer.java index 0cec7e7..fe34049 100644 --- a/src/main/java/com/kingsrook/qbits/cluster/widgets/ClusterNodesWidgetRenderer.java +++ b/src/main/java/com/kingsrook/qbits/cluster/widgets/ClusterNodesWidgetRenderer.java @@ -67,8 +67,6 @@ public class ClusterNodesWidgetRenderer extends AbstractWidgetRenderer static final String NODE = "node"; static final String STATUS = "status"; static final String HEARTBEAT = "heartbeat"; - static final String WHERE = "where"; - static final String VERSION = "version"; @@ -96,7 +94,7 @@ public class ClusterNodesWidgetRenderer extends AbstractWidgetRenderer } TableData table = new TableData(null, List.of( - column("Role", ROLE), column("Node", NODE), column("Status", STATUS), column("Last heartbeat", HEARTBEAT), column("Where", WHERE), column("Version", VERSION)), rows) + column("Role", ROLE), column("Node", NODE), column("Status", STATUS), column("Last heartbeat", HEARTBEAT)), rows) .withNoRowsFoundHTML("No nodes are running. A node appears here once it starts with the Cluster qbit.") .withRowsPerPage(50) .withHidePaginationDropdown(true); @@ -112,17 +110,29 @@ public class ClusterNodesWidgetRenderer extends AbstractWidgetRenderer { Map row = new LinkedHashMap<>(); row.put(ROLE, roleLabel(role)); - row.put(NODE, node.getValueString(ClusterTables.NODE_ID)); + row.put(NODE, nodeText(node)); row.put(STATUS, statusText(node)); row.put(HEARTBEAT, age(node.getValueInstant(ClusterTables.HEARTBEAT_AT), now)); - row.put(WHERE, Stream.of(node.getValueString(ClusterTables.K8S_NODE_NAME), node.getValueString(ClusterTables.ZONE), node.getValueString(ClusterTables.DEPLOYMENT)) - .filter(StringUtils::hasContent).collect(Collectors.joining(", "))); - row.put(VERSION, node.getValueString(ClusterTables.VERSION) == null ? "" : node.getValueString(ClusterTables.VERSION)); return (row); } + /******************************************************************************* + ** The node id, with where it runs and its version folded in (four columns + ** keep the table readable at every width): "web-7f9 (k8s-2, website-backend, 0.1.110)". + *******************************************************************************/ + static String nodeText(QRecord node) + { + String details = Stream.of(node.getValueString(ClusterTables.K8S_NODE_NAME), node.getValueString(ClusterTables.ZONE), node.getValueString(ClusterTables.DEPLOYMENT), + node.getValueString(ClusterTables.VERSION)) + .filter(StringUtils::hasContent).collect(Collectors.joining(", ")); + String nodeId = node.getValueString(ClusterTables.NODE_ID); + return (details.isEmpty() ? nodeId : nodeId + " (" + details + ")"); + } + + + /******************************************************************************* ** "Up", "Draining", "Up, drain requested", "Lost". *******************************************************************************/ diff --git a/src/test/java/com/kingsrook/qbits/cluster/ClusterSettingsWidgetHealthTest.java b/src/test/java/com/kingsrook/qbits/cluster/ClusterSettingsWidgetHealthTest.java index 667d7b1..c4460d8 100644 --- a/src/test/java/com/kingsrook/qbits/cluster/ClusterSettingsWidgetHealthTest.java +++ b/src/test/java/com/kingsrook/qbits/cluster/ClusterSettingsWidgetHealthTest.java @@ -118,7 +118,7 @@ class ClusterSettingsWidgetHealthTest extends BaseClusterTest assertThat(rows.get(0).get("heartbeat")).isEqualTo("5 hours ago"); assertThat(rows.get(2).get("status")).isEqualTo("Up, drain requested"); assertThat(rows.get(3).get("heartbeat")).isEqualTo("3 minutes ago"); - assertThat(table.getColumns()).hasSize(6); + assertThat(table.getColumns()).as("four columns: readable at every width").hasSize(4); assertThat(lost).isNotNull(); assertThat(ClusterNodesWidgetRenderer.class).isNotNull(); -- 2.54.0