Skip to content

Commit

Permalink
Merge pull request vanessa-opensource#240 from ImHunter/develop_dolinin
Browse files Browse the repository at this point in the history
Исправлены ошибки при отключении сеансов рабочих процессов
  • Loading branch information
EvilBeaver authored Sep 10, 2018
2 parents 606fe8d + 066119b commit 54148d9
Showing 1 changed file with 33 additions and 69 deletions.
102 changes: 33 additions & 69 deletions src/Классы/КомандаУправлениеСеансами.os
Original file line number Diff line number Diff line change
Expand Up @@ -261,8 +261,11 @@
Приостановить(Пауза_ДесятьСек);
ОтключитьСоединенияСРабочимиПроцессами();
КонецЕсли;

Прервать;

Сеансы = ПолучитьСписокСеансов();
Если Сеансы.Количество()=0 Тогда
Прервать;
КонецЕсли;

Исключение
ВызватьИсключение СтрШаблон("Попытка удаления сеансов не удалась. Текст ошибки:
Expand Down Expand Up @@ -300,7 +303,7 @@

КонецЕсли;

КомандаВыполнения = СтрокаЗапускаКлиента() + СтрШаблон("infobase update --infobase=""%3""%4 --cluster=""%1""%2 --sessions-deny=%5 --denied-message=""%6"" --denied-from=""%8"" --denied-to= --permission-code=""%7""",
КомандаВыполнения = СтрокаЗапускаКлиента() + СтрШаблон("infobase update --infobase=""%3""%4 --cluster=""%1""%2 --sessions-deny=%5 --denied-message=""%6"" --denied-from=""%8"" --permission-code=""%7""",
ИдентификаторКластера,
КлючиАвторизацииВКластере(),
ИдентификаторБазы,
Expand Down Expand Up @@ -474,50 +477,12 @@


Функция ЗапуститьПроцесс(Знач СтрокаВыполнения)
Перем ПаузаОжиданияЧтенияБуфера;

ПаузаОжиданияЧтенияБуфера = 20;

Лог.Отладка(СтрокаВыполнения);
Процесс = СоздатьПроцесс(СтрокаВыполнения, ,Истина);
Процесс.Запустить();

Текст = Новый ТекстовыйДокумент;

Пока Истина Цикл

ВывестиДанныеПроцесса(Процесс, Текст);

Если Процесс.Завершен Тогда
Процесс.ОжидатьЗавершения(); // финальный сброс буферов
ВывестиДанныеПроцесса(Процесс, Текст);
Прервать;
КонецЕсли;

Приостановить(ПаузаОжиданияЧтенияБуфера);

КонецЦикла;

Если Процесс.КодВозврата = 0 Тогда
Возврат Текст.ПолучитьТекст();
Иначе
ВызватьИсключение "Сообщение от RAS/RAC
|" + Текст.ПолучитьТекст();
КонецЕсли;

Возврат ОбщиеМетоды.ЗапуститьПроцесс(СтрокаВыполнения);


КонецФункции

Процедура ВывестиДанныеПроцесса(Знач Процесс, Знач Приемник)
Вывод = Процесс.ПотокВывода.Прочитать();
Ошибки = Процесс.ПотокОшибок.Прочитать();
Если СтрДлина(Строка(Вывод)) > 0 Тогда
Приемник.ДобавитьСтроку(Вывод);
КонецЕсли;
Если СтрДлина(Строка(Ошибки)) > 0 Тогда
Приемник.ДобавитьСтроку(Ошибки);
КонецЕсли;
КонецПроцедуры

Процедура ОтключитьСуществующиеСеансы()

Лог.Информация("Отключаю существующие сеансы");
Expand Down Expand Up @@ -611,21 +576,10 @@
КлючиАвторизацииВКластере()) + " " + мНастройки.АдресСервераАдминистрирования;

Лог.Информация("Получаю список рабочих процессов...");
СписокПроцессов = ВыполнитьКоманду(КомандаЗапускаПроцессы);
СписокПроцессов = ЗапуститьПроцесс(КомандаЗапускаПроцессы);

Результат = РазобратьПоток(СписокПроцессов);

НеВФильтре = Новый Массив;
Для Каждого ТекПроцесс Из Результат Цикл
Если Не СеансВФильтре(Новый Структура("Приложение, Пользователь", ТекПроцесс["app-id"], ТекПроцесс["user-name"])) Тогда
НеВФильтре.Добавить(ТекПроцесс);
КонецЕсли;
КонецЦикла;

Для Каждого Уд Из НеВФильтре Цикл
Результат.Удалить(Уд);
КонецЦикла;

Возврат Результат;

КонецФункции
Expand All @@ -639,29 +593,39 @@
КлючиАвторизацииВБазе(),
РабочийПроцесс["process"]) + " " + мНастройки.АдресСервераАдминистрирования;

Лог.Информация("Получаю список соединений...");
Возврат РазобратьПоток(ВыполнитьКоманду(КомандаЗапускаСоединения));
Лог.Информация("Получаю список соединений рабочего процесса...");
Соединения = РазобратьПоток(ЗапуститьПроцесс(КомандаЗапускаСоединения));

Результат = Новый Массив;
Для Каждого ТекПроцесс Из Соединения Цикл
Если СеансВФильтре(Новый Структура("Приложение, Пользователь", ТекПроцесс["app-id"], ТекПроцесс["user-name"]))
И ВРег(ТекПроцесс["app-id"])<>"RAS" Тогда
Результат.Добавить(ТекПроцесс);
КонецЕсли;
КонецЦикла;

Возврат Результат;

КонецФункции

Функция РазорватьСоединениеСПроцессом(Знач РабочийПроцесс, Знач Соединение)

КомандаРазрывСоединения = СтрокаЗапускаКлиента() + СтрШаблон("connection disconnect --cluster=""%1""%2 --infobase=%3%4 --process=%5 --connection=%6",
ИдентификаторКластера(),
КлючиАвторизацииВКластере(),
ИдентификаторБазы(),
КлючиАвторизацииВБазе(),
РабочийПроцесс["process"],
Соединение["connection"]) + " " + мНастройки.АдресСервераАдминистрирования;
КомандаРазрывСоединения = СтрокаЗапускаКлиента() + СтрШаблон("connection disconnect --cluster=""%1""%2 %3 --process=%4 --connection=%5",
ИдентификаторКластера(),
КлючиАвторизацииВКластере(),
КлючиАвторизацииВБазе(),
РабочийПроцесс["process"],
Соединение["connection"]) + " " + мНастройки.АдресСервераАдминистрирования;

Сообщение = СтрШаблон("Отключаю соединение %1 [%2] (%3)",
Соединение["conn-id"],
Соединение["app-id"],
Соединение["user-name"]);
Соединение["conn-id"],
Соединение["app-id"],
Соединение["user-name"]
);

Лог.Информация(Сообщение);

Возврат ВыполнитьКоманду(КомандаРазрывСоединения);
Возврат ЗапуститьПроцесс(КомандаРазрывСоединения);

КонецФункции

Expand Down

0 comments on commit 54148d9

Please sign in to comment.