From 1f73e2f2e166e9b5dbe18e59edd22ff733444e87 Mon Sep 17 00:00:00 2001 From: Olga Date: Fri, 29 Sep 2017 12:42:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=20?= =?UTF-8?q?=D0=9F=D0=BE=D1=80=D1=82=20=D0=BA=D0=BB=D0=B0=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D0=B0,=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=20re?= =?UTF-8?q?adme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + ...20\275\321\201\320\260\320\274\320\270.os" | 186 ++++++++++-------- 2 files changed, 106 insertions(+), 81 deletions(-) diff --git a/README.md b/README.md index 60ab65c..56fa6ff 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ * -db - Имя информационной базы * -db-user - Пользователь информационной базы * -db-pwd - Пароль пользователя информационной базы +* -cluster-port - Порт кластера * -cluster-admin - Администратор кластера * -cluster-pwd - Пароль администратора кластера * -v8version - Маска версии платформы 1С 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 f644906..816bff5 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" @@ -18,47 +18,51 @@ Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-db", "Имя информационной базы"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "-db-user", - "Пользователь информационной базы"); - + "-db-user", + "Пользователь информационной базы"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "-db-pwd", - "Пароль пользователя информационной базы"); - + "-db-pwd", + "Пароль пользователя информационной базы"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "-cluster-admin", - "Администратор кластера"); - + "-cluster-port", + "Порт кластера"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "-cluster-pwd", - "Пароль администратора кластера"); + "-cluster-admin", + "Администратор кластера"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "-v8version", - "Маска версии платформы 1С"); + "-cluster-pwd", + "Пароль администратора кластера"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "-lockmessage", - "Сообщение блокировки"); - + "-v8version", + "Маска версии платформы 1С"); + + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, + "-lockmessage", + "Сообщение блокировки"); + Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "-lockuccode", - "Ключ разрешения запуска"); + "-lockuccode", + "Ключ разрешения запуска"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "-lockstart", - "Время старта блокировки пользователей, время указываем как '2040-12-31T23:59:59'"); + "-lockstart", + "Время старта блокировки пользователей, время указываем как '2040-12-31T23:59:59'"); Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, - "-lockstartat", - "Время старта блокировки через n сек"); + "-lockstartat", + "Время старта блокировки через n сек"); Парсер.ДобавитьКоманду(ОписаниеКоманды); КонецПроцедуры Функция ВыполнитьКоманду(Знач ПараметрыКоманды) Экспорт - + ПрочитатьПараметры(ПараметрыКоманды); Если Не ПараметрыВведеныКорректно() Тогда @@ -75,7 +79,7 @@ Лог.Ошибка("Неизвестное действие: " + мНастройки.Действие); Возврат МенеджерКомандПриложения.РезультатыКоманд().НеверныеПараметры; КонецЕсли; - + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; КонецФункции @@ -92,6 +96,7 @@ мНастройки.Вставить("ИмяБазыДанных", ПараметрыКоманды["-db"]); мНастройки.Вставить("АдминистраторИБ", ПараметрыКоманды["-db-user"]); мНастройки.Вставить("ПарольАдминистратораИБ", ПараметрыКоманды["-db-pwd"]); + мНастройки.Вставить("ПортКластера", ПараметрыКоманды["-cluster-port"]); мНастройки.Вставить("АдминистраторКластера", ПараметрыКоманды["-cluster-admin"]); мНастройки.Вставить("ПарольАдминистратораКластера", ПараметрыКоманды["-cluster-pwd"]); мНастройки.Вставить("ИспользуемаяВерсияПлатформы", ПараметрыКоманды["-v8version"]); @@ -154,7 +159,7 @@ Приостановить(10000); ОтключитьСоединенияСРабочимиПроцессами(); КонецЕсли; - + КонецПроцедуры Процедура УстановитьСтатусБлокировкиСеансов(Знач Блокировать) @@ -177,15 +182,15 @@ КонецЕсли; КомандаВыполнения = СтрокаЗапускаКлиента() + СтрШаблон("infobase update --infobase=""%3""%4 --cluster=""%1""%2 --sessions-deny=%5 --denied-message=""%6"" --denied-from=""%8"" --permission-code=""%7""", - ИдентификаторКластера, - КлючиАвторизацииВКластере(), - ИдентификаторБазы, - КлючиАвторизацииВБазе, - ?(Блокировать, "on", "off"), - мНастройки.СообщениеОблокировке, - КлючРазрешенияЗапуска, - ВремяБлокировки); - + ИдентификаторКластера, + КлючиАвторизацииВКластере(), + ИдентификаторБазы, + КлючиАвторизацииВБазе, + ?(Блокировать, "on", "off"), + мНастройки.СообщениеОблокировке, + КлючРазрешенияЗапуска, + ВремяБлокировки); + ЗапуститьПроцесс(КомандаВыполнения); Лог.Информация("Сеансы " + ?(Блокировать, "запрещены", "разрешены")); @@ -208,16 +213,35 @@ Функция ИдентификаторКластера() - + Если мИдентификаторКластера = Неопределено Тогда Лог.Информация("Получаю список кластеров"); - КомандаВыполнения = СтрокаЗапускаКлиента() + "cluster list"; - - СписокКластеров = ЗапуститьПроцесс(КомандаВыполнения); - - УИДКластера = Сред(СписокКластеров,(Найти(СписокКластеров,":")+1),Найти(СписокКластеров,"host")-Найти(СписокКластеров,":")-1); - мИдентификаторКластера = СокрЛП(СтрЗаменить(УИДКластера,Символы.ПС,"")); + КомандаВыполнения = СтрокаЗапускаКлиента() + "cluster list"; + + СписокКластеров = ЗапуститьПроцесс(КомандаВыполнения); + + УИДКластера = Сред(СписокКластеров,(Найти(СписокКластеров,":")+1),Найти(СписокКластеров,"host")-Найти(СписокКластеров,":")-1); + Если ЗначениеЗаполнено(мНастройки.ПортКластера) Тогда + ВремСписокКластеров = СписокКластеров; + Пока Найти(ВремСписокКластеров,"cluster") Цикл + + ВремСписокКластеров = Сред(ВремСписокКластеров,Найти(ВремСписокКластеров,"cluster")+7 ); + cluster = СокрЛП(СтрЗаменить(Сред(ВремСписокКластеров,(Найти(ВремСписокКластеров,":")+1),Найти(ВремСписокКластеров,"host")-Найти(ВремСписокКластеров,":")-1),Символы.ПС,"")); + ВремСписокКластеров = Сред(ВремСписокКластеров, (Найти(ВремСписокКластеров,":")+1)+ СтрДлина(cluster)); + + ВремСписокКластеров = Сред(ВремСписокКластеров,Найти(ВремСписокКластеров,"port")+4); + port = СокрЛП(СтрЗаменить(Сред(ВремСписокКластеров,(Найти(ВремСписокКластеров,":")+1),Найти(ВремСписокКластеров,"name")-Найти(ВремСписокКластеров,":")-1),Символы.ПС,"")); + ВремСписокКластеров = Сред(ВремСписокКластеров, (Найти(ВремСписокКластеров,":")+1)+ СтрДлина(port)); + + Если port = мНастройки.ПортКластера Тогда + УИДКластера = cluster; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + мИдентификаторКластера = СокрЛП(СтрЗаменить(УИДКластера,Символы.ПС,"")); КонецЕсли; @@ -226,7 +250,7 @@ КонецЕсли; Возврат мИдентификаторКластера; - + КонецФункции Функция ИдентификаторБазы() @@ -240,9 +264,9 @@ Функция НайтиБазуВКластере() КомандаВыполнения = СтрокаЗапускаКлиента() + СтрШаблон("infobase summary list --cluster=""%1""%2", - ИдентификаторКластера(), - КлючиАвторизацииВКластере()); - + ИдентификаторКластера(), + КлючиАвторизацииВКластере()); + Лог.Информация("Получаю список баз кластера"); СписокБазВКластере = ЗапуститьПроцесс(КомандаВыполнения); @@ -255,12 +279,12 @@ Если Найти(СтрокаРазбора,"infobase")>0 Тогда УИДИБ = СокрЛП(Сред(СтрокаРазбора,ПозицияРазделителя+1)); ИначеЕсли Найти(СтрокаРазбора,"name")>0 Тогда - ИмяБазы = СокрЛП(Сред(СтрокаРазбора,ПозицияРазделителя+1)); - Если Нрег(ИмяБазы) = НРег(мНастройки.ИмяБазыДанных) Тогда + ИмяБазы = СокрЛП(Сред(СтрокаРазбора,ПозицияРазделителя+1)); + Если Нрег(ИмяБазы) = НРег(мНастройки.ИмяБазыДанных) Тогда Лог.Информация("Получен УИД базы"); НайденаБазаВКластере = Истина; Прервать; - КонецЕсли; + КонецЕсли; КонецЕсли; КонецЦикла; @@ -293,7 +317,7 @@ КонецЕсли; Возврат ПутьКлиентаАдминистрирования + " " + - мНастройки.АдресСервераАдминистрирования + " "; + мНастройки.АдресСервераАдминистрирования + " "; КонецФункции Функция ЗапуститьПроцесс(Знач СтрокаВыполнения) @@ -335,11 +359,11 @@ ВызватьИсключение "Сообщение от RAS/RAC |" + Процесс.ПотокОшибок.Прочитать(); КонецЕсли; - + КонецФункции Процедура ОтключитьСуществующиеСеансы() - + Лог.Информация("Отключаю существующие сеансы"); СеансыБазы = ПолучитьСписокСеансов(); @@ -362,9 +386,9 @@ ТаблицаСеансов.Колонки.Добавить("НомерСеанса"); КомандаЗапуска = СтрокаЗапускаКлиента() + СтрШаблон("session list --cluster=""%1""%2 --infobase=""%3""", - ИдентификаторКластера(), - КлючиАвторизацииВКластере(), - ИдентификаторБазы()); + ИдентификаторКластера(), + КлючиАвторизацииВКластере(), + ИдентификаторБазы()); СписокСеансовИБ = ЗапуститьПроцесс(КомандаЗапуска); @@ -377,7 +401,7 @@ ТекСтрока.Пользователь = Элемент["user-name"]; ТекСтрока.Приложение = Элемент["app-id"]; ТекСтрока.НомерСеанса = Элемент["session-id"]; - + КонецЦикла; Возврат ТаблицаСеансов; @@ -385,16 +409,16 @@ КонецФункции Процедура ОтключитьСеанс(Знач Сеанс) - + СтрокаВыполнения = СтрокаЗапускаКлиента() + СтрШаблон("session terminate --cluster=""%1""%2 --session=""%3""", - ИдентификаторКластера(), - КлючиАвторизацииВКластере(), - Сеанс.Идентификатор); + ИдентификаторКластера(), + КлючиАвторизацииВКластере(), + Сеанс.Идентификатор); Лог.Информация(СтрШаблон("Отключаю сеанс: %1 [%2] (%3)", Сеанс.НомерСеанса, Сеанс.Пользователь, Сеанс.Приложение)); ЗапуститьПроцесс(СтрокаВыполнения); - + КонецПроцедуры Функция ОтключитьСоединенияСРабочимиПроцессами() @@ -423,9 +447,9 @@ Функция ПолучитьСписокРабочихПроцессов() КомандаЗапускаПроцессы = СтрокаЗапускаКлиента() + СтрШаблон("process list --cluster=""%1""%2", - ИдентификаторКластера(), - КлючиАвторизацииВКластере()); - + ИдентификаторКластера(), + КлючиАвторизацииВКластере()); + Лог.Информация("Получаю список рабочих процессов..."); СписокПроцессов = ВыполнитьКоманду(КомандаЗапускаПроцессы); @@ -436,12 +460,12 @@ Функция ПолучитьСоединенияРабочегоПроцесса(Знач РабочийПроцесс) КомандаЗапускаСоединения = СтрокаЗапускаКлиента() + СтрШаблон("connection list --cluster=""%1""%2 --infobase=%3%4 --process=%5", - ИдентификаторКластера(), - КлючиАвторизацииВКластере(), - ИдентификаторБазы(), - КлючиАвторизацииВБазе(), - РабочийПроцесс["process"]); - + ИдентификаторКластера(), + КлючиАвторизацииВКластере(), + ИдентификаторБазы(), + КлючиАвторизацииВБазе(), + РабочийПроцесс["process"]); + Лог.Информация("Получаю список соединений..."); Возврат РазобратьПоток(ВыполнитьКоманду(КомандаЗапускаСоединения)); @@ -450,18 +474,18 @@ Функция РазорватьСоединениеСПроцессом(Знач РабочийПроцесс, Знач Соединение) КомандаРазрывСоединения = СтрокаЗапускаКлиента() + СтрШаблон("connection disconnect --cluster=""%1""%2 --infobase=%3%4 --process=%5 --connection=%6", - ИдентификаторКластера(), - КлючиАвторизацииВКластере(), - ИдентификаторБазы(), - КлючиАвторизацииВБазе(), - РабочийПроцесс["process"], - Соединение["connection"]); + ИдентификаторКластера(), + КлючиАвторизацииВКластере(), + ИдентификаторБазы(), + КлючиАвторизацииВБазе(), + РабочийПроцесс["process"], + Соединение["connection"]); Сообщение = СтрШаблон("Отключаю соединение %1 [%2] (%3)", - Соединение["conn-id"], - Соединение["app-id"], - Соединение["user-name"]); - + Соединение["conn-id"], + Соединение["app-id"], + Соединение["user-name"]); + Лог.Информация(Сообщение); Возврат ВыполнитьКоманду(КомандаРазрывСоединения); @@ -483,7 +507,7 @@ Если ТекущийОбъект <> Неопределено и ТекущийОбъект.Количество() = 0 Тогда Продолжить; // очередная пустая строка подряд КонецЕсли; - + ТекущийОбъект = Новый Соответствие; СписокОбъектов.Добавить(ТекущийОбъект); КонецЕсли; @@ -535,7 +559,7 @@ КонецЕсли; Возврат ТекущийПуть; - + КонецФункции Функция РазобратьНаКлючИЗначение(Знач СтрокаРазбора, Ключ, Значение) -- GitLab