From 06bda9fc7994d16c4a4a2408e05b5ba3c26f9ce8 Mon Sep 17 00:00:00 2001 From: ziajka Date: Thu, 7 Feb 2019 13:35:07 +0100 Subject: [PATCH] Starting and stopping gns3server in local-server.js manager --- local-server.js | 80 ++++++++++++++++++++++++++++++++++--------------- package.json | 5 ++-- 2 files changed, 59 insertions(+), 26 deletions(-) diff --git a/local-server.js b/local-server.js index d4e79948..bea8a4bb 100644 --- a/local-server.js +++ b/local-server.js @@ -1,39 +1,71 @@ const { spawn } = require('child_process'); +const kill = require('tree-kill'); -servers = [ - { - name: 'my-local', - path: 'c:\\Program Files\\GNS3\\gns3server.EXE' - } -] +let runningServers = {}; +function getServerArguments(server, overrides) { + let serverArguments = []; + return serverArguments; +} + +async function stopAll() { + Object.keys(runningServers).forEach(async (serverName) => { + await stop(serverName); + }); +} + +async function stop(serverName) { + const runningServer = runningServers[serverName]; + const pid = runningServer.process.pid; + console.log(`Stopping '${serverName}' with PID='${pid}'`); + kill(pid, (error) => { + if(error) { + console.error(`Error occured during stopping '${serverName}' with PID='${pid}'`); + } + else { + console.log(`Stopped '${serverName}' with PID='${pid}'`); + } + }); +} + +async function run(server, options) { + const logStdout = options.logStdout || false; -async function run(server) { console.log(`Running '${server.path}'`); - const process = spawn(server.path); + + let serverProcess = spawn(server.path, getServerArguments(server)); - process.on('exit', () => { - console.log(`Process has exited`); + runningServers[server.name] = { + process: serverProcess + }; + + serverProcess.stdout.on('data', function(data) { + if(logStdout) { + console.log(data.toString()); + } }); - - process.on('close', (code) => { - console.log(`child process exited with code ${code}`); - }); - - process.stdout.on('data', (data) => { - console.log(`stdout: ${data}`); - }); - - process.stderr.on('data', (data) => { - console.log(`stderr: ${data}`); - }); - } async function main() { - await run(servers[0]); + await run({ + name: 'my-local', + path: 'c:\\Program Files\\GNS3\\gns3server.EXE', + port: 3080 + }, { + logStdout: true + }); } if (require.main === module) { + process.on('SIGINT', function() { + console.log("Caught interrupt signal"); + stopAll(); + }); + + process.on('unhandledRejection', (reason, promise) => { + console.log(`UnhandledRejection occured 'reason'`); + process.exit(1); + }); + main(); } \ No newline at end of file diff --git a/package.json b/package.json index 2b4533c1..27bd66c4 100644 --- a/package.json +++ b/package.json @@ -61,14 +61,14 @@ "material-design-icons": "^3.0.1", "ng2-file-upload": "^1.3.0", "ngx-electron": "^2.0.0", + "node-fetch": "^2.3.0", "notosans-fontface": "^1.1.0", "raven-js": "^3.27.0", "rxjs": "^6.3.3", "rxjs-compat": "^6.3.3", "typeface-roboto": "^0.0.54", "yargs": "^12.0.5", - "zone.js": "^0.8.26", - "node-fetch": "^2.3.0" + "zone.js": "^0.8.26" }, "devDependencies": { "@angular-devkit/build-angular": "~0.11.4", @@ -97,6 +97,7 @@ "prettier": "^1.15.2", "protractor": "~5.4.2", "replace": "^1.0.1", + "tree-kill": "^1.2.1", "ts-mockito": "^2.3.1", "ts-node": "~7.0.1", "tslint": "~5.12.0",