From b02ac1295ce2ba0e9756b2b42925d76ccad76205 Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Thu, 12 Dec 2024 16:02:31 +0300 Subject: [PATCH 1/3] fix: 662 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Теперь мы удаляем соединения не по процессу, а скопом. Убрал фильтр соединений по application(он все равно не работал) --- ...20\275\321\201\320\260\320\274\320\270.os" | 82 ++++--------------- 1 file changed, 18 insertions(+), 64 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" index 94871e8f..dea2170c 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" @@ -289,7 +289,7 @@ // соединения будет отключать всегда, так как могут быть зависшие Лог.Информация("Пауза перед отключением соединений"); Приостановить(Пауза_ДесятьСек); - ОтключитьСоединенияСРабочимиПроцессами(); + ОтключитьСоединения(); Сеансы = ПолучитьСписокСеансов(); Если Сеансы.Количество() = 0 Тогда @@ -510,99 +510,53 @@ КонецПроцедуры -Процедура ОтключитьСоединенияСРабочимиПроцессами() +Процедура ОтключитьСоединения() - Процессы = ПолучитьСписокРабочихПроцессов(); - - Для Каждого РабочийПроцесс Из Процессы Цикл - Если РабочийПроцесс["running"] = "yes" Тогда - - СписокСоединений = ПолучитьСоединенияРабочегоПроцесса(РабочийПроцесс); + СписокСоединений = ПолучитьСоединения(); Для Каждого Соединение Из СписокСоединений Цикл - - // Попытка - РазорватьСоединениеСПроцессом(РабочийПроцесс, Соединение); - // Исключение - // Лог.Ошибка(ОписаниеОшибки()); - // КонецПопытки; - + РазорватьСоединение(Соединение); КонецЦикла; - КонецЕсли; - КонецЦикла; - КонецПроцедуры -Функция ПолучитьСписокРабочихПроцессов() - - ОписаниеКластера = МенеджерRac.ОписаниеКластера(); - КомандаЗапускаПроцессы = МенеджерRac.СтрокаЗапускаКлиента() + СтрШаблон("process list --cluster=""%1""%2", - МенеджерRac.ИдентификаторКластера(ОписаниеКластера), - МенеджерRac.КлючиАвторизацииВКластере()) + " " + Настройки.АдресСервераАдминистрирования; - - Лог.Информация("Получаю список рабочих процессов..."); - СписокПроцессов = ЗапуститьПроцесс(КомандаЗапускаПроцессы); - - Результат = МенеджерRAC.РазобратьПоток(СписокПроцессов); - - Возврат Результат; - -КонецФункции - -Функция ПолучитьСоединенияРабочегоПроцесса(Знач РабочийПроцесс) +Функция ПолучитьСоединения() ОписаниеКластера = МенеджерRac.ОписаниеКластера(); - КомандаЗапускаСоединения = МенеджерRac.СтрокаЗапускаКлиента() + СтрШаблон("connection list --cluster=""%1""%2 --infobase=%3%4 --process=%5", + КомандаЗапускаСоединения = МенеджерRac.СтрокаЗапускаКлиента() + + СтрШаблон("connection list --cluster=""%1""%2 --infobase=%3%4", МенеджерRac.ИдентификаторКластера(ОписаниеКластера), МенеджерRac.КлючиАвторизацииВКластере(), МенеджерRAC.ИдентификаторБазы(), - МенеджерRAC.КлючиАвторизацииВБазе(), - РабочийПроцесс["process"]) + " " + Настройки.АдресСервераАдминистрирования; + МенеджерRAC.КлючиАвторизацииВБазе()) + " " + Настройки.АдресСервераАдминистрирования; - Результат = Новый Массив; - Лог.Информация("Получаю список соединений рабочего процесса..."); + Соединения = Новый Массив; + Лог.Информация("Получаю список соединений..."); Попытка Соединения = МенеджерRAC.РазобратьПоток(ЗапуститьПроцесс(КомандаЗапускаСоединения)); Исключение ТекстОшибки = ОписаниеОшибки(); - Если СтрНайти(ВРег(ТекстОшибки), "РАБОЧИЙ ПРОЦЕСС С УКАЗАННЫМ ИДЕНТИФИКАТОРОМ НЕ НАЙДЕН") = 0 Тогда - ВызватьИсключение; - КонецЕсли; Лог.Отладка("Пропускаю ошибку: " + ТекстОшибки); - - Соединения = Новый Массив; КонецПопытки; - Для Каждого ТекПроцесс Из Соединения Цикл - Если ВРег(ТекПроцесс["app-id"]) = "RAS" - Или Не МенеджерФильтраПриложений.СеансПодходит(ТекПроцесс["app-id"], ТекПроцесс["user-name"]) Тогда - Продолжить; - КонецЕсли; - - Результат.Добавить(ТекПроцесс); - - КонецЦикла; - - Возврат Результат; + Возврат Соединения; КонецФункции -Процедура РазорватьСоединениеСПроцессом(Знач РабочийПроцесс, Знач Соединение) +Процедура РазорватьСоединение(Знач Соединение) ОписаниеКластера = МенеджерRac.ОписаниеКластера(); - КомандаРазрывСоединения = МенеджерRac.СтрокаЗапускаКлиента() + СтрШаблон("connection disconnect --cluster=""%1""%2 %3 --process=%4 --connection=%5", + КомандаРазрывСоединения = МенеджерRac.СтрокаЗапускаКлиента() + + СтрШаблон("connection disconnect --cluster=""%1""%2 %3 --process=%4 --connection=%5", МенеджерRac.ИдентификаторКластера(ОписаниеКластера), МенеджерRac.КлючиАвторизацииВКластере(), МенеджерRAC.КлючиАвторизацииВБазе(), - РабочийПроцесс["process"], + Соединение["process"], Соединение["connection"]) + " " + Настройки.АдресСервераАдминистрирования; - Сообщение = СтрШаблон("Отключаю соединение %1 [%2] (%3)", - Соединение["conn-id"], - Соединение["app-id"], - Соединение["user-name"] - ); + Сообщение = СтрШаблон("Отключаю соединение %1 [%2]", + Соединение["conn-id"], + Соединение["application"]); Лог.Информация(Сообщение); From f502ac934aa1ddf27343865e3e2b852e73b8cf47 Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Thu, 12 Dec 2024 18:42:19 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=92=D0=B5=D1=80=D0=BD=D1=83=D0=BB=20?= =?UTF-8?q?=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20=D0=BF=D0=BE=20=D1=82?= =?UTF-8?q?=D0=B8=D0=BF=D1=83=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D1=81=D0=BE=D0=B5=D0=B4=D0=B8?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B9.=20=D0=AD=D1=82=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B7=D0=B2=D0=BE=D0=BB=D0=B8=D1=82=20=D1=81=D0=BE=D0=BA?= =?UTF-8?q?=D1=80=D0=B0=D1=82=D0=B8=D1=82=D1=8C=20=D1=87=D0=B8=D1=81=D0=BB?= =?UTF-8?q?=D0=BE=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D0=B5=D0=BC?= =?UTF-8?q?=D1=8B=D1=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавил фильтр по номеру соединения при отключении повисших соединений. Теперь отключаются только те соединения, у которых нет сеансов --- ...20\275\321\201\320\260\320\274\320\270.os" | 23 +++++++++++++++---- ...20\266\320\265\320\275\320\270\320\271.os" | 2 +- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" index dea2170c..1ad3c73c 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" @@ -287,9 +287,9 @@ Сеансы = ПолучитьСписокСеансов(); // соединения будет отключать всегда, так как могут быть зависшие - Лог.Информация("Пауза перед отключением соединений"); + Лог.Информация("Пауза перед отключением повисших соединений"); Приостановить(Пауза_ДесятьСек); - ОтключитьСоединения(); + ОтключитьПовисшиеСоединения(); Сеансы = ПолучитьСписокСеансов(); Если Сеансы.Количество() = 0 Тогда @@ -510,11 +510,11 @@ КонецПроцедуры -Процедура ОтключитьСоединения() +Процедура ОтключитьПовисшиеСоединения() СписокСоединений = ПолучитьСоединения(); Для Каждого Соединение Из СписокСоединений Цикл - РазорватьСоединение(Соединение); + РазорватьПовисшиеСоединение(Соединение); КонецЦикла; КонецПроцедуры @@ -539,12 +539,25 @@ Лог.Отладка("Пропускаю ошибку: " + ТекстОшибки); КонецПопытки; + Результат = Новый Массив; + + Для каждого Соединение Из Соединения Цикл + Если МенеджерФильтраПриложений.СеансПодходит(Соединение["application"]) Тогда + Результат.добавить(Соединение); + КонецЕсли; + КонецЦикла; + Возврат Соединения; КонецФункции -Процедура РазорватьСоединение(Знач Соединение) +Процедура РазорватьПовисшиеСоединение(Знач Соединение) + Если Не Соединение["session-number"] = 0 Тогда + // Это не повисшее соединение. Его мы разрывать не будем + Возврат; + КонецЕсли; + ОписаниеКластера = МенеджерRac.ОписаниеКластера(); КомандаРазрывСоединения = МенеджерRac.СтрокаЗапускаКлиента() + СтрШаблон("connection disconnect --cluster=""%1""%2 %3 --process=%4 --connection=%5", diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\244\320\270\320\273\321\214\321\202\321\200\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\271.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\244\320\270\320\273\321\214\321\202\321\200\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\271.os" index b7c04e67..2fff361f 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\244\320\270\320\273\321\214\321\202\321\200\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\271.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\244\320\270\320\273\321\214\321\202\321\200\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\271.os" @@ -37,7 +37,7 @@ Лог = ПарамЛог; КонецПроцедуры -Функция СеансПодходит(Приложение, Пользователь) Экспорт +Функция СеансПодходит(Приложение, Пользователь = Неопределено) Экспорт Если РежимРаботыФильтра = "OFF" Тогда Возврат Истина; From e8dd18dbbb2d4f9c0504989810c22e264f7e18d8 Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Thu, 12 Dec 2024 21:28:00 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D1=81=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...273\320\276\320\266\320\265\320\275\320\270\320\271.os" | 7 +++++++ 1 file changed, 7 insertions(+) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\244\320\270\320\273\321\214\321\202\321\200\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\271.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\244\320\270\320\273\321\214\321\202\321\200\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\271.os" index 2fff361f..9e685aa1 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\244\320\270\320\273\321\214\321\202\321\200\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\271.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\244\320\270\320\273\321\214\321\202\321\200\320\260\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\320\271.os" @@ -37,6 +37,13 @@ Лог = ПарамЛог; КонецПроцедуры +// Функция - СеансПодходит предназначена для определения соответствия сеанса критериям фильтрации +// +// Параметры: +// Приложение - Строка - Идентификатор типа приложения +// Пользователь - Строка - Имя пользователя иб которому принадлежит сеанс +// Возвращаемое значение: +// Булево - результат. Истина если сеанс подходит под критерии Функция СеансПодходит(Приложение, Пользователь = Неопределено) Экспорт Если РежимРаботыФильтра = "OFF" Тогда