forked from CITKParus/P8-ExchangeService
Формирование полной структуры сервисов с их функциями
This commit is contained in:
parent
0022777f96
commit
73c414010f
@ -12,6 +12,15 @@ const glConst = require("@core/constants.js"); //Глобальные конст
|
|||||||
const { checkModuleInterface, makeModuleFullPath, checkObject } = require("@core/utils.js"); //Вспомогательные функции
|
const { checkModuleInterface, makeModuleFullPath, checkObject } = require("@core/utils.js"); //Вспомогательные функции
|
||||||
const { ServerError } = require("@core/server_errors.js"); //Типовая ошибка
|
const { ServerError } = require("@core/server_errors.js"); //Типовая ошибка
|
||||||
|
|
||||||
|
//----------
|
||||||
|
// Константы
|
||||||
|
//----------
|
||||||
|
|
||||||
|
//Состояния записей журнала работы сервиса
|
||||||
|
const NLOG_STATE_INF = 0; //Информация
|
||||||
|
const NLOG_STATE_WRN = 1; //Предупреждение
|
||||||
|
const NLOG_STATE_ERR = 2; //Ошибка
|
||||||
|
|
||||||
//------------
|
//------------
|
||||||
// Тело модуля
|
// Тело модуля
|
||||||
//------------
|
//------------
|
||||||
@ -41,6 +50,7 @@ class DBConnector {
|
|||||||
"connect",
|
"connect",
|
||||||
"disconnect",
|
"disconnect",
|
||||||
"getServices",
|
"getServices",
|
||||||
|
"getServiceFunctions",
|
||||||
"log",
|
"log",
|
||||||
"getQueueOutgoing",
|
"getQueueOutgoing",
|
||||||
"putQueueIncoming",
|
"putQueueIncoming",
|
||||||
@ -93,16 +103,26 @@ class DBConnector {
|
|||||||
//Получить список сервисов
|
//Получить список сервисов
|
||||||
async getServices() {
|
async getServices() {
|
||||||
try {
|
try {
|
||||||
let res = await this.connector.getServices(this.connection);
|
let srvs = await this.connector.getServices(this.connection);
|
||||||
|
let srvsFuncs = srvs.map(async srv => {
|
||||||
|
const response = await this.connector.getServiceFunctions(this.connection, srv.NRN);
|
||||||
|
let tmp = {};
|
||||||
|
_.extend(tmp, srv, { FN: [] });
|
||||||
|
response.map(f => {
|
||||||
|
tmp.FN.push(f);
|
||||||
|
});
|
||||||
|
return tmp;
|
||||||
|
});
|
||||||
|
let res = await Promise.all(srvsFuncs);
|
||||||
return res;
|
return res;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new ServerError(glConst.ERR_DB_EXECUTE, e.message);
|
throw new ServerError(glConst.ERR_DB_EXECUTE, e.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Запись в журнал работы
|
//Запись в журнал работы
|
||||||
async putLog(msg, queueID) {
|
async putLog(msgType, msg, queueID) {
|
||||||
try {
|
try {
|
||||||
let res = await this.connector.log(this.connection, msg, queueID);
|
let res = await this.connector.log(this.connection, msgType, msg, queueID);
|
||||||
return res;
|
return res;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new ServerError(glConst.ERR_DB_EXECUTE, e.message);
|
throw new ServerError(glConst.ERR_DB_EXECUTE, e.message);
|
||||||
@ -114,4 +134,7 @@ class DBConnector {
|
|||||||
// Интерфейс модуля
|
// Интерфейс модуля
|
||||||
//-----------------
|
//-----------------
|
||||||
|
|
||||||
|
exports.NLOG_STATE_INF = NLOG_STATE_INF;
|
||||||
|
exports.NLOG_STATE_WRN = NLOG_STATE_WRN;
|
||||||
|
exports.NLOG_STATE_ERR = NLOG_STATE_ERR;
|
||||||
exports.DBConnector = DBConnector;
|
exports.DBConnector = DBConnector;
|
||||||
|
93
index.js
93
index.js
@ -12,56 +12,61 @@ const cfg = require("./config.js");
|
|||||||
const { Logger } = require("@core/logger.js");
|
const { Logger } = require("@core/logger.js");
|
||||||
const db = require("@core/db_connector.js");
|
const db = require("@core/db_connector.js");
|
||||||
const { ServerError } = require("@core/server_errors.js");
|
const { ServerError } = require("@core/server_errors.js");
|
||||||
const parus = require("@modules/parus_db.js");
|
|
||||||
const utls = require("@core/utils.js");
|
const utls = require("@core/utils.js");
|
||||||
|
|
||||||
//------------
|
//------------
|
||||||
// Тело модуля
|
// Тело модуля
|
||||||
//------------
|
//------------
|
||||||
|
|
||||||
let a = new db.DBConnector(cfg.dbConnect);
|
try {
|
||||||
a.connect()
|
let a = new db.DBConnector(cfg.dbConnect);
|
||||||
.then(res => {
|
a.connect()
|
||||||
console.log("CONNECTED");
|
.then(res => {
|
||||||
a.getServices()
|
console.log("CONNECTED");
|
||||||
.then(res => {
|
a.getServices()
|
||||||
console.log(res);
|
.then(res => {
|
||||||
a.putLog("Сервер приложений подключен")
|
console.log(res);
|
||||||
.then(res => {
|
a.putLog(db.NLOG_STATE_WRN, "Сервер приложений подключен")
|
||||||
console.log(res);
|
.then(res => {
|
||||||
a.disconnect()
|
console.log(res);
|
||||||
.then(res => {
|
a.disconnect()
|
||||||
console.log("DISCONNECTED");
|
.then(res => {
|
||||||
})
|
console.log("DISCONNECTED");
|
||||||
.catch(e => {
|
})
|
||||||
console.log(e.code + ": " + e.message);
|
.catch(e => {
|
||||||
});
|
console.log(e.code + ": " + e.message);
|
||||||
})
|
});
|
||||||
.catch(e => {
|
})
|
||||||
console.log(e.code + ": " + e.message);
|
.catch(e => {
|
||||||
a.disconnect()
|
console.log(e.code + ": " + e.message);
|
||||||
.then(res => {
|
setTimeout(() => {
|
||||||
console.log("DISCONNECTED");
|
a.disconnect()
|
||||||
})
|
.then(res => {
|
||||||
.catch(e => {
|
console.log("DISCONNECTED");
|
||||||
console.log(e.code + ": " + e.message);
|
})
|
||||||
});
|
.catch(e => {
|
||||||
});
|
console.log(e.code + ": " + e.message);
|
||||||
})
|
});
|
||||||
.catch(e => {
|
}, 10000);
|
||||||
console.log(e.code + ": " + e.message);
|
});
|
||||||
a.disconnect()
|
})
|
||||||
.then(res => {
|
.catch(e => {
|
||||||
console.log("DISCONNECTED");
|
console.log(e.code + ": " + e.message);
|
||||||
})
|
a.disconnect()
|
||||||
.catch(e => {
|
.then(res => {
|
||||||
console.log(e.code + ": " + e.message);
|
console.log("DISCONNECTED");
|
||||||
});
|
})
|
||||||
});
|
.catch(e => {
|
||||||
})
|
console.log(e.code + ": " + e.message);
|
||||||
.catch(e => {
|
});
|
||||||
console.log(e.code + ": " + e.message);
|
});
|
||||||
});
|
})
|
||||||
|
.catch(e => {
|
||||||
|
console.log(e.code + ": " + e.message);
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e.code + ": " + e.message);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
|
@ -9,49 +9,64 @@
|
|||||||
|
|
||||||
const oracledb = require("oracledb"); //Работа с СУБД Oracle
|
const oracledb = require("oracledb"); //Работа с СУБД Oracle
|
||||||
|
|
||||||
|
//----------
|
||||||
|
// Константы
|
||||||
|
//----------
|
||||||
|
|
||||||
|
//Типы сервисов
|
||||||
|
const NSRV_TYPE_SEND = 0; //Отправка сообщений
|
||||||
|
const NSRV_TYPE_RECIVE = 1; //Получение сообщений
|
||||||
|
const SSRV_TYPE_SEND = "SEND"; //Отправка сообщений (строковый код)
|
||||||
|
const SSRV_TYPE_RECIVE = "RECIVE"; //Получение сообщений (строковый код)
|
||||||
|
|
||||||
|
//Признак оповещения о простое удаленного сервиса
|
||||||
|
const NUNAVLBL_NTF_SIGN_NO = 0; //Не оповещать о простое
|
||||||
|
const NUNAVLBL_NTF_SIGN_YES = 1; //Оповещать о простое
|
||||||
|
const SUNAVLBL_NTF_SIGN_NO = "UNAVLBL_NTF_NO"; //Не оповещать о простое (строковый код)
|
||||||
|
const SUNAVLBL_NTF_SIGN_YES = "UNAVLBL_NTF_YES"; //Оповещать о простое (строковый код)
|
||||||
|
|
||||||
|
//Состояния записей журнала работы сервиса
|
||||||
|
const NLOG_STATE_INF = 0; //Информация
|
||||||
|
const NLOG_STATE_WRN = 1; //Предупреждение
|
||||||
|
const NLOG_STATE_ERR = 2; //Ошибка
|
||||||
|
const SLOG_STATE_INF = "INF"; //Информация (строковый код)
|
||||||
|
const SLOG_STATE_WRN = "WRN"; //Предупреждение (строковые коды)
|
||||||
|
const SLOG_STATE_ERR = "ERR"; //Ошибка (строковый код)
|
||||||
|
|
||||||
//------------
|
//------------
|
||||||
// Тело модуля
|
// Тело модуля
|
||||||
//------------
|
//------------
|
||||||
|
|
||||||
//Подключение к БД
|
//Подключение к БД
|
||||||
const connect = prms => {
|
const connect = async prms => {
|
||||||
return new Promise((resolve, reject) => {
|
try {
|
||||||
oracledb.getConnection(
|
const conn = await oracledb.getConnection({
|
||||||
{
|
user: prms.user,
|
||||||
user: prms.user,
|
password: prms.password,
|
||||||
password: prms.password,
|
connectString: prms.connectString
|
||||||
connectString: prms.connectString
|
});
|
||||||
},
|
return conn;
|
||||||
(err, connection) => {
|
} catch (e) {
|
||||||
if (err) {
|
throw new Error(e.message);
|
||||||
reject(new Error(err.message));
|
}
|
||||||
} else {
|
|
||||||
resolve(connection);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//Отключение от БД
|
//Отключение от БД
|
||||||
const disconnect = connection => {
|
const disconnect = async connection => {
|
||||||
return new Promise((resolve, reject) => {
|
if (connection) {
|
||||||
if (connection) {
|
try {
|
||||||
connection.close(err => {
|
const conn = await connection.close();
|
||||||
if (err) {
|
return;
|
||||||
reject(new Error(err.message));
|
} catch (e) {
|
||||||
} else {
|
throw new Error(e.message);
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
reject(new Error("Не указано подключение"));
|
|
||||||
}
|
}
|
||||||
});
|
} else {
|
||||||
|
throw new Error("Не указано подключение");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//Получение списка сервисов
|
//Получение списка сервисов
|
||||||
const getServices = connection => {
|
const getServices = async connection => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (connection) {
|
if (connection) {
|
||||||
connection.execute(
|
connection.execute(
|
||||||
@ -61,19 +76,53 @@ const getServices = connection => {
|
|||||||
(err, result) => {
|
(err, result) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(new Error(err.message));
|
reject(new Error(err.message));
|
||||||
|
} else {
|
||||||
|
let cursor = result.outBinds.RCSERVICES;
|
||||||
|
let queryStream = cursor.toQueryStream();
|
||||||
|
let rows = [];
|
||||||
|
queryStream.on("data", row => {
|
||||||
|
rows.push(row);
|
||||||
|
});
|
||||||
|
queryStream.on("error", err => {
|
||||||
|
reject(new Error(err.message));
|
||||||
|
});
|
||||||
|
queryStream.on("close", () => {
|
||||||
|
resolve(rows);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
let cursor = result.outBinds.RCSERVICES;
|
}
|
||||||
let queryStream = cursor.toQueryStream();
|
);
|
||||||
let rows = [];
|
} else {
|
||||||
queryStream.on("data", row => {
|
reject(new Error("Не указано подключение"));
|
||||||
rows.push(row);
|
}
|
||||||
});
|
});
|
||||||
queryStream.on("error", err => {
|
};
|
||||||
|
|
||||||
|
//Получение списка функций сервиса
|
||||||
|
const getServiceFunctions = (connection, serviceID) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if (connection) {
|
||||||
|
connection.execute(
|
||||||
|
"BEGIN PKG_EXS.SERVICEFN_GET(NSERVICE => :NSERVICE, RCSERVICEFNS => :RCSERVICEFNS); END;",
|
||||||
|
{ NSERVICE: serviceID, RCSERVICEFNS: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT } },
|
||||||
|
{ outFormat: oracledb.OBJECT },
|
||||||
|
(err, result) => {
|
||||||
|
if (err) {
|
||||||
reject(new Error(err.message));
|
reject(new Error(err.message));
|
||||||
});
|
} else {
|
||||||
queryStream.on("close", () => {
|
let cursor = result.outBinds.RCSERVICEFNS;
|
||||||
resolve(rows);
|
let queryStream = cursor.toQueryStream();
|
||||||
});
|
let rows = [];
|
||||||
|
queryStream.on("data", row => {
|
||||||
|
rows.push(row);
|
||||||
|
});
|
||||||
|
queryStream.on("error", err => {
|
||||||
|
reject(new Error(err.message));
|
||||||
|
});
|
||||||
|
queryStream.on("close", () => {
|
||||||
|
resolve(rows);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@ -83,13 +132,13 @@ const getServices = connection => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Запись в протокол работы
|
//Запись в протокол работы
|
||||||
const log = (connection, msg, queueID) => {
|
const log = (connection, logState, msg, queueID) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (connection) {
|
if (connection) {
|
||||||
connection.execute(
|
connection.execute(
|
||||||
"BEGIN PKG_EXS.LOG_PUT(NLOG_STATE => :NLOG_STATE, SMSG => :SMSG, NEXSQUEUE => :NEXSQUEUE, RCLOG => :RCLOG); END;",
|
"BEGIN PKG_EXS.LOG_PUT(NLOG_STATE => :NLOG_STATE, SMSG => :SMSG, NEXSQUEUE => :NEXSQUEUE, RCLOG => :RCLOG); END;",
|
||||||
{
|
{
|
||||||
NLOG_STATE: 0,
|
NLOG_STATE: logState,
|
||||||
SMSG: msg,
|
SMSG: msg,
|
||||||
NEXSQUEUE: queueID,
|
NEXSQUEUE: queueID,
|
||||||
RCLOG: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
RCLOG: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
|
||||||
@ -98,19 +147,20 @@ const log = (connection, msg, queueID) => {
|
|||||||
(err, result) => {
|
(err, result) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(new Error(err.message));
|
reject(new Error(err.message));
|
||||||
|
} else {
|
||||||
|
let cursor = result.outBinds.RCLOG;
|
||||||
|
let queryStream = cursor.toQueryStream();
|
||||||
|
let rows = [];
|
||||||
|
queryStream.on("data", row => {
|
||||||
|
rows.push(row);
|
||||||
|
});
|
||||||
|
queryStream.on("error", err => {
|
||||||
|
reject(new Error(err.message));
|
||||||
|
});
|
||||||
|
queryStream.on("close", () => {
|
||||||
|
resolve(rows[0]);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
let cursor = result.outBinds.RCLOG;
|
|
||||||
let queryStream = cursor.toQueryStream();
|
|
||||||
let rows = [];
|
|
||||||
queryStream.on("data", row => {
|
|
||||||
rows.push(row);
|
|
||||||
});
|
|
||||||
queryStream.on("error", err => {
|
|
||||||
reject(new Error(err.message));
|
|
||||||
});
|
|
||||||
queryStream.on("close", () => {
|
|
||||||
resolve(rows[0]);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@ -135,6 +185,7 @@ const setQueueValue = prms => {};
|
|||||||
exports.connect = connect;
|
exports.connect = connect;
|
||||||
exports.disconnect = disconnect;
|
exports.disconnect = disconnect;
|
||||||
exports.getServices = getServices;
|
exports.getServices = getServices;
|
||||||
|
exports.getServiceFunctions = getServiceFunctions;
|
||||||
exports.log = log;
|
exports.log = log;
|
||||||
exports.getQueueOutgoing = getQueueOutgoing;
|
exports.getQueueOutgoing = getQueueOutgoing;
|
||||||
exports.putQueueIncoming = putQueueIncoming;
|
exports.putQueueIncoming = putQueueIncoming;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user