ЦИТК-41 - контроль количества клиентских мест сервера приложений в лицензии

This commit is contained in:
Mikhail Chechnev 2022-11-28 13:56:03 +03:00
parent 2812ce60af
commit 0d1f5bac9c
2 changed files with 37 additions and 5 deletions

View File

@ -204,7 +204,8 @@ class ParusAppServer {
...prms.config.dbConnect,
nPoolMin: prms.config.inComing.nPoolMin,
nPoolMax: prms.config.inComing.nPoolMax,
nPoolIncrement: prms.config.inComing.nPoolIncrement
nPoolIncrement: prms.config.inComing.nPoolIncrement,
nMaxWorkers: prms.config.outGoing.nMaxWorkers
}
});
//Создаём модуль рассылки уведомлений

View File

@ -38,6 +38,36 @@ const readCursorData = cursor => {
});
};
//Проверка допустимого количества воркеров
const checkWorkers = async prms => {
let pooledConnection;
try {
pooledConnection = await prms.connection.getConnection();
let res = await pooledConnection.execute("BEGIN :LIC_CNT := PKG_EXS.UTL_LIC_CLNT_COUNT_GET(); END;", {
LIC_CNT: { dir: oracledb.BIND_OUT, type: oracledb.NUMBER }
});
let nMaxLic = res.outBinds.LIC_CNT;
if (nMaxLic === 0) {
throw new Error(`Не определено количество лицензий для приложения "ExchangeServer".`);
}
if (prms.nMaxWorkers > nMaxLic - 1) {
throw new Error(
`Недопустимое значение параметра "Количество одновременно обрабатываемых исходящих сообщений" ("outGoing.nMaxWorkers") файла конфигурации сервиса приложений ("config.js"). Максимальное количество одновременно обрабатываемых исходящих сообщений - ${nMaxLic}.`
);
}
} catch (e) {
throw new Error(e.message);
} finally {
if (pooledConnection) {
try {
await pooledConnection.close();
} catch (e) {
throw new Error(e.message);
}
}
}
};
//Подключение к БД
const connect = async prms => {
try {
@ -61,6 +91,7 @@ const connect = async prms => {
);
}
});
await checkWorkers({ nMaxWorkers: prms.nMaxWorkers, connection: pool });
return pool;
} catch (e) {
throw new Error(e.message);
@ -203,10 +234,10 @@ const isServiceAuth = async prms => {
let pooledConnection;
try {
pooledConnection = await prms.connection.getConnection();
let res = await pooledConnection.execute(
"BEGIN :RET := PKG_EXS.SERVICE_IS_AUTH(NEXSSERVICE => :NEXSSERVICE); END;",
{ NEXSSERVICE: prms.nServiceId, RET: { dir: oracledb.BIND_OUT, type: oracledb.NUMBER } }
);
let res = await pooledConnection.execute("BEGIN :RET := PKG_EXS.SERVICE_IS_AUTH(NEXSSERVICE => :NEXSSERVICE); END;", {
NEXSSERVICE: prms.nServiceId,
RET: { dir: oracledb.BIND_OUT, type: oracledb.NUMBER }
});
return res.outBinds.RET;
} catch (e) {
throw new Error(e.message);