aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/ApiManagers/SearchManager.ts3
-rw-r--r--src/server/session_manager/session_manager.ts7
-rw-r--r--src/server/session_manager/session_manager_cluster.ts27
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