Bundling code now with Rollup for its flat bundling and tree shaking support. Front end code still goes through Webpack for browser support.
105 lines
2.3 KiB
JavaScript
Executable File
105 lines
2.3 KiB
JavaScript
Executable File
#!/usr/bin/env -S node -r esm
|
|
"use strict";
|
|
import path from "path";
|
|
import 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/fs";
|
|
import * as db from "../lib/db";
|
|
import * as cache from "../lib/cache";
|
|
import { version as VERSION } from "../package.json";
|
|
|
|
logger.init("fs", VERSION);
|
|
|
|
const SERVICE_ADDRESS = config.get("FS_INTERFACE");
|
|
const SERVICE_PORT = config.get("FS_PORT");
|
|
|
|
function exitWorkerGracefully() {
|
|
db.disconnect();
|
|
cache.disconnect();
|
|
cluster.worker.disconnect();
|
|
}
|
|
|
|
function exitWorkerUngracefully() {
|
|
process.exit(1);
|
|
}
|
|
|
|
if (!cluster.worker) {
|
|
const WORKER_COUNT = config.get("FS_WORKER_PROCESSES");
|
|
|
|
logger.info({
|
|
message: `genieacs-fs 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("FS_SSL")) {
|
|
ssl = {
|
|
key: path.resolve(config.get("CONFIG_DIR"), "fs.key"),
|
|
cert: path.resolve(config.get("CONFIG_DIR"), "fs.crt"),
|
|
ca: path.resolve(config.get("CONFIG_DIR"), "fs.ca-bundle")
|
|
};
|
|
}
|
|
|
|
process.on("uncaughtException", err => {
|
|
if (err.code === "ERR_IPC_DISCONNECTED") return;
|
|
logger.error({
|
|
message: "Uncaught exception",
|
|
exception: err,
|
|
pid: process.pid
|
|
});
|
|
server
|
|
.stop()
|
|
.then(exitWorkerGracefully)
|
|
.catch(exitWorkerUngracefully);
|
|
});
|
|
|
|
process.on("SIGINT", () => {
|
|
server
|
|
.stop()
|
|
.then(exitWorkerGracefully)
|
|
.catch(exitWorkerUngracefully);
|
|
});
|
|
|
|
process.on("SIGTERM", () => {
|
|
server
|
|
.stop()
|
|
.then(exitWorkerGracefully)
|
|
.catch(exitWorkerUngracefully);
|
|
});
|
|
|
|
db.connect(err => {
|
|
if (err) throw err;
|
|
cache.connect(err => {
|
|
if (err) throw err;
|
|
server.start(SERVICE_PORT, SERVICE_ADDRESS, ssl, listener);
|
|
});
|
|
});
|
|
}
|