Формирование полной структуры сервисов с их функциями
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 { 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;
|
||||
|
93
index.js
93
index.js
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user