Формирование полной структуры сервисов с их функциями

This commit is contained in:
Mikhail Chechnev 2018-11-09 21:56:23 +03:00
parent 0022777f96
commit 73c414010f
3 changed files with 182 additions and 103 deletions

View File

@ -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;

View File

@ -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);
}
/* /*

View File

@ -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;