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

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 { 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",
"disconnect",
"getServices",
"getServiceFunctions",
"log",
"getQueueOutgoing",
"putQueueIncoming",
@ -93,16 +103,26 @@ class DBConnector {
//Получить список сервисов
async getServices() {
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;
} catch (e) {
throw new ServerError(glConst.ERR_DB_EXECUTE, e.message);
}
}
//Запись в журнал работы
async putLog(msg, queueID) {
async putLog(msgType, msg, queueID) {
try {
let res = await this.connector.log(this.connection, msg, queueID);
let res = await this.connector.log(this.connection, msgType, msg, queueID);
return res;
} catch (e) {
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;

View File

@ -12,56 +12,61 @@ const cfg = require("./config.js");
const { Logger } = require("@core/logger.js");
const db = require("@core/db_connector.js");
const { ServerError } = require("@core/server_errors.js");
const parus = require("@modules/parus_db.js");
const utls = require("@core/utils.js");
//------------
// Тело модуля
//------------
let a = new db.DBConnector(cfg.dbConnect);
a.connect()
.then(res => {
console.log("CONNECTED");
a.getServices()
.then(res => {
console.log(res);
a.putLog("Сервер приложений подключен")
.then(res => {
console.log(res);
a.disconnect()
.then(res => {
console.log("DISCONNECTED");
})
.catch(e => {
console.log(e.code + ": " + e.message);
});
})
.catch(e => {
console.log(e.code + ": " + e.message);
a.disconnect()
.then(res => {
console.log("DISCONNECTED");
})
.catch(e => {
console.log(e.code + ": " + e.message);
});
});
})
.catch(e => {
console.log(e.code + ": " + e.message);
a.disconnect()
.then(res => {
console.log("DISCONNECTED");
})
.catch(e => {
console.log(e.code + ": " + e.message);
});
});
})
.catch(e => {
console.log(e.code + ": " + e.message);
});
try {
let a = new db.DBConnector(cfg.dbConnect);
a.connect()
.then(res => {
console.log("CONNECTED");
a.getServices()
.then(res => {
console.log(res);
a.putLog(db.NLOG_STATE_WRN, "Сервер приложений подключен")
.then(res => {
console.log(res);
a.disconnect()
.then(res => {
console.log("DISCONNECTED");
})
.catch(e => {
console.log(e.code + ": " + e.message);
});
})
.catch(e => {
console.log(e.code + ": " + e.message);
setTimeout(() => {
a.disconnect()
.then(res => {
console.log("DISCONNECTED");
})
.catch(e => {
console.log(e.code + ": " + e.message);
});
}, 10000);
});
})
.catch(e => {
console.log(e.code + ": " + e.message);
a.disconnect()
.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);
}
/*

View File

@ -9,49 +9,64 @@
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 => {
return new Promise((resolve, reject) => {
oracledb.getConnection(
{
user: prms.user,
password: prms.password,
connectString: prms.connectString
},
(err, connection) => {
if (err) {
reject(new Error(err.message));
} else {
resolve(connection);
}
}
);
});
const connect = async prms => {
try {
const conn = await oracledb.getConnection({
user: prms.user,
password: prms.password,
connectString: prms.connectString
});
return conn;
} catch (e) {
throw new Error(e.message);
}
};
//Отключение от БД
const disconnect = connection => {
return new Promise((resolve, reject) => {
if (connection) {
connection.close(err => {
if (err) {
reject(new Error(err.message));
} else {
resolve();
}
});
} else {
reject(new Error("Не указано подключение"));
const disconnect = async connection => {
if (connection) {
try {
const conn = await connection.close();
return;
} catch (e) {
throw new Error(e.message);
}
});
} else {
throw new Error("Не указано подключение");
}
};
//Получение списка сервисов
const getServices = connection => {
const getServices = async connection => {
return new Promise((resolve, reject) => {
if (connection) {
connection.execute(
@ -61,19 +76,53 @@ const getServices = connection => {
(err, result) => {
if (err) {
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 = [];
queryStream.on("data", row => {
rows.push(row);
});
queryStream.on("error", err => {
}
);
} else {
reject(new Error("Не указано подключение"));
}
});
};
//Получение списка функций сервиса
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));
});
queryStream.on("close", () => {
resolve(rows);
});
} else {
let cursor = result.outBinds.RCSERVICEFNS;
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 {
@ -83,13 +132,13 @@ const getServices = connection => {
};
//Запись в протокол работы
const log = (connection, msg, queueID) => {
const log = (connection, logState, msg, queueID) => {
return new Promise((resolve, reject) => {
if (connection) {
connection.execute(
"BEGIN PKG_EXS.LOG_PUT(NLOG_STATE => :NLOG_STATE, SMSG => :SMSG, NEXSQUEUE => :NEXSQUEUE, RCLOG => :RCLOG); END;",
{
NLOG_STATE: 0,
NLOG_STATE: logState,
SMSG: msg,
NEXSQUEUE: queueID,
RCLOG: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
@ -98,19 +147,20 @@ const log = (connection, msg, queueID) => {
(err, result) => {
if (err) {
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 {
@ -135,6 +185,7 @@ const setQueueValue = prms => {};
exports.connect = connect;
exports.disconnect = disconnect;
exports.getServices = getServices;
exports.getServiceFunctions = getServiceFunctions;
exports.log = log;
exports.getQueueOutgoing = getQueueOutgoing;
exports.putQueueIncoming = putQueueIncoming;