Формирование полной структуры сервисов с их функциями
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