From a2207f4dcdf1f4ce2e9e41d782d2f251c7152e56 Mon Sep 17 00:00:00 2001 From: Robin Leber <rleber98@gmail.com> Date: Mon, 10 Jun 2024 15:01:07 +0200 Subject: [PATCH] feat: stop, modify and restart architecture --- src/docker/dockerManager.js | 1 + src/functions/helperFunctions.js | 61 ++++++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/src/docker/dockerManager.js b/src/docker/dockerManager.js index b3420fc..891cb22 100644 --- a/src/docker/dockerManager.js +++ b/src/docker/dockerManager.js @@ -366,4 +366,5 @@ module.exports = { pauseDockerContainer, unpauseDockerContainer, dockerCleanUp, + killDockerContainer, }; diff --git a/src/functions/helperFunctions.js b/src/functions/helperFunctions.js index 244c378..db25102 100644 --- a/src/functions/helperFunctions.js +++ b/src/functions/helperFunctions.js @@ -5,6 +5,9 @@ const { runDockerContainer, pauseDockerContainer, unpauseDockerContainer, + removeDockerContainer, + removeDockerImage, + killDockerContainer, } = require("../docker/dockerManager"); const fillDockerJS = async (code) => { @@ -55,7 +58,11 @@ const addCustomCodeToJson = async (newElement) => { (element) => element.id === newElement.id ); if (existingFilter) { + await killDockerContainer(newElement.id); + await removeDockerContainer(newElement.id); + await removeDockerImage(newElement.id); existingFilter.code = newElement.code; + existingFilter.isDeployed = false; } else { jsonArray.push(newElement); } @@ -72,6 +79,24 @@ const addCustomCodeToJson = async (newElement) => { } }; +const setIsDeployed = async (id) => { + const dataFilePath = path.resolve(__dirname, "../../customCodeDatabase.json"); + try { + const data = await fs.readFile(dataFilePath, "utf-8"); + let jsonArray; + jsonArray = JSON.parse(data); + let elementToChange = jsonArray.find((element) => element.id === id); + elementToChange.isDeployed = true; + await fs.writeFile( + dataFilePath, + JSON.stringify(jsonArray, null, 2), + "utf8" + ); + } catch (err) { + console.error(err); + } +}; + const getCustomCodes = async () => { const dataFilePath = path.resolve(__dirname, "../../customCodeDatabase.json"); @@ -95,20 +120,23 @@ let CONTAINERPORT = 9090; const deployArchitecture = async () => { const customCodes = await getCustomCodes(); for (const customCode of customCodes) { - await fillDockerJS(customCode.code); - const filePath = path.join(__dirname, "../../"); - const dockerImageName = customCode.id; - const dockerContainerName = customCode.id; - await buildDockerImage(filePath, dockerImageName); - await runDockerContainer( - dockerImageName, - dockerContainerName, - HOSTPORT, - CONTAINERPORT - ); - await emptyDockerJS(); - HOSTPORT++; - CONTAINERPORT++; + if (!customCode.isDeployed) { + await fillDockerJS(customCode.code); + const filePath = path.join(__dirname, "../../"); + const dockerImageName = customCode.id; + const dockerContainerName = customCode.id; + await buildDockerImage(filePath, dockerImageName); + await runDockerContainer( + dockerImageName, + dockerContainerName, + HOSTPORT, + CONTAINERPORT + ); + await emptyDockerJS(); + HOSTPORT++; + CONTAINERPORT++; + await setIsDeployed(customCode.id); + } } }; @@ -122,8 +150,11 @@ const stopArchitecture = async () => { const restartArchitecture = async () => { const customCodes = await getCustomCodes(); for (const customCode of customCodes) { - await unpauseDockerContainer(customCode.id); + if (customCode.isDeployed) { + await unpauseDockerContainer(customCode.id); + } } + await deployArchitecture(); }; const clearDocker = () => { -- GitLab