diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/ApiManagers/SearchManager.ts | 3 | ||||
-rw-r--r-- | src/server/session_manager/session_manager.ts | 7 | ||||
-rw-r--r-- | src/server/session_manager/session_manager_cluster.ts | 27 |
3 files changed, 35 insertions, 2 deletions
diff --git a/src/server/ApiManagers/SearchManager.ts b/src/server/ApiManagers/SearchManager.ts index 37d66666b..1ea4d8a50 100644 --- a/src/server/ApiManagers/SearchManager.ts +++ b/src/server/ApiManagers/SearchManager.ts @@ -72,10 +72,11 @@ export namespace SolrManager { const args = status ? "start" : "stop -p 8983"; try { console.log(`Solr management: trying to ${args}`); - console.log(await command_line(`solr.cmd ${args}`, "./solr-8.3.1/bin")); + console.log(await command_line(`./solr.cmd ${args}`, "./solr-8.3.1/bin")); return true; } catch (e) { console.log(red(`Solr management error: unable to ${args}`)); + console.log(e); return false; } } diff --git a/src/server/session_manager/session_manager.ts b/src/server/session_manager/session_manager.ts index 6084d9a77..97c2ab214 100644 --- a/src/server/session_manager/session_manager.ts +++ b/src/server/session_manager/session_manager.ts @@ -9,13 +9,18 @@ import { ChildProcess, exec, execSync } from "child_process"; import InputManager from "./input_manager"; import { identifier, logPath, crashPath, onWindows, pid, ports, heartbeat, recipient, latency, SessionState } from "./config"; const killport = require("kill-port"); +import * as io from "socket.io"; process.on('SIGINT', endPrevious); let state: SessionState = SessionState.STARTING; const is = (...reference: SessionState[]) => reference.includes(state); const set = (reference: SessionState) => state = reference; +const endpoint = io(); +endpoint.on("connection", socket => { +}); +endpoint.listen(process.env.PORT); const { registerCommand } = new InputManager({ identifier }); @@ -116,7 +121,7 @@ function timestamp() { async function endPrevious() { identifiedLog(yellow("Cleaning up previous connections...")); - current_backup?.kill("SIGKILL"); + current_backup?.kill(); await Promise.all(ports.map(port => { const task = killport(port, 'tcp'); return task.catch((error: any) => identifiedLog(red(error))); diff --git a/src/server/session_manager/session_manager_cluster.ts b/src/server/session_manager/session_manager_cluster.ts new file mode 100644 index 000000000..bfe6187c3 --- /dev/null +++ b/src/server/session_manager/session_manager_cluster.ts @@ -0,0 +1,27 @@ +import { isMaster, fork, on } from "cluster"; +import { cpus } from "os"; +import { createServer } from "http"; + +const capacity = cpus().length; + +if (isMaster) { + console.log(capacity); + for (let i = 0; i < capacity; i++) { + fork(); + } + on("exit", (worker, code, signal) => { + console.log(`worker ${worker.process.pid} died`); + }); +} else { + const port = 1234; + createServer().listen(port, () => { + console.log('process id local', process.pid); + console.log(`http server started at port ${port}`); + }); +} + +process.on('uncaughtException', function (err) { + console.error((new Date).toUTCString() + ' uncaughtException:', err.message); + console.error(err.stack); + process.exit(1); +});
\ No newline at end of file |