From 6908166e48be8b8e0387a11f62d1c95a08398198 Mon Sep 17 00:00:00 2001 From: Dollerino Date: Thu, 19 Oct 2023 17:47:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-37=20-=20=D0=94=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7?= =?UTF-8?q?=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=BE=D0=BA=D1=81=D0=B8=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.js | 4 +++- core/app.js | 8 +++++--- core/out_queue.js | 5 ++++- core/out_queue_processor.js | 10 ++++++---- core/service_available_controller.js | 14 +++++++++++++- models/obj_config.js | 21 +++++++++++++++++++++ models/obj_out_queue_processor.js | 9 +++++++++ models/prms_out_queue.js | 9 +++++++++ models/prms_out_queue_processor.js | 11 ++++++++++- models/prms_service_available_controller.js | 10 ++++++++++ 10 files changed, 90 insertions(+), 11 deletions(-) diff --git a/config.js b/config.js index be196c4..0dd5e54 100644 --- a/config.js +++ b/config.js @@ -48,7 +48,9 @@ let outGoing = { //Максимальный размер пула подключений к БД для обработчика исходящих сообщений nPoolMax: 4, //Шаг инкремента подключений к БД в пуле обработчика исходящих сообщений - nPoolIncrement: 0 + nPoolIncrement: 0, + //Глобальный адрес прокси-сервера + sProxy: null }; //Параметры обработки очереди входящих сообщений diff --git a/core/app.js b/core/app.js index 6979e8a..756e0cf 100644 --- a/core/app.js +++ b/core/app.js @@ -93,7 +93,7 @@ class ParusAppServer { async onOutQStarted() { //Сообщим, что запустили обработчик await this.logger.info("Обработчик очереди исходящих сообщений запущен"); - //Запускаем бслуживание очереди входящих + //Запускаем обслуживание очереди входящих await this.logger.info("Запуск обработчика очереди входящих сообщений..."); try { this.inQ.startProcessing({ services: this.services }); @@ -217,7 +217,8 @@ class ParusAppServer { outGoing: prms.config.outGoing, dbConn: this.dbConn, logger: this.logger, - notifier: this.notifier + notifier: this.notifier, + sProxy: prms.config.outGoing.sProxy }); //Создаём обработчик очереди входящих this.inQ = new iq.InQueue({ @@ -231,7 +232,8 @@ class ParusAppServer { this.srvAvlCtrl = new sac.ServiceAvailableController({ logger: this.logger, notifier: this.notifier, - dbConn: this.dbConn + dbConn: this.dbConn, + sProxy: prms.config.outGoing.sProxy }); //Скажем что инициализировали await this.logger.info("Сервер приложений инициализирован"); diff --git a/core/out_queue.js b/core/out_queue.js index aef4c2f..cb828a2 100644 --- a/core/out_queue.js +++ b/core/out_queue.js @@ -64,6 +64,8 @@ class OutQueue extends EventEmitter { this.logger = prms.logger; //Запомним уведомитель this.notifier = prms.notifier; + //Запомним глобальный адрес прокси-сервера + this.sProxy = prms.sProxy; //Список обрабатываемых в текущий момент сообщений очереди this.inProgress = []; //Привяжем методы к указателю на себя для использования в обработчиках событий @@ -160,7 +162,8 @@ class OutQueue extends EventEmitter { service: _.find(this.services, { nId: prms.queue.nServiceId }), function: _.find(_.find(this.services, { nId: prms.queue.nServiceId }).functions, { nId: prms.queue.nServiceFnId - }) + }), + sProxy: this.sProxy }); //Уменьшаем количество доступных обработчиков this.nWorkersLeft--; diff --git a/core/out_queue_processor.js b/core/out_queue_processor.js index 20f8eb1..4f64459 100644 --- a/core/out_queue_processor.js +++ b/core/out_queue_processor.js @@ -145,9 +145,10 @@ const appProcess = async prms => { sQuery: prms.queue.blMsg === null ? "" : prms.queue.blMsg.toString() }); } - /* Установим прокси, если требуется */ - if (prms.service.sProxyURL) { - options.proxy = prms.service.sProxyURL; + // Если у сервиса указан прокси, либо у приложения установлен глобальный прокси + if (prms.service.sProxyURL || prms.sProxy) { + // Добавляем прокси с приоритетом сервиса + options.proxy = prms.service.sProxyURL ?? prms.sProxy; } //Дополним получившиеся параметры переданными в сообщении if (prms.queue.sOptions) { @@ -513,7 +514,8 @@ const processTask = async prms => { let res = await appProcess({ queue: q, service: prms.task.service, - function: prms.task.function + function: prms.task.function, + sProxy: prms.task.sProxy }); //Если результат обработки ошибка - пробрасываем её дальше if (res instanceof ServerError) { diff --git a/core/service_available_controller.js b/core/service_available_controller.js index 1f241d2..a55d1c0 100644 --- a/core/service_available_controller.js +++ b/core/service_available_controller.js @@ -67,6 +67,8 @@ class ServiceAvailableController extends EventEmitter { this.logger = prms.logger; //Запомним подключение к БД this.dbConn = prms.dbConn; + //Запомним глобальный адрес прокси-сервера + this.sProxy = prms.sProxy; //Привяжем методы к указателю на себя для использования в обработчиках событий this.serviceDetectingLoop = this.serviceDetectingLoop.bind(this); } else { @@ -110,8 +112,18 @@ class ServiceAvailableController extends EventEmitter { service.nSrvType == objServiceSchema.NSRV_TYPE_SEND ) { try { + // Инициализируем параметры запроса + let options = {}; + // Устанавливаем параметры запроса + options.url = service.sSrvRoot; + options.timeout = NNETWORK_CHECK_TIMEOUT; + // Если у сервиса указан прокси, либо у приложения установлен глобальный прокси + if (service.sProxyURL || this.sProxy) { + // Добавляем прокси с приоритетом сервиса + options.proxy = service.sProxyURL ?? this.sProxy; + } //Отправляем проверочный запрос - await rqp({ url: service.sSrvRoot, timeout: NNETWORK_CHECK_TIMEOUT }); + await rqp(options); //Запрос прошел - фиксируем дату доступности и сбрасываем дату недоступности service.dAvailable = new Date(); service.dUnAvailable = null; diff --git a/models/obj_config.js b/models/obj_config.js index 96064c9..63fa321 100644 --- a/models/obj_config.js +++ b/models/obj_config.js @@ -77,6 +77,16 @@ const common = new Schema({ validateTerminateTimeout: path => `Таймаут останова сервера (${path}) должен быть целым числом в диапазоне от 1000 до 120000` } + }, + //Контроль версии Системы + bControlSystemVersion: { + type: Boolean, + required: true, + message: { + type: path => + `Признак контроля версии Системы (${path}) имеет некорректный тип данных (ожидалось - Boolean)`, + required: path => `Не указан признак контроля версии Системы (${path})` + } } }); @@ -220,6 +230,17 @@ const outGoing = new Schema({ validatePoolIncrementOutGoing: path => `Значение шага инкремента подключений к БД в пуле обработчика исходящих сообщений (${path}) должно быть целым числом в диапазоне от 0 до 10` } + }, + //Глобальный адрес прокси-сервера + sProxy: { + type: String, + required: false, + message: { + type: path => + `Адрес прокси-сервера приложения (${path}) имеет некорректный тип данных (ожидалось - String)`, + required: path => + `Не указан глобальный адрес прокси-сервера (${path})` + } } }); diff --git a/models/obj_out_queue_processor.js b/models/obj_out_queue_processor.js index bcabc16..43e5c05 100644 --- a/models/obj_out_queue_processor.js +++ b/models/obj_out_queue_processor.js @@ -65,6 +65,15 @@ exports.OutQueueProcessorTask = new Schema({ message: { required: path => `Не указана функция сервиса для обработки сообщения очереди (${path})` } + }, + //Глобальный адрес прокси-сервера + sProxy: { + type: String, + required: false, + message: { + type: path => `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`, + required: path => `Не указан глобальный адрес прокси-сервера (${path})` + } } }); diff --git a/models/prms_out_queue.js b/models/prms_out_queue.js index 734919c..4d90322 100644 --- a/models/prms_out_queue.js +++ b/models/prms_out_queue.js @@ -66,6 +66,15 @@ exports.OutQueue = new Schema({ `Объект для рассылки уведомлений (${path}) имеет некорректный тип данных (ожидалось - Notifier)`, required: path => `Не указан объект для рассылки уведомлений (${path})` } + }, + //Глобальный адрес прокси-сервера + sProxy: { + type: String, + required: false, + message: { + type: path => `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`, + required: path => `Не указан глобальный адрес прокси-сервера (${path})` + } } }); diff --git a/models/prms_out_queue_processor.js b/models/prms_out_queue_processor.js index 39c445d..ed947b5 100644 --- a/models/prms_out_queue_processor.js +++ b/models/prms_out_queue_processor.js @@ -37,7 +37,7 @@ exports.appProcess = new Schema({ schema: Queue, required: true, message: { - required: path => `Не указано обрабатываемое сообщение очреди (${path})` + required: path => `Не указано обрабатываемое сообщение очереди (${path})` } }, //Cервис-обработчик @@ -55,6 +55,15 @@ exports.appProcess = new Schema({ message: { required: path => `Не указана функция сервиса для обработки сообщения очереди (${path})` } + }, + //Глобальный адрес прокси-сервера + sProxy: { + type: String, + required: false, + message: { + type: path => `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`, + required: path => `Не указан глобальный адрес прокси-сервера (${path})` + } } }); diff --git a/models/prms_service_available_controller.js b/models/prms_service_available_controller.js index b6f26df..65a525b 100644 --- a/models/prms_service_available_controller.js +++ b/models/prms_service_available_controller.js @@ -48,6 +48,16 @@ exports.ServiceAvailableController = new Schema({ `Объект для взаимодействия с БД (${path}) имеет некорректный тип данных (ожидалось - DBConnector)`, required: path => `Не указан объект для взаимодействия с БД (${path})` } + }, + //Глобальный адрес прокси-сервера + sProxy: { + type: String, + required: false, + message: { + type: path => + `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`, + required: path => `Не указан глобальный адрес прокси-сервера (${path})` + } } });