Bundling code now with Rollup for its flat bundling and tree shaking support. Front end code still goes through Webpack for browser support.
117 lines
2.6 KiB
JavaScript
Executable File
117 lines
2.6 KiB
JavaScript
Executable File
#!/usr/bin/env -S node -r esm
|
|
"use strict";
|
|
import * as path from "path";
|
|
import * as fs from "fs";
|
|
|
|
process.chdir(path.resolve(path.dirname(fs.realpathSync(__filename)), ".."));
|
|
|
|
import * as config from "../lib/config";
|
|
import * as logger from "../lib/logger";
|
|
import * as cluster from "../lib/cluster";
|
|
import * as server from "../lib/server";
|
|
import { listener } from "../lib/ui";
|
|
import * as db from "../lib/ui/db";
|
|
import * as db2 from "../lib/db";
|
|
import * as cache from "../lib/cache";
|
|
import { version as VERSION } from "../package.json";
|
|
|
|
logger.init("ui", VERSION);
|
|
|
|
const SERVICE_ADDRESS = config.get("UI_INTERFACE");
|
|
const SERVICE_PORT = config.get("UI_PORT");
|
|
|
|
function exitWorkerGracefully() {
|
|
db.disconnect();
|
|
db2.disconnect();
|
|
cache.disconnect();
|
|
cluster.worker.disconnect();
|
|
}
|
|
|
|
function exitWorkerUngracefully() {
|
|
process.exit(1);
|
|
}
|
|
|
|
if (!cluster.worker) {
|
|
const WORKER_COUNT = config.get("UI_WORKER_PROCESSES");
|
|
|
|
logger.info({
|
|
message: `genieacs-ui starting`,
|
|
pid: process.pid,
|
|
version: VERSION
|
|
});
|
|
|
|
cluster.start(WORKER_COUNT, SERVICE_PORT, SERVICE_ADDRESS);
|
|
|
|
process.on("SIGINT", () => {
|
|
logger.info({
|
|
message: "Received signal SIGINT, exiting",
|
|
pid: process.pid
|
|
});
|
|
|
|
cluster.stop();
|
|
});
|
|
|
|
process.on("SIGTERM", () => {
|
|
logger.info({
|
|
message: "Received signal SIGTERM, exiting",
|
|
pid: process.pid
|
|
});
|
|
|
|
cluster.stop();
|
|
});
|
|
} else {
|
|
let ssl;
|
|
if (config.get("UI_SSL")) {
|
|
ssl = {
|
|
key: path.resolve(config.get("CONFIG_DIR"), "ui.key"),
|
|
cert: path.resolve(config.get("CONFIG_DIR"), "ui.crt"),
|
|
ca: path.resolve(config.get("CONFIG_DIR"), "ui.ca-bundle")
|
|
};
|
|
}
|
|
|
|
let stopping = false;
|
|
|
|
process.on("uncaughtException", err => {
|
|
if (err.code === "ERR_IPC_DISCONNECTED") return;
|
|
logger.error({
|
|
message: "Uncaught exception",
|
|
exception: err,
|
|
pid: process.pid
|
|
});
|
|
stopping = true;
|
|
server
|
|
.stop()
|
|
.then(exitWorkerGracefully)
|
|
.catch(exitWorkerUngracefully);
|
|
});
|
|
|
|
process.on("SIGINT", () => {
|
|
stopping = true;
|
|
server
|
|
.stop()
|
|
.then(exitWorkerGracefully)
|
|
.catch(exitWorkerUngracefully);
|
|
});
|
|
|
|
process.on("SIGTERM", () => {
|
|
stopping = true;
|
|
server
|
|
.stop()
|
|
.then(exitWorkerGracefully)
|
|
.catch(exitWorkerUngracefully);
|
|
});
|
|
|
|
const _listener = (req, res) => {
|
|
if (stopping) res.setHeader("Connection", "close");
|
|
listener(req, res);
|
|
};
|
|
|
|
db2.connect(err => {
|
|
if (err) throw err;
|
|
cache.connect(err => {
|
|
if (err) throw err;
|
|
server.start(SERVICE_PORT, SERVICE_ADDRESS, ssl, _listener);
|
|
});
|
|
});
|
|
}
|