From 08d7c4e1c3ad5df3fd473399de981a92d8a86282 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sat, 8 Mar 2025 17:56:20 -0600 Subject: [PATCH] refactor(docker): sort container lists by name - Add sorting to container retrieval methods in docker service - Ensure consistent container list ordering across different container fetching functions - Improve readability and predictability of container list results --- packages/server/src/services/docker.ts | 160 +++++++++++++------------ 1 file changed, 84 insertions(+), 76 deletions(-) diff --git a/packages/server/src/services/docker.ts b/packages/server/src/services/docker.ts index a4a3b0b5..d2f4de53 100644 --- a/packages/server/src/services/docker.ts +++ b/packages/server/src/services/docker.ts @@ -136,24 +136,26 @@ export const getContainersByAppNameMatch = async ( result = stdout.trim().split("\n"); } - const containers = result.map((line) => { - const parts = line.split(" | "); - const containerId = parts[0] - ? parts[0].replace("CONTAINER ID : ", "").trim() - : "No container id"; - const name = parts[1] - ? parts[1].replace("Name: ", "").trim() - : "No container name"; + const containers = result + .map((line) => { + const parts = line.split(" | "); + const containerId = parts[0] + ? parts[0].replace("CONTAINER ID : ", "").trim() + : "No container id"; + const name = parts[1] + ? parts[1].replace("Name: ", "").trim() + : "No container name"; - const state = parts[2] - ? parts[2].replace("State: ", "").trim() - : "No state"; - return { - containerId, - name, - state, - }; - }); + const state = parts[2] + ? parts[2].replace("State: ", "").trim() + : "No state"; + return { + containerId, + name, + state, + }; + }) + .sort((a, b) => a.name.localeCompare(b.name)); return containers || []; } catch (_error) {} @@ -190,28 +192,30 @@ export const getStackContainersByAppName = async ( result = stdout.trim().split("\n"); } - const containers = result.map((line) => { - const parts = line.split(" | "); - const containerId = parts[0] - ? parts[0].replace("CONTAINER ID : ", "").trim() - : "No container id"; - const name = parts[1] - ? parts[1].replace("Name: ", "").trim() - : "No container name"; + const containers = result + .map((line) => { + const parts = line.split(" | "); + const containerId = parts[0] + ? parts[0].replace("CONTAINER ID : ", "").trim() + : "No container id"; + const name = parts[1] + ? parts[1].replace("Name: ", "").trim() + : "No container name"; - const state = parts[2] - ? parts[2].replace("State: ", "").trim().toLowerCase() - : "No state"; - const node = parts[3] - ? parts[3].replace("Node: ", "").trim() - : "No specific node"; - return { - containerId, - name, - state, - node, - }; - }); + const state = parts[2] + ? parts[2].replace("State: ", "").trim().toLowerCase() + : "No state"; + const node = parts[3] + ? parts[3].replace("Node: ", "").trim() + : "No specific node"; + return { + containerId, + name, + state, + node, + }; + }) + .sort((a, b) => a.name.localeCompare(b.name)); return containers || []; } catch (_error) {} @@ -249,29 +253,31 @@ export const getServiceContainersByAppName = async ( result = stdout.trim().split("\n"); } - const containers = result.map((line) => { - const parts = line.split(" | "); - const containerId = parts[0] - ? parts[0].replace("CONTAINER ID : ", "").trim() - : "No container id"; - const name = parts[1] - ? parts[1].replace("Name: ", "").trim() - : "No container name"; + const containers = result + .map((line) => { + const parts = line.split(" | "); + const containerId = parts[0] + ? parts[0].replace("CONTAINER ID : ", "").trim() + : "No container id"; + const name = parts[1] + ? parts[1].replace("Name: ", "").trim() + : "No container name"; - const state = parts[2] - ? parts[2].replace("State: ", "").trim().toLowerCase() - : "No state"; + const state = parts[2] + ? parts[2].replace("State: ", "").trim().toLowerCase() + : "No state"; - const node = parts[3] - ? parts[3].replace("Node: ", "").trim() - : "No specific node"; - return { - containerId, - name, - state, - node, - }; - }); + const node = parts[3] + ? parts[3].replace("Node: ", "").trim() + : "No specific node"; + return { + containerId, + name, + state, + node, + }; + }) + .sort((a, b) => a.name.localeCompare(b.name)); return containers || []; } catch (_error) {} @@ -306,23 +312,25 @@ export const getContainersByAppLabel = async ( const lines = stdout.trim().split("\n"); - const containers = lines.map((line) => { - const parts = line.split(" | "); - const containerId = parts[0] - ? parts[0].replace("CONTAINER ID : ", "").trim() - : "No container id"; - const name = parts[1] - ? parts[1].replace("Name: ", "").trim() - : "No container name"; - const state = parts[2] - ? parts[2].replace("State: ", "").trim() - : "No state"; - return { - containerId, - name, - state, - }; - }); + const containers = lines + .map((line) => { + const parts = line.split(" | "); + const containerId = parts[0] + ? parts[0].replace("CONTAINER ID : ", "").trim() + : "No container id"; + const name = parts[1] + ? parts[1].replace("Name: ", "").trim() + : "No container name"; + const state = parts[2] + ? parts[2].replace("State: ", "").trim() + : "No state"; + return { + containerId, + name, + state, + }; + }) + .sort((a, b) => a.name.localeCompare(b.name)); return containers || []; } catch (_error) {}