From d8ee723dae3f1e1bbe61835637a6641975defaf1 Mon Sep 17 00:00:00 2001 From: Archben Date: Tue, 10 Mar 2026 16:53:06 +0000 Subject: [PATCH] Updates --- .../admin/services/(partials)/service.tsx | 28 +++++++++------- .../admin/services/(sections)/services.tsx | 4 ++- .../services/service/(sections)/clusters.tsx | 16 +++++++-- src/types/index.ts | 2 ++ src/utils/relay-exec-ssh.ts | 18 ++++------ src/websocket/events/client-kill-all-ports.ts | 33 +++++++++++++++++++ src/websocket/events/client-kill-port.ts | 2 -- src/websocket/socket-message.ts | 9 +++++ 8 files changed, 83 insertions(+), 29 deletions(-) create mode 100644 src/websocket/events/client-kill-all-ports.ts diff --git a/src/components/pages/admin/services/(partials)/service.tsx b/src/components/pages/admin/services/(partials)/service.tsx index f35cf1f..7f42eed 100644 --- a/src/components/pages/admin/services/(partials)/service.tsx +++ b/src/components/pages/admin/services/(partials)/service.tsx @@ -49,24 +49,30 @@ export default function DeploymentService({ service }: Props) { const portRef = useRef(undefined); + function killPort(port: number) { + ws.sendData({ + event: "client:kill-port", + server: targetServer, + service: _.omit(service, ["servers"]), + port, + }); + } + + useEffect(() => { + setTargetServer(targetCluster?.servers?.[0]); + }, [targetCluster]); + useEffect(() => { setReady(false); - console.log("portRef", portRef); - if (targetServer && portRef.current) { - ws.sendData({ - event: "client:kill-port", - server: targetServer, - service: _.omit(service, ["servers"]), - port: portRef.current, - }); + killPort(portRef.current); } setTimeout(() => { setReady(true); }, 2000); - }, [targetCluster, targetServer]); + }, [targetServer]); return ( @@ -88,9 +94,9 @@ export default function DeploymentService({ service }: Props) { ({ + options={all_services.map((srv, index) => ({ value: srv?.service_name!, - title: `Cluster #${clusterIndex}`, + title: `Cluster #${index + 1}`, }))} wrapperWrapperProps={{ className: `max-w-[250px]`, diff --git a/src/types/index.ts b/src/types/index.ts index 508d8bc..a20ff2c 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -232,6 +232,7 @@ export const WebSocketEvents = [ "client:ping", "client:service-server-logs", "client:kill-port", + "client:kill-all-ports", "client:service-server-shell", "server:ping", @@ -242,6 +243,7 @@ export const WebSocketEvents = [ "server:update", "server:service-server-logs", "server:killed-port", + "server:killed-all-ports", "server:service-server-shell", ] as const; diff --git a/src/utils/relay-exec-ssh.ts b/src/utils/relay-exec-ssh.ts index 7e98773..a5bb4fb 100644 --- a/src/utils/relay-exec-ssh.ts +++ b/src/utils/relay-exec-ssh.ts @@ -1,7 +1,4 @@ import { exec, execSync, type ExecSyncOptions } from "child_process"; -import grabSSHPrefix from "./grab-ssh-prefix"; -import { writeFileSync } from "fs"; -import { TCIConfig } from "../types"; import turboCIPkgrabDirNames from "./turboci-pkg-grab-dir-names"; type Param = { @@ -28,13 +25,10 @@ export default async function relayExecSSH({ bun, }: Param): Promise { try { - const { - relayServerBunScriptsDir, - relayServerBunScriptFile, - relayShExecFile, - } = turboCIPkgrabDirNames(); + const { relayServerBunScriptsDir, relayServerBunScriptFile } = + turboCIPkgrabDirNames(); - let relaySh = `#!/bin/bash\n`; + let relaySh = `\n`; const parsedCmd = typeof cmd == "string" @@ -75,10 +69,10 @@ export default async function relayExecSSH({ console.log("===================================================="); } - writeFileSync(relayShExecFile, relaySh); - let relayCmd = ``; - relayCmd += `chmod +x ${relayShExecFile} && /bin/bash ${relayShExecFile}\n`; + relayCmd += `/bin/bash << 'EOF'\n`; + relayCmd += `${relaySh}\n`; + relayCmd += `EOF\n`; if (detached) { exec(relayCmd); diff --git a/src/websocket/events/client-kill-all-ports.ts b/src/websocket/events/client-kill-all-ports.ts new file mode 100644 index 0000000..2dfa30f --- /dev/null +++ b/src/websocket/events/client-kill-all-ports.ts @@ -0,0 +1,33 @@ +import { WebSocketMessageParam } from "@/src/types"; +import sendData from "../(utils)/send-data"; +import sendError from "../(utils)/send-error"; +import grabConnectedWebsocketUserdata from "../(utils)/grab-connected-websocket-user-data"; +import killPort from "../(utils)/kill-port"; + +export default async function socketClientKillAllPorts({ + ws, + data, +}: WebSocketMessageParam) { + try { + const user = ws.data.user; + + const connected_user_data = grabConnectedWebsocketUserdata({ user }); + + for (let i = 0; i < connected_user_data.ports.length; i++) { + const port = connected_user_data.ports[i]; + if (port) { + await killPort({ port, exec_options: { stdio: "inherit" } }); + + connected_user_data.ports = connected_user_data.ports.filter( + (p) => p != port, + ); + } + } + + sendData(ws, { + event: "server:killed-all-ports", + }); + } catch (error: any) { + sendError(ws, "Service Server Logs Error! " + error.message); + } +} diff --git a/src/websocket/events/client-kill-port.ts b/src/websocket/events/client-kill-port.ts index a3eda90..c5ff55b 100644 --- a/src/websocket/events/client-kill-port.ts +++ b/src/websocket/events/client-kill-port.ts @@ -16,8 +16,6 @@ export default async function socketClientKillPort({ const connected_user_data = grabConnectedWebsocketUserdata({ user }); - console.log("port", port); - if (port) { await killPort({ port, exec_options: { stdio: "inherit" } }); diff --git a/src/websocket/socket-message.ts b/src/websocket/socket-message.ts index cb217f8..08e4c23 100644 --- a/src/websocket/socket-message.ts +++ b/src/websocket/socket-message.ts @@ -10,6 +10,7 @@ import debugLog from "@moduletrace/datasquirel/dist/package-shared/utils/logging import socketClientServiceServerLogs from "./events/client-service-server-logs"; import socketClientKillPort from "./events/client-kill-port"; import socketClientServiceServerShell from "./events/client-service-server-shell"; +import socketClientKillAllPorts from "./events/client-kill-all-ports"; type Param = { ws: ServerWebSocket; @@ -64,6 +65,14 @@ export default async function socketMessage({ ws, message }: Param) { }); await socketClientKillPort(websocketMessageParams); break; + case "client:kill-all-ports": + debugLog({ + log: `${userRef} Killing All Ports ...`, + addTime: true, + label, + }); + await socketClientKillAllPorts(websocketMessageParams); + break; default: break;