From 7a858e144f5d647a218c50ad05f3b5cae658356b Mon Sep 17 00:00:00 2001 From: AKuznetsov Date: Fri, 27 Sep 2019 17:50:59 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D1=81=20=D0=BE=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=D0=BC=D0=B8=20=D0=BF=D0=BE=D1=82=D1=80=D0=B5=D0=B1?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=80=D0=B5=D1=81=D1=83=D1=80?= =?UTF-8?q?=D1=81=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib.config | 2 + src/lib.config | 2 + ...20\260\321\201\321\202\320\265\321\200.os" | 13 + ...21\203\321\200\321\201\320\276\320\262.os" | 226 +++++++++++++++++ ...21\203\321\200\321\201\320\276\320\262.os" | 232 ++++++++++++++++++ ...\201\321\202\320\265\321\200\320\260.json" | 43 +++- ...1\203\321\200\321\201\320\276\320\262.txt" | 17 ++ ...20\262\320\260\320\275\320\270\321\217.os" | 51 ++++ tests/irac-test.os | 64 ++++- 9 files changed, 643 insertions(+), 7 deletions(-) create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\320\265\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.os" create mode 100644 "tests/fixtures/\320\234\320\260\320\272\320\265\321\202_\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.txt" diff --git a/lib.config b/lib.config index 815c513..f7eba4d 100644 --- a/lib.config +++ b/lib.config @@ -27,6 +27,8 @@ + + diff --git a/src/lib.config b/src/lib.config index 7b0257a..61884c2 100644 --- a/src/lib.config +++ b/src/lib.config @@ -27,6 +27,8 @@ + + diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\202\320\265\321\200.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\202\320\265\321\200.os" index 08a233e..d41088a 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\202\320\265\321\200.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\202\320\265\321\200.os" @@ -26,6 +26,7 @@ Перем Кластер_ИБ; Перем Кластер_Профили; Перем Кластер_Счетчики; +Перем Кластер_Ограничения; Перем ПараметрыОбъекта; @@ -80,6 +81,7 @@ Кластер_Блокировки = Новый Блокировки(Кластер_Агент, ЭтотОбъект); Кластер_Профили = Новый ПрофилиБезопасности(Кластер_Агент, ЭтотОбъект); Кластер_Счетчики = Новый СчетчикиРесурсов(Кластер_Агент, ЭтотОбъект); + Кластер_Ограничения = Новый ОграниченияРесурсов(Кластер_Агент, ЭтотОбъект); Кластер_Свойства = Неопределено; @@ -407,6 +409,17 @@ КонецФункции // СчетчикиРесурсов() +// Функция возвращает список ограничений ресурсов кластера 1С +// +// Возвращаемое значение: +// ОграниченияРесурсов - список ограничений ресурсов кластера 1С +// +Функция ОграниченияРесурсов() Экспорт + + Возврат Кластер_Ограничения; + +КонецФункции // ОграниченияРесурсов() + // Функция возвращает значение параметра кластера 1С // // Параметры: diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\320\265\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\320\265\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.os" new file mode 100644 index 0000000..ed7fd8b --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\320\265\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.os" @@ -0,0 +1,226 @@ +// ---------------------------------------------------------- +// This Source Code Form is subject to the terms of the +// Mozilla Public License, v.2.0. If a copy of the MPL +// was not distributed with this file, You can obtain one +// at http://mozilla.org/MPL/2.0/. +// ---------------------------------------------------------- +// Codebase: https://github.com/ArKuznetsov/irac/ +// ---------------------------------------------------------- + +Перем Ограничение_Имя; +Перем Ограничение_Свойства; +Перем Ограничение_ДлительностьСбора; +Перем Ограничение_Значения; + +Перем Кластер_Агент; +Перем Кластер_Владелец; + +Перем ПараметрыОбъекта; + +Перем ПериодОбновления; +Перем МоментАктуальности; + +Перем Лог; + +// Конструктор +// +// Параметры: +// АгентКластера - АгентКластера - ссылка на родительский объект агента кластера +// Кластер - Кластер - ссылка на родительский объект кластера +// Ограничение - Строка, Соответствие - имя ограничения потребления ресурсов в кластере 1С +// или параметры ограничения потребления ресурсов +// +Процедура ПриСозданииОбъекта(АгентКластера, Кластер, Ограничение) + + Лог = Служебный.Лог(); + + Если НЕ ЗначениеЗаполнено(Ограничение) Тогда + Возврат; + КонецЕсли; + + ПараметрыОбъекта = Новый КомандыОбъекта(Перечисления.РежимыАдминистрирования.ОграниченияРесурсов); + + Кластер_Агент = АгентКластера; + Кластер_Владелец = Кластер; + + Если ТипЗнч(Ограничение) = Тип("Соответствие") Тогда + Ограничение_Имя = Ограничение["name"]; + Служебный.ЗаполнитьСвойстваОбъекта(ЭтотОбъект, Ограничение_Свойства, Ограничение); + МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Иначе + Ограничение_Имя = Ограничение; + МоментАктуальности = 0; + КонецЕсли; + + ПериодОбновления = 60000; + + Ограничение_Значения = Новый ОбъектыКластера(ЭтотОбъект); + +КонецПроцедуры // ПриСозданииОбъекта() + +// Процедура получает данные от сервиса администрирования кластера 1С +// и сохраняет в локальных переменных +// +// Параметры: +// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) +// - Ложь - данные будут получены если истекло время актуальности +// или данные не были получены ранее +// +Процедура ОбновитьДанные(ОбновитьПринудительно = Ложь) Экспорт + + Если НЕ Служебный.ТребуетсяОбновление(Ограничение_Свойства, + МоментАктуальности, ПериодОбновления, ОбновитьПринудительно) Тогда + Возврат; + КонецЕсли; + + ПараметрыКоманды = Новый Соответствие(); + ПараметрыКоманды.Вставить("СтрокаПодключенияАгента" , Кластер_Агент.СтрокаПодключения()); + ПараметрыКоманды.Вставить("ИдентификаторКластера" , Кластер_Владелец.Ид()); + ПараметрыКоманды.Вставить("СтрокаАвторизацииКластера", Кластер_Владелец.СтрокаАвторизации()); + + ПараметрыКоманды.Вставить("ИмяОграничения", Имя()); + + ПараметрыОбъекта.УстановитьЗначенияПараметровКоманд(ПараметрыКоманды); + + КодВозврата = Кластер_Агент.ВыполнитьКоманду(ПараметрыОбъекта.ПараметрыКоманды("Описание")); + + Если НЕ КодВозврата = 0 Тогда + ВызватьИсключение СтрШаблон("Ошибка получения описания ограничения потребления ресурсов ""%1"", КодВозврата = %2: %3", + Имя(), + КодВозврата, + Кластер_Агент.ВыводКоманды(Ложь)); + КонецЕсли; + + МассивРезультатов = Кластер_Агент.ВыводКоманды(); + + Служебный.ЗаполнитьСвойстваОбъекта(ЭтотОбъект, Ограничение_Свойства, МассивРезультатов[0]); + + МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах(); + +КонецПроцедуры // ОбновитьДанные() + +// Функция возвращает коллекцию параметров объекта +// +// Параметры: +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия +// +// Возвращаемое значение: +// Соответствие - коллекция параметров объекта, для получения/изменения значений +// +Функция ПараметрыОбъекта(ИмяПоляКлюча = "Имя") Экспорт + + Возврат ПараметрыОбъекта.ОписаниеСвойств(ИмяПоляКлюча); + +КонецФункции // ПараметрыОбъекта() + +// Функция возвращает имя ограничения потребления ресурсов +// +// Возвращаемое значение: +// Строка - имя ограничения потребления ресурсов +// +Функция Имя() Экспорт + + Возврат Ограничение_Имя; + +КонецФункции // Имя() + +// Функция возвращает значение параметра ограничения потребления ресурсов кластера 1С +// +// Параметры: +// ИмяПоля - Строка - Имя параметра кластера +// ОбновитьПринудительно - Булево - Истина - обновить список (вызов RAC) +// +// Возвращаемое значение: +// Произвольный - значение параметра ограничения потребления ресурсов кластера 1С +// +Функция Получить(ИмяПоля, ОбновитьПринудительно = Ложь) Экспорт + + ОбновитьДанные(ОбновитьПринудительно); + + Если НЕ Найти(ВРЕг("Имя, name"), ВРег(ИмяПоля)) = 0 Тогда + Возврат Ограничение_Имя; + КонецЕсли; + + ЗначениеПоля = Ограничение_Свойства.Получить(ИмяПоля); + + Если ЗначениеПоля = Неопределено Тогда + + ОписаниеПараметра = ПараметрыОбъекта("ИмяРАК").Получить(ИмяПоля); + + Если НЕ ОписаниеПараметра = Неопределено Тогда + ЗначениеПоля = Ограничение_Свойства.Получить(ОписаниеПараметра["Имя"]); + КонецЕсли; + КонецЕсли; + + Возврат ЗначениеПоля; + +КонецФункции // Получить() + +// Процедура изменяет параметры ограничения потребления ресурсов +// +// Параметры: +// ПараметрыОграничения - Структура - новые параметры ограничения потребления ресурсов +// +Процедура Изменить(Знач ПараметрыОграничения = Неопределено) Экспорт + + Если НЕ ТипЗнч(ПараметрыОграничения) = Тип("Соответствие") Тогда + ПараметрыОграничения = Новый Соответствие(); + КонецЕсли; + + ПараметрыКоманды = Новый Соответствие(); + ПараметрыКоманды.Вставить("СтрокаПодключенияАгента" , Кластер_Агент.СтрокаПодключения()); + ПараметрыКоманды.Вставить("СтрокаАвторизацииКластера", Кластер_Владелец.СтрокаАвторизации()); + ПараметрыКоманды.Вставить("ИдентификаторКластера" , Кластер_Владелец.Ид()); + + ПараметрыКоманды.Вставить("ИмяОграничения" , Имя()); + + Для Каждого ТекЭлемент Из ПараметрыОграничения Цикл + ПараметрыКоманды.Вставить(ТекЭлемент.Ключ, ТекЭлемент.Значение); + КонецЦикла; + + ПараметрыОбъекта.УстановитьЗначенияПараметровКоманд(ПараметрыКоманды); + + КодВозврата = Кластер_Агент.ВыполнитьКоманду(ПараметрыОбъекта.ПараметрыКоманды("Изменить")); + + Если НЕ КодВозврата = 0 Тогда + ВызватьИсключение СтрШаблон("Ошибка изменения параметров ограничения потребления ресурсов, КодВозврата = %1: %2", + Имя(), + Кластер_Агент.ВыводКоманды(Ложь)); + КонецЕсли; + + Лог.Отладка(Кластер_Агент.ВыводКоманды(Ложь)); + ОбновитьДанные(Истина); + +КонецПроцедуры // Изменить() + +// Процедура удаляет ограничение потребления ресурсов из кластера 1С +// +// Параметры: +// Имя - Строка - Имя ограничения потребления ресурсов +// +Процедура Удалить(Имя) Экспорт + + ПараметрыКоманды = Новый Соответствие(); + ПараметрыКоманды.Вставить("СтрокаПодключенияАгента" , Кластер_Агент.СтрокаПодключения()); + ПараметрыКоманды.Вставить("ИдентификаторКластера" , Кластер_Владелец.Ид()); + ПараметрыКоманды.Вставить("СтрокаАвторизацииКластера", Кластер_Владелец.СтрокаАвторизации()); + + ПараметрыКоманды.Вставить("ИмОграничения" , Имя()); + + ПараметрыОбъекта.УстановитьЗначенияПараметровКоманд(ПараметрыКоманды); + + КодВозврата = Кластер_Агент.ВыполнитьКоманду(ПараметрыОбъекта.ПараметрыКоманды("Отключить")); + + Если НЕ КодВозврата = 0 Тогда + ВызватьИсключение СтрШаблон("Ошибка удаления ограничения потребления ресурсов ""%1"", КодВозврата = %2: %3", + Имя(), + КодВозврата, + Кластер_Агент.ВыводКоманды(Ложь)); + КонецЕсли; + + Лог.Отладка(Кластер_Агент.ВыводКоманды(Ложь)); + + ОбновитьДанные(Истина); + +КонецПроцедуры // Удалить() diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.os" new file mode 100644 index 0000000..3e393d9 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.os" @@ -0,0 +1,232 @@ +// ---------------------------------------------------------- +// This Source Code Form is subject to the terms of the +// Mozilla Public License, v.2.0. If a copy of the MPL +// was not distributed with this file, You can obtain one +// at http://mozilla.org/MPL/2.0/. +// ---------------------------------------------------------- +// Codebase: https://github.com/ArKuznetsov/irac/ +// ---------------------------------------------------------- + +Перем Кластер_Агент; +Перем Кластер_Владелец; +Перем ПараметрыОбъекта; +Перем Элементы; + +Перем Лог; + +// Конструктор +// +// Параметры: +// АгентКластера - АгентКластера - ссылка на родительский объект агента кластера +// Кластер - Кластер - ссылка на родительский объект кластера +// +Процедура ПриСозданииОбъекта(АгентКластера, Кластер) + + Лог = Служебный.Лог(); + + Кластер_Агент = АгентКластера; + Кластер_Владелец = Кластер; + + ПараметрыОбъекта = Новый КомандыОбъекта(Перечисления.РежимыАдминистрирования.ОграниченияРесурсов); + + Элементы = Новый ОбъектыКластера(ЭтотОбъект); + +КонецПроцедуры // ПриСозданииОбъекта() + +// Процедура получает данные от сервиса администрирования кластера 1С +// и сохраняет в локальных переменных +// +// Параметры: +// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) +// - Ложь - данные будут получены если истекло время актуальности +// или данные не были получены ранее +// +Процедура ОбновитьДанные(ОбновитьПринудительно = Ложь) Экспорт + + Если НЕ Элементы.ТребуетсяОбновление(ОбновитьПринудительно) Тогда + Возврат; + КонецЕсли; + + ПараметрыКоманды = Новый Соответствие(); + ПараметрыКоманды.Вставить("СтрокаПодключенияАгента" , Кластер_Агент.СтрокаПодключения()); + ПараметрыКоманды.Вставить("ИдентификаторКластера" , Кластер_Владелец.Ид()); + ПараметрыКоманды.Вставить("СтрокаАвторизацииКластера", Кластер_Владелец.СтрокаАвторизации()); + + ПараметрыОбъекта.УстановитьЗначенияПараметровКоманд(ПараметрыКоманды); + + КодВозврата = Кластер_Агент.ВыполнитьКоманду(ПараметрыОбъекта.ПараметрыКоманды("Список")); + + Если НЕ КодВозврата = 0 Тогда + ВызватьИсключение СтрШаблон("Ошибка получения списка ограничений потребления ресурсов, КодВозврата = %1: %2", + КодВозврата, + Кластер_Агент.ВыводКоманды(Ложь)); + КонецЕсли; + + МассивРезультатов = Кластер_Агент.ВыводКоманды(); + + МассивОграничений = Новый Массив(); + Для Каждого ТекОписание Из МассивРезультатов Цикл + МассивОграничений.Добавить(Новый ОграничениеРесурсов(Кластер_Агент, Кластер_Владелец, ТекОписание)); + КонецЦикла; + + Элементы.Заполнить(МассивОграничений); + + Элементы.УстановитьАктуальность(); + +КонецПроцедуры // ОбновитьДанные() + +// Функция возвращает коллекцию параметров объекта +// +// Параметры: +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия +// +// Возвращаемое значение: +// Соответствие - коллекция параметров объекта, для получения/изменения значений +// +Функция ПараметрыОбъекта(ИмяПоляКлюча = "Имя") Экспорт + + Возврат ПараметрыОбъекта.ОписаниеСвойств(ИмяПоляКлюча); + +КонецФункции // ПараметрыОбъекта() + +// Функция возвращает список ограничений потребления ресурсов кластера 1С +// +// Параметры: +// Отбор - Структура - Структура отбора ограничений потребления ресурсов (<поле>:<значение>) +// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) +// ЭлементыКакСоответствия - Булево - Истина - элементы результата будут преобразованы в соответствия +// +// Возвращаемое значение: +// Массив - список ограничений потребления ресурсов кластера 1С +// +Функция Список(Отбор = Неопределено, ОбновитьПринудительно = Ложь, ЭлементыКакСоответствия = Ложь) Экспорт + + СписокОграничений = Элементы.Список(Отбор, ОбновитьПринудительно, ЭлементыКакСоответствия); + + Возврат СписокОграничений; + +КонецФункции // Список() + +// Функция возвращает ограничений потребления ресурсов кластера 1С +// +// Параметры: +// ПоляИерархии - Строка - Поля для построения иерархии списка ограничений потребления ресурсов, +// разделенные "," +// ОбновитьПринудительно - Булево - Истина - обновить список (вызов RAC) +// ЭлементыКакСоответствия - Булево - Истина - элементы результата будут преобразованы в соответствия +// +// Возвращаемое значение: +// Соответствие - список ограничений потребления ресурсов кластера 1С +// <имя поля объекта> - Массив(Соответствие), Соответствие - список ограничений потребления ресурсов +// или следующий уровень +// +Функция ИерархическийСписок(Знач ПоляИерархии, ОбновитьПринудительно = Ложь, ЭлементыКакСоответствия = Ложь) Экспорт + + СписокОграничений = Элементы.ИерархическийСписок(ПоляИерархии, ОбновитьПринудительно, ЭлементыКакСоответствия); + + Возврат СписокОграничений; + +КонецФункции // ИерархическийСписок() + +// Функция возвращает количество ограничений потребления ресурсов в списке +// +// Возвращаемое значение: +// Число - количество ограничений потребления ресурсов +// +Функция Количество() Экспорт + + Если Элементы = Неопределено Тогда + Возврат 0; + КонецЕсли; + + Возврат Элементы.Количество(); + +КонецФункции // Количество() + +// Функция возвращает описание ограничения потребления ресурсов кластера 1С +// +// Параметры: +// Имя - Строка - Имя ограничения потребления ресурсов +// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) +// КакСоответствие - Булево - Истина - результат будет преобразован в соответствие +// +// Возвращаемое значение: +// Соответствие - описание ограничения потребления ресурсов кластера 1С +// +Функция Получить(Знач Имя, Знач ОбновитьПринудительно = Ложь, КакСоответствие = Ложь) Экспорт + + ОбновитьДанные(ОбновитьПринудительно); + + Отбор = Новый Соответствие(); + Отбор.Вставить("name", Имя); + + Списокограничений = Элементы.Список(Отбор, ОбновитьПринудительно, КакСоответствие); + + Если Списокограничений.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат Списокограничений[0]; + +КонецФункции // Получить() + +// Процедура добавляет новый ограничение потребления ресурсов в кластер 1С +// +// Параметры: +// Имя - Строка - имя ограничения потребления ресурсов 1С +// ПараметрыОграничения - Структура - параметры ограничения потребления ресурсов 1С +// +Процедура Добавить(Имя, ПараметрыОграничения = Неопределено) Экспорт + + Если НЕ ТипЗнч(ПараметрыОграничения) = Тип("Структура") Тогда + ПараметрыОграничения = Новый Структура(); + КонецЕсли; + + ПараметрыКоманды = Новый Соответствие(); + ПараметрыКоманды.Вставить("СтрокаПодключенияАгента" , Кластер_Агент.СтрокаПодключения()); + ПараметрыКоманды.Вставить("ИдентификаторКластера" , Кластер_Владелец.Ид()); + ПараметрыКоманды.Вставить("СтрокаАвторизацииКластера", Кластер_Владелец.СтрокаАвторизации()); + + ПараметрыКоманды.Вставить("ИмяОграничения" , Имя); + + Для Каждого ТекЭлемент Из ПараметрыОграничения Цикл + ПараметрыКоманды.Вставить(ТекЭлемент.Ключ, ТекЭлемент.Значение); + КонецЦикла; + + Если ПараметрыКоманды["Действие"] = Неопределено Тогда + ПараметрыКоманды.Вставить("Действие" , "none"); + КонецЕсли; + + ПараметрыОбъекта.УстановитьЗначенияПараметровКоманд(ПараметрыКоманды); + + КодВозврата = Кластер_Агент.ВыполнитьКоманду(ПараметрыОбъекта.ПараметрыКоманды("Изменить")); + + Если НЕ КодВозврата = 0 Тогда + ВызватьИсключение СтрШаблон("Ошибка добавления ограничения потребления ресурсов ""%1"": %2", + Имя, + Кластер_Агент.ВыводКоманды(Ложь)); + КонецЕсли; + + Лог.Отладка(Кластер_Агент.ВыводКоманды(Ложь)); + + ОбновитьДанные(Истина); + +КонецПроцедуры // Добавить() + +// Процедура удаляет ограничение потребления ресурсов +// +// Параметры: +// Имя - Строка - Имя ограничения потребления ресурсов +// +Процедура Удалить(Знач Имя) Экспорт + + Если ТипЗнч(Имя) = Тип("Строка") Тогда + Ограничение = Получить(Имя); + КонецЕсли; + + Ограничение.Удалить(); + + ОбновитьДанные(Истина); + +КонецПроцедуры // Удалить() diff --git "a/src/\320\234\320\260\320\272\320\265\321\202\321\213/\320\242\320\270\320\277\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\232\320\273\320\260\321\201\321\202\320\265\321\200\320\260.json" "b/src/\320\234\320\260\320\272\320\265\321\202\321\213/\320\242\320\270\320\277\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\232\320\273\320\260\321\201\321\202\320\265\321\200\320\260.json" index 766b9b2..dc0fa03 100644 --- "a/src/\320\234\320\260\320\272\320\265\321\202\321\213/\320\242\320\270\320\277\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\232\320\273\320\260\321\201\321\202\320\265\321\200\320\260.json" +++ "b/src/\320\234\320\260\320\272\320\265\321\202\321\213/\320\242\320\270\320\277\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\232\320\273\320\260\321\201\321\202\320\265\321\200\320\260.json" @@ -1950,7 +1950,7 @@ "ДлительностьСбора":{ "ИмяРАК" : "collection-time" }, - "ДлительностьСбораМс":{ + "ДлительностьСерверныхВызовов":{ "ИмяРАК" : "duration" }, "ПроцессорноеВремя":{ @@ -2051,8 +2051,7 @@ "Шаблон" : "--object=%1", "Параметр" : "Отбор" } - ], - "ЗначенияПолей" : true + ] }, "Удалить":{ "ИмяРАК" : "remove", @@ -2082,6 +2081,11 @@ }, "Действие":{ "ИмяРАК" : "action", + "ПоУмолчанию" : "$Перечисления.ДействияОграниченияРесурсов.Нет", + "Использование" : "Чтение, Добавление, Изменение" + }, + "ДлительностьСерверныхВызовов":{ + "ИмяРАК" : "duration", "Использование" : "Чтение, Добавление, Изменение" }, "ПроцессорноеВремя":{ @@ -2140,15 +2144,42 @@ }, "Описание":{ "ИмяРАК" : "info", - "Кластер" : true + "Кластер" : true, + "ПараметрыКоманды" : [ + { + "Шаблон" : "--limit=%1", + "Параметр" : "ИмяОграничения", + "Обязательный" : true + } + ] }, "Изменить":{ "ИмяРАК" : "update", - "Кластер" : true + "Кластер" : true, + "ПараметрыКоманды" : [ + { + "Шаблон" : "--name=%1", + "Параметр" : "ИмяОграничения", + "Обязательный" : true + }, + { + "Шаблон" : "--action=%1", + "Параметр" : "Действие", + "Обязательный" : true + } + ], + "ЗначенияПолей" : true }, "Удалить":{ "ИмяРАК" : "remove", - "Кластер" : true + "Кластер" : true, + "ПараметрыКоманды" : [ + { + "Шаблон" : "--name=%1", + "Параметр" : "ИмяОграничения", + "Обязательный" : true + } + ] } } } diff --git "a/tests/fixtures/\320\234\320\260\320\272\320\265\321\202_\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.txt" "b/tests/fixtures/\320\234\320\260\320\272\320\265\321\202_\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.txt" new file mode 100644 index 0000000..48685ca --- /dev/null +++ "b/tests/fixtures/\320\234\320\260\320\272\320\265\321\202_\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.txt" @@ -0,0 +1,17 @@ +name : ResourceLimit1 +action : none +counter : serverCalls +duration : 10000 +cpu-time : 0 +memory : 640000000 +read : 0 +write : 0 +duration-dbms : 0 +dbms-bytes : 0 +service : 0 +call : 0 +number-of-active-sessions : 0 +number-of-sessions : 0 +error-message : Сработало граничение ресурсов +descr : Тестовое ограничение + diff --git "a/tests/fixtures/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217.os" "b/tests/fixtures/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217.os" index 1836126..979adc2 100644 --- "a/tests/fixtures/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217.os" +++ "b/tests/fixtures/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217.os" @@ -1129,6 +1129,52 @@ КонецФункции // Вывод_СчетчикиРесурсовПараметрыЗначения() +Функция Вывод_ОграниченияРесурсовСписок() + + ПараметрыКоманды = Новый Соответствие(); + ПараметрыКоманды.Вставить("СтрокаПодключенияАгента" , Агент_СтрокаПодключения()); + ПараметрыКоманды.Вставить("ИдентификаторКластера" , Кластер_Ид()); + ПараметрыКоманды.Вставить("СтрокаАвторизацииКластера", Кластер_СтрокаАвторизации()); + + ПараметрыОбъекта = Новый КомандыОбъекта(Перечисления.РежимыАдминистрирования.ОграниченияРесурсов, + ПараметрыКоманды); + + ВыводКоманды = ВозвращаемыеЗначения["ОграниченияРесурсов"]; + + Возврат Новый Структура("ПараметрыКоманды, ВыводКоманды", ПараметрыОбъекта.ПараметрыКоманды("Список"), ВыводКоманды); + +КонецФункции // Вывод_ОграниченияРесурсовСписок() + +Функция Вывод_ОграниченияРесурсовПараметры() + + Результат = Новый Массив(); + + ПараметрыКоманды = Новый Соответствие(); + ПараметрыКоманды.Вставить("СтрокаПодключенияАгента" , Агент_СтрокаПодключения()); + ПараметрыКоманды.Вставить("ИдентификаторКластера" , Кластер_Ид()); + ПараметрыКоманды.Вставить("СтрокаАвторизацииКластера", Кластер_СтрокаАвторизации()); + + Ограничения = РазобратьВыводКоманды(ВозвращаемыеЗначения["ОграниченияРесурсов"]); + + Для Каждого ТекОграничение Из Ограничения Цикл + + ПараметрыКоманды.Вставить("ИмяОграничения", ТекОграничение["name"]); + + ПараметрыОбъекта = Новый КомандыОбъекта(Перечисления.РежимыАдминистрирования.ОграниченияРесурсов, + ПараметрыКоманды); + + ВыводКоманды = ТекОграничение["ТекстОбъекта"]; + + Результат.Добавить(Новый Структура("ПараметрыКоманды, ВыводКоманды", + ПараметрыОбъекта.ПараметрыКоманды("Описание"), + ВыводКоманды)); + + КонецЦикла; + + Возврат Результат; + +КонецФункции // Вывод_ОграниченияРесурсовПараметрыЗначения() + Процедура Инициализация() Лог = Служебный.Лог(); @@ -1252,6 +1298,11 @@ ПараметрыКластера.СчетчикиРесурсов.Значения = Новый Структура("Список", Вывод_СчетчикиРесурсовПараметрыЗначения()); + ПараметрыКластера.Вставить("ОграниченияРесурсов", + Новый Структура("Список, Параметры")); + ПараметрыКластера.ОграниченияРесурсов.Список = Вывод_ОграниченияРесурсовСписок(); + ПараметрыКластера.ОграниченияРесурсов.Параметры = Вывод_ОграниченияРесурсовПараметры(); + КонецПроцедуры // Инициализация() Функция ПрочитатьМакетыОбъектовСервера(Знач ПутьККаталогу) diff --git a/tests/irac-test.os b/tests/irac-test.os index 7abb8d9..d9dd865 100644 --- a/tests/irac-test.os +++ b/tests/irac-test.os @@ -120,6 +120,9 @@ СписокТестов.Добавить("ТестДолжен_ПолучитьПараметрыСчетчиковРесурсов"); СписокТестов.Добавить("ТестДолжен_ПолучитьЗначенияСчетчикаРесурсов"); + СписокТестов.Добавить("ТестДолжен_ПолучитьСписокОграниченийРесурсов"); + СписокТестов.Добавить("ТестДолжен_ПолучитьПараметрыОграниченийРесурсов"); + Возврат СписокТестов; КонецФункции // ПолучитьСписокТестов() @@ -1336,4 +1339,63 @@ 0, "Не удалось получить значения счетчика потребления ресурсов"); -КонецПроцедуры // ТестДолжен_ПолучитьЗначенияСчетчикаРесурсов() \ No newline at end of file +КонецПроцедуры // ТестДолжен_ПолучитьЗначенияСчетчикаРесурсов() + +Процедура ТестДолжен_ПолучитьСписокОграниченийРесурсов() Экспорт + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), "Кластеры.Список"); + + Кластеры = АгентКластера.Кластеры(); + Кластер = Кластеры.Получить(ПараметрыТестирования.Параметры().Кластер_АдресПорт); + + Кластер.УстановитьАдминистратора(ПараметрыТестирования.Параметры().Кластер_Администратор, + ПараметрыТестирования.Параметры().Кластер_Пароль); + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), + "ОграниченияРесурсов.Список"); + + ОграниченияРесурсов = Кластер.ОграниченияРесурсов().Список(); + + Утверждения.ПроверитьБольше(ОграниченияРесурсов.Количество(), + 0, + "Не удалось получить список ограничений потребления ресурсов"); + +КонецПроцедуры // ТестДолжен_ПолучитьСписокОграниченийРесурсов() + +// Процедура - тест +// +Процедура ТестДолжен_ПолучитьПараметрыОграниченийРесурсов() Экспорт + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), "Кластеры.Список"); + + Кластеры = АгентКластера.Кластеры(); + + Кластер = Кластеры.Получить(ПараметрыТестирования.Параметры().Кластер_АдресПорт); + + Кластер.УстановитьАдминистратора(ПараметрыТестирования.Параметры().Кластер_Администратор, + ПараметрыТестирования.Параметры().Кластер_Пароль); + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), + "ОграниченияРесурсов.Список"); + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), + "ОграниченияРесурсов.Параметры"); + + ОграниченияРесурсов = Кластер.ОграниченияРесурсов(); + + Ограничение = ОграниченияРесурсов.Получить("ResourceLimit1"); + + ИмяОграничения = Ограничение.Получить("Имя"); + ДлительностьСерверныхВызовов = Ограничение.Получить("ДлительностьСерверныхВызовов"); + ПотреблениеПамяти = Ограничение.Получить("ПотреблениеПамяти"); + + Утверждения.ПроверитьРавенство(ИмяОграничения, + "ResourceLimit1", + "Ошибка проверки имени ограничения потребления ресурсов"); + Утверждения.ПроверитьРавенство(ДлительностьСерверныхВызовов, + "10000", + "Ошибка проверки длительности серверных вызовов ограничения потребления ресурсов"); + Утверждения.ПроверитьРавенство(ПотреблениеПамяти, + "640000000", + "Ошибка проверки потребления памяти ограничения потребления ресурсов"); + +КонецПроцедуры // ТестДолжен_ПолучитьПараметрыОграниченийРесурсов()