Updates
This commit is contained in:
parent
c4c2caa6f0
commit
d8ee723dae
@ -49,24 +49,30 @@ export default function DeploymentService({ service }: Props) {
|
||||
|
||||
const portRef = useRef<number>(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 (
|
||||
<Stack className="grid-cell">
|
||||
@ -88,9 +94,9 @@ export default function DeploymentService({ service }: Props) {
|
||||
<Stack className="gap-0">
|
||||
<Row className="p-4 grid md:grid-cols-2">
|
||||
<Select
|
||||
options={all_clusters.map((cl) => ({
|
||||
options={all_clusters.map((cl, index) => ({
|
||||
value: cl.service_name,
|
||||
title: `Cluster #${targetClusterIndex}`,
|
||||
title: `Cluster #${index + 1}`,
|
||||
}))}
|
||||
changeHandler={(v) => {
|
||||
setTargetCluster(
|
||||
|
||||
@ -7,7 +7,9 @@ export default function DeploymentServices() {
|
||||
const { pageProps } = useContext(AppContext);
|
||||
const { deployment, children_services } = pageProps;
|
||||
|
||||
const services = deployment?.services;
|
||||
const services = deployment?.services.filter(
|
||||
(srv) => !Boolean(srv.parent_service_name),
|
||||
);
|
||||
|
||||
return (
|
||||
<Stack className="w-full nested-grid-frame xl:grid-cols-2">
|
||||
|
||||
@ -12,9 +12,10 @@ import { twMerge } from "tailwind-merge";
|
||||
import Select from "@/twui/components/form/Select";
|
||||
import ServiceClusterServer from "../(partials)/cluster-server";
|
||||
import H2 from "@/twui/components/layout/H2";
|
||||
import _ from "lodash";
|
||||
|
||||
export default function ServiceClusters() {
|
||||
const { pageProps } = useContext(AppContext);
|
||||
const { pageProps, ws } = useContext(AppContext);
|
||||
const { service, deployment, children_services } = pageProps;
|
||||
|
||||
const all_services = [service, ...(children_services || [])];
|
||||
@ -33,6 +34,15 @@ export default function ServiceClusters() {
|
||||
NormalizedServerObject | undefined
|
||||
>(cluster_servers?.[0]);
|
||||
|
||||
function killAllPorts(port: number) {
|
||||
ws.sendData({
|
||||
event: "client:kill-port",
|
||||
server: targetServer,
|
||||
service: _.omit(service, ["servers"]),
|
||||
port,
|
||||
});
|
||||
}
|
||||
|
||||
return (
|
||||
<Stack className="w-full nested-grid-frame grid-cols-1">
|
||||
<Stack className="grid-cell gap-0">
|
||||
@ -43,9 +53,9 @@ export default function ServiceClusters() {
|
||||
</Row>
|
||||
<Row>
|
||||
<Select
|
||||
options={all_services.map((srv) => ({
|
||||
options={all_services.map((srv, index) => ({
|
||||
value: srv?.service_name!,
|
||||
title: `Cluster #${clusterIndex}`,
|
||||
title: `Cluster #${index + 1}`,
|
||||
}))}
|
||||
wrapperWrapperProps={{
|
||||
className: `max-w-[250px]`,
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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<string | undefined> {
|
||||
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);
|
||||
|
||||
33
src/websocket/events/client-kill-all-ports.ts
Normal file
33
src/websocket/events/client-kill-all-ports.ts
Normal file
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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" } });
|
||||
|
||||
|
||||
@ -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<WebSocketData>;
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user