forked from CITKParus/P8-ExchangeService
94 lines
3.7 KiB
JavaScript
94 lines
3.7 KiB
JavaScript
/*
|
||
Сервис интеграции ПП Парус 8 с WEB API
|
||
Точка входа в сервер приложений
|
||
*/
|
||
|
||
//----------------------
|
||
// Подключение библиотек
|
||
//----------------------
|
||
|
||
require("module-alias/register"); //Поддержка псевонимов при подключении модулей
|
||
const cfg = require("./config"); //Настройки сервера приложений
|
||
const app = require("./core/app"); //Сервер приложений
|
||
const { makeErrorText } = require("./core/utils"); //Вспомогательные функции
|
||
|
||
//--------------------------
|
||
// Глобальные идентификаторы
|
||
//--------------------------
|
||
|
||
let appSrv = new app.ParusAppServer(); //Экземпляр сервера приложений
|
||
|
||
//----------------------------------------
|
||
// Управление процессом сервера приложений
|
||
//----------------------------------------
|
||
|
||
//Обработка события "выход" жизненного цикла процесса
|
||
process.on("exit", code => {
|
||
//Сообщим о завершении процесса
|
||
appSrv.logger.warn("Сервер приложений остановлен (код: " + code + ") ");
|
||
});
|
||
|
||
//Перехват CTRL + C (останов процесса)
|
||
process.on("SIGINT", async () => {
|
||
appSrv.logger.warn("Получен сигнал на останов сервера приложений: SIGINT");
|
||
//Инициируем выход из процесса
|
||
await appSrv.stop();
|
||
});
|
||
|
||
//Перехват CTRL + \ (останов процесса)
|
||
process.on("SIGQUIT", () => {
|
||
appSrv.logger.warn("Получен сигнал на останов сервера приложений: SIGQUIT");
|
||
//Инициируем выход из процесса
|
||
appSrv.stop();
|
||
});
|
||
|
||
//Перехват мягкого останова процесса
|
||
process.on("SIGTERM", () => {
|
||
appSrv.logger.warn("Получен сигнал на останов сервера приложений: SIGTERM");
|
||
//Инициируем выход из процесса
|
||
appSrv.stop();
|
||
});
|
||
|
||
//Грубый останов процесса (здесь сделать ничего нельзя, но мы пытаемся)
|
||
process.on("SIGKILL", () => {
|
||
appSrv.logger.warn("Получен сигнал на останов сервера приложений: SIGKILL");
|
||
//Инициируем выход из процесса
|
||
appSrv.stop();
|
||
});
|
||
|
||
//Перехват всех неохваченных ошибок
|
||
process.on("uncaughtException", e => {
|
||
//Протоколируем ошибку
|
||
appSrv.logger.error(makeErrorText(e));
|
||
//Инициируем выход из процесса
|
||
appSrv.stop();
|
||
});
|
||
|
||
//Запуск сервера приложений
|
||
const start = async () => {
|
||
try {
|
||
//Инициализируем сервер приложений
|
||
await appSrv.init({ config: cfg });
|
||
//Включаем его
|
||
await appSrv.run();
|
||
} catch (e) {
|
||
//Если есть ошибки с которыми сервер не справился - ловим их, показываем...
|
||
appSrv.logger.error(makeErrorText(e));
|
||
//...и пытаемся остановить сервер нормально
|
||
try {
|
||
await appSrv.stop();
|
||
} catch (e) {
|
||
//Могут быть ошибки и при остановке - это аварийный выход
|
||
appSrv.logger.error(makeErrorText(e));
|
||
process.exit(1);
|
||
}
|
||
}
|
||
};
|
||
|
||
//------------
|
||
// Точка входа
|
||
//------------
|
||
|
||
//Старутем
|
||
start();
|