Skip to content

Commit

Permalink
feat: Добавлена работа с ограничениями потребления ресурсов.
Browse files Browse the repository at this point in the history
  • Loading branch information
arkuznetsov committed Sep 27, 2019
1 parent 6ae71d5 commit 7a858e1
Show file tree
Hide file tree
Showing 9 changed files with 643 additions and 7 deletions.
2 changes: 2 additions & 0 deletions lib.config
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
<class name="ПрофильБезопасности" file="src/Классы/ПрофильБезопасности.os"/>
<class name="СчетчикиРесурсов" file="src/Классы/СчетчикиРесурсов.os"/>
<class name="СчетчикРесурсов" file="src/Классы/СчетчикРесурсов.os"/>
<class name="ОграниченияРесурсов" file="src/Классы/ОграниченияРесурсов.os"/>
<class name="ОграничениеРесурсов" file="src/Классы/ОграничениеРесурсов.os"/>
<class name="ОбъектыПрофиля" file="src/Классы/ОбъектыПрофиля.os"/>
<class name="ИсполнительКоманд" file="src/Классы/ИсполнительКоманд.os"/>
<module name="Служебный" file="src/Модули/Служебный.os"/>
Expand Down
2 changes: 2 additions & 0 deletions src/lib.config
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
<class name="ПрофильБезопасности" file="Классы/ПрофильБезопасности.os"/>
<class name="СчетчикиРесурсов" file="Классы/СчетчикиРесурсов.os"/>
<class name="СчетчикРесурсов" file="Классы/СчетчикРесурсов.os"/>
<class name="ОграниченияРесурсов" file="Классы/ОграниченияРесурсов.os"/>
<class name="ОграничениеРесурсов" file="Классы/ОграничениеРесурсов.os"/>
<class name="ОбъектыПрофиля" file="Классы/ОбъектыПрофиля.os"/>
<class name="ИсполнительКоманд" file="Классы/ИсполнительКоманд.os"/>
<module name="Служебный" file="Модули/Служебный.os"/>
Expand Down
13 changes: 13 additions & 0 deletions src/Классы/Кластер.os
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
Перем Кластер_ИБ;
Перем Кластер_Профили;
Перем Кластер_Счетчики;
Перем Кластер_Ограничения;

Перем ПараметрыОбъекта;

Expand Down Expand Up @@ -80,6 +81,7 @@
Кластер_Блокировки = Новый Блокировки(Кластер_Агент, ЭтотОбъект);
Кластер_Профили = Новый ПрофилиБезопасности(Кластер_Агент, ЭтотОбъект);
Кластер_Счетчики = Новый СчетчикиРесурсов(Кластер_Агент, ЭтотОбъект);
Кластер_Ограничения = Новый ОграниченияРесурсов(Кластер_Агент, ЭтотОбъект);

Кластер_Свойства = Неопределено;

Expand Down Expand Up @@ -407,6 +409,17 @@

КонецФункции // СчетчикиРесурсов()

// Функция возвращает список ограничений ресурсов кластера 1С
//
// Возвращаемое значение:
// ОграниченияРесурсов - список ограничений ресурсов кластера 1С
//
Функция ОграниченияРесурсов() Экспорт

Возврат Кластер_Ограничения;

КонецФункции // ОграниченияРесурсов()

// Функция возвращает значение параметра кластера 1С
//
// Параметры:
Expand Down
226 changes: 226 additions & 0 deletions src/Классы/ОграничениеРесурсов.os
Original file line number Diff line number Diff line change
@@ -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",
Имя(),
КодВозврата,
Кластер_Агент.ВыводКоманды(Ложь));
КонецЕсли;

Лог.Отладка(Кластер_Агент.ВыводКоманды(Ложь));

ОбновитьДанные(Истина);

КонецПроцедуры // Удалить()
Loading

0 comments on commit 7a858e1

Please sign in to comment.