kannon/kannon.js

77 lines
2.5 KiB
JavaScript
Raw Normal View History

2022-04-14 14:23:41 +02:00
const util = require('./libs/util.js');
const packageJSON = require('./package.json');
const path = require('path');
const Logger = require('./classes/Logger.js');
const Server = require('./classes/Server.js');
const Database = require('./classes/Database.js');
const Queue = require('./classes/Queue.js');
const Watcher = require('./classes/Watcher.js');
2022-04-20 16:15:33 +02:00
const EventParser = require('./classes/EventParser');
2022-04-22 15:58:04 +02:00
const ApiServer = require('./classes/ApiServer.js');
2022-04-14 14:23:41 +02:00
const INTERRUPTS = ['beforeExit', 'SIGINT', 'SIGTERM'];
main();
async function main() {
global.logger = new Logger();
let configPath = path.resolve(process.argv[2] || __dirname + '/config.json');
try {
global.config = require(configPath);
global.logger.setLogLevel(global.config?.log?.level);
global.logger.setTimestamp(global.config?.log?.timestamp);
} catch (err) {
exit('could not read config file at \'' + configPath + '\'');
}
handleExit();
2022-04-21 13:43:33 +02:00
global.constants = require('./libs/constants.js');
2022-04-14 14:23:41 +02:00
global.logger.info("launching " + packageJSON.name + " " + packageJSON.version + "...");
try {
// connect to the database and create/alter tables
global.database = new Database();
await global.database.initialize();
// socket server
if (util.isEnabled(global.config.server)) {
2022-04-20 16:15:33 +02:00
global.eventparser = new EventParser();
2022-04-14 14:23:41 +02:00
global.server = new Server();
await global.server.start();
}
2022-04-22 15:58:04 +02:00
// api server
if (util.isEnabled(global.config.api)) {
global.apiserver = new ApiServer();
global.apiserver.start();
}
2022-04-14 14:23:41 +02:00
// queue and watcher
if (util.isEnabled(global.config.library)) {
global.queue = new Queue();
global.watcher = new Watcher();
}
} catch (err) {
exit(err);
}
};
function handleExit() {
for (var index = 0; index < INTERRUPTS.length; index++) {
process.on(INTERRUPTS[index], async (code) => {
exit(undefined, code);
});
}
}
function exit(err, code) {
if (code === undefined) {
code = 0;
if (err !== undefined) {
code = 1;
}
}
if (err) {
logger.error(err);
logger.error(packageJSON.name + ' ' + packageJSON.version + ' ended due to an error');
} else {
logger.info(packageJSON.name + ' ' + packageJSON.version + ' shutting down gracefully')
}
process.exit(code);
}