diff --git a/lib.config b/lib.config index a764183..702695e 100644 --- a/lib.config +++ b/lib.config @@ -23,6 +23,8 @@ + + diff --git a/src/lib.config b/src/lib.config index 17f61b9..e26e1f3 100644 --- a/src/lib.config +++ b/src/lib.config @@ -23,6 +23,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 70237b6..36c89a4 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" @@ -16,6 +16,7 @@ Перем Кластер_Блокировки; Перем Кластер_ИБ; Перем Кластер_Профили; +Перем Кластер_Счетчики; Перем ПараметрыОбъекта; @@ -67,7 +68,8 @@ Кластер_Соединения = Новый Соединения(Кластер_Агент, ЭтотОбъект); Кластер_Блокировки = Новый Блокировки(Кластер_Агент, ЭтотОбъект); Кластер_Профили = Новый ПрофилиБезопасности(Кластер_Агент, ЭтотОбъект); - + Кластер_Счетчики = Новый СчетчикиПотребленияРесурсов(Кластер_Агент, ЭтотОбъект); + Кластер_Параметры = Неопределено; КонецПроцедуры // ПриСозданииОбъекта() @@ -382,7 +384,13 @@ Возврат Кластер_Профили; КонецФункции // ПрофилиБезопасности() + +Функция СчетчикиПотребленияРесурсов() Экспорт + Возврат Кластер_Счетчики; + +КонецФункции // СчетчикиПотребленияРесурсов() + // Функция возвращает значение параметра кластера 1С // // Параметры: 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\320\241\321\207\320\265\321\202\321\207\320\270\320\272\320\270\320\237\320\276\321\202\321\200\320\265\320\261\320\273\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\232\320\273\320\260\321\201\321\202\320\265\321\200\320\241\321\207\320\265\321\202\321\207\320\270\320\272\320\270\320\237\320\276\321\202\321\200\320\265\320\261\320\273\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..d18f5b7 --- /dev/null +++ "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\320\241\321\207\320\265\321\202\321\207\320\270\320\272\320\270\320\237\320\276\321\202\321\200\320\265\320\261\320\273\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,215 @@ +Перем Кластер_Агент; +Перем Кластер_Владелец; +Перем ПараметрыОбъекта; +Перем Элементы; + +Перем Лог; + +// Конструктор +// +// Параметры: +// АгентКластера - АгентКластера - ссылка на родительский объект агента кластера +// Кластер - Кластер - ссылка на родительский объект кластера +// +Процедура ПриСозданииОбъекта(АгентКластера, Кластер) + + Кластер_Агент = АгентКластера; + Кластер_Владелец = Кластер; + + ПараметрыОбъекта = Новый ПараметрыОбъекта("counter"); + + Элементы = Новый ОбъектыКластера(ЭтотОбъект); + +КонецПроцедуры // ПриСозданииОбъекта() + +// Процедура получает данные от сервиса администрирования кластера 1С +// и сохраняет в локальных переменных +// +// Параметры: +// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) +// - Ложь - данные будут получены если истекло время актуальности +// или данные не были получены ранее +// +Процедура ОбновитьДанные(ОбновитьПринудительно = Ложь) Экспорт + + Если НЕ Элементы.ТребуетсяОбновление(ОбновитьПринудительно) Тогда + Возврат; + КонецЕсли; + + ПараметрыЗапуска = Новый Массив(); + ПараметрыЗапуска.Добавить(Кластер_Агент.СтрокаПодключения()); + + ПараметрыЗапуска.Добавить("counter"); + + ПараметрыЗапуска.Добавить(СтрШаблон("--cluster=%1", Кластер_Владелец.Ид())); + ПараметрыЗапуска.Добавить(Кластер_Владелец.СтрокаАвторизации()); + + ПараметрыЗапуска.Добавить("list"); + + Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска); + + МассивРезультатов = Кластер_Агент.ВыводКоманды(); + + МассивСчетчиков = Новый Массив(); + Для Каждого ТекОписание Из МассивРезультатов Цикл + МассивСчетчиков.Добавить(Новый СчетчикПотребленияРесурсов(Кластер_Агент, Кластер_Владелец, ТекОписание)); + КонецЦикла; + + Элементы.Заполнить(МассивСчетчиков); + + Элементы.УстановитьАктуальность(); + +КонецПроцедуры // ОбновитьДанные() + +// Функция возвращает коллекцию параметров объекта +// +// Параметры: +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия +// +// Возвращаемое значение: +// Соответствие - коллекция параметров объекта, для получения/изменения значений +// +Функция ПараметрыОбъекта(ИмяПоляКлюча = "ИмяПараметра") Экспорт + + Возврат ПараметрыОбъекта.Получить(ИмяПоляКлюча); + +КонецФункции // ПараметрыОбъекта() + +// Функция возвращает список счетчиков потребления ресурсов кластера 1С +// +// Параметры: +// Отбор - Структура - Структура отбора счетчиков потребления ресурсов (<поле>:<значение>) +// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) +// +// Возвращаемое значение: +// Массив - список счетчиков потребления ресурсов кластера 1С +// +Функция Список(Отбор = Неопределено, ОбновитьПринудительно = Ложь) Экспорт + + СписокСчетчиков = Элементы.Список(Отбор, ОбновитьПринудительно); + + Возврат СписокСчетчиков; + +КонецФункции // Список() + +// Функция возвращает счетчиков потребления ресурсов кластера 1С +// +// Параметры: +// ПоляИерархии - Строка - Поля для построения иерархии списка счетчиков потребления ресурсов, +// разделенные "," +// ОбновитьПринудительно - Булево - Истина - обновить список (вызов RAC) +// +// Возвращаемое значение: +// Соответствие - список счетчиков потребления ресурсов кластера 1С +// <имя поля объекта> - Массив(Соответствие), Соответствие - список счетчиков потребления ресурсов +// или следующий уровень +// +Функция ИерархическийСписок(Знач ПоляИерархии, ОбновитьПринудительно = Ложь) Экспорт + + СписокСчетчиков = Элементы.ИерархическийСписок(ПоляИерархии, ОбновитьПринудительно); + + Возврат СписокСчетчиков; + +КонецФункции // ИерархическийСписок() + +// Функция возвращает количество счетчиков потребления ресурсов в списке +// +// Возвращаемое значение: +// Число - количество счетчиков потребления ресурсов +// +Функция Количество() Экспорт + + Если Элементы = Неопределено Тогда + Возврат 0; + КонецЕсли; + + Возврат Элементы.Количество(); + +КонецФункции // Количество() + +// Функция возвращает описание счетчика потребления ресурсов кластера 1С +// +// Параметры: +// Имя - Строка - Имя счетчика потребления ресурсов +// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) +// +// Возвращаемое значение: +// Соответствие - описание счетчика потребления ресурсов кластера 1С +// +Функция Получить(Знач Имя, Знач ОбновитьПринудительно = Ложь) Экспорт + + Отбор = Новый Соответствие(); + Отбор.Вставить("name", Имя); + + СписокСчетчиков = Элементы.Список(Отбор, ОбновитьПринудительно); + + Если СписокСчетчиков.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат СписокСчетчиков[0]; + +КонецФункции // Получить() + +// Процедура добавляет новый счетчик потребления ресурсов в кластер 1С +// +// Параметры: +// Имя - Строка - имя счетчика потребления ресурсов 1С +// ПараметрыСчетчика - Структура - параметры счетчика потребления ресурсов 1С +// +Процедура Добавить(Имя, ПараметрыСчетчика = Неопределено) Экспорт + + ПараметрыЗапуска = Новый Массив(); + ПараметрыЗапуска.Добавить(Кластер_Агент.СтрокаПодключения()); + + ПараметрыЗапуска.Добавить("counter"); + ПараметрыЗапуска.Добавить("insert"); + + ПараметрыЗапуска.Добавить(СтрШаблон("--cluster=%1", Кластер_Владелец.Ид())); + ПараметрыЗапуска.Добавить(Кластер_Владелец.СтрокаАвторизации()); + + ПараметрыЗапуска.Добавить(СтрШаблон("--counter=%1", Имя)); + + ВремПараметры = ПараметрыОбъекта(); + + Для Каждого ТекЭлемент Из ВремПараметры Цикл + ЗначениеПараметра = Служебный.ПолучитьЗначениеИзСтруктуры(ПараметрыСчетчика, ТекЭлемент.Ключ, 0); + ПараметрыЗапуска.Добавить(СтрШаблон(ТекЭлемент.Значение.ПараметрКоманды + "=%1", ЗначениеПараметра)); + КонецЦикла; + + Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска); + + Лог.Отладка(Кластер_Агент.ВыводКоманды(Ложь)); + + ОбновитьДанные(Истина); + +КонецПроцедуры // Добавить() + +// Процедура удаляет счетчик потребления ресурсов из кластера 1С +// +// Параметры: +// Имя - Строка - Имя счетчикf потребления ресурсов +// +Процедура Удалить(Имя) Экспорт + + ПараметрыЗапуска = Новый Массив(); + ПараметрыЗапуска.Добавить(Кластер_Агент.СтрокаПодключения()); + + ПараметрыЗапуска.Добавить("counter"); + ПараметрыЗапуска.Добавить("remove"); + + ПараметрыЗапуска.Добавить(СтрШаблон("--сounter=%1", Имя)); + + ПараметрыЗапуска.Добавить(СтрШаблон("--cluster=%1", Кластер_Владелец.Ид())); + ПараметрыЗапуска.Добавить(Кластер_Владелец.СтрокаАвторизации()); + + Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска); + + Лог.Отладка(Кластер_Агент.ВыводКоманды(Ложь)); + + ОбновитьДанные(Истина); + +КонецПроцедуры // Удалить() + +Лог = Логирование.ПолучитьЛог("ktb.lib.irac"); 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\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\260.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\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\260.os" index ec54ebd..7345bf6 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\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\260.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\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\260.os" @@ -829,6 +829,125 @@ #КонецОбласти // ИнформационныеБазы +#Область СчетчикиПотребленияРесурсов + +// Процедура заполняет массив описаний параметров рабочего процесса +// +Процедура Параметры_СчетчикПотребленияРесурсов_Свойства() Экспорт + + ДобавитьОписаниеСвойстваОбъекта("Имя" , "name"); + ДобавитьОписаниеСвойстваОбъекта("ДлительностьСбора" , "collection-time"); + ДобавитьОписаниеСвойстваОбъекта("ДлительностьСбораМс" , "duration"); + ДобавитьОписаниеСвойстваОбъекта("Группировка" , "group"); + ДобавитьОписаниеСвойстваОбъекта("ТипОтбора" , "filter-type"); + ДобавитьОписаниеСвойстваОбъекта("Отбор" , "filter"); + ДобавитьОписаниеСвойстваОбъекта("ПроцессорноеВремя" , "cpu-time"); + ДобавитьОписаниеСвойстваОбъекта("ДлительностьВызововСУБД" , "duration-dbms"); + ДобавитьОписаниеСвойстваОбъекта("ДлительностьВызововСервисов" , "service"); + ДобавитьОписаниеСвойстваОбъекта("ПотреблениеПамяти" , "memory"); + ДобавитьОписаниеСвойстваОбъекта("ОбъемИнформацииСчитаннойСДиска" , "read"); + ДобавитьОписаниеСвойстваОбъекта("ОбъемИнформацииЗаписаннойНаДиск" , "write"); + ДобавитьОписаниеСвойстваОбъекта("ОбъемИнформацииПереданнойСУБД" , "dbms-bytes"); + ДобавитьОписаниеСвойстваОбъекта("КоличествоСерверныхВызовов" , "call"); + ДобавитьОписаниеСвойстваОбъекта("КоличествоАктивныхСеансов" , "number-of-active-sessions"); + ДобавитьОписаниеСвойстваОбъекта("КоличествоСеансов" , "number-of-sessions"); + ДобавитьОписаниеСвойстваОбъекта("Описание" , "descr"); + +КонецПроцедуры // Параметры_СчетчикПотребленияРесурсов_Свойства() + +// Процедура заполняет общие параметры запуска команд счетчиков потребления ресурсов +// +Процедура Параметры_СчетчикПотребленияРесурсов_Общие() + + ПараметрыЗапуска = Новый Массив(); + + ДобавитьПараметрПоИмени("СтрокаПодключенияАгента"); + + ДобавитьПараметрСтроку("counter"); + + ДобавитьПараметрПоШаблону("--cluster=%1", "ИдентификаторКластера"); + ДобавитьПараметрПоИмени("СтрокаАвторизацииКластера"); + +КонецПроцедуры // Параметры_СчетчикПотребленияРесурсов_Общие() + +// Процедура заполняет параметры команды получения списка счетчиков потребления ресурсов +// +Процедура Параметры_СчетчикПотребленияРесурсов_Список() Экспорт + + Параметры_СчетчикПотребленияРесурсов_Общие(); + + ДобавитьПараметрСтроку("list"); + +КонецПроцедуры // Параметры_СчетчикПотребленияРесурсов_Список() + +// Процедура заполняет параметры команды изменения счетчика потребления ресурсов +// +Процедура Параметры_СчетчикПотребленияРесурсов_Изменить() Экспорт + + Параметры_СчетчикПотребленияРесурсов_Общие(); + + ДобавитьПараметрСтроку("update"); + + ДобавитьПараметрПоШаблону("--name=%1", "Имя"); + ДобавитьПараметрПоШаблону("--collection-time=%1", "ДлительностьСбора"); + ДобавитьПараметрПоШаблону("--group=%1", "Группировка"); + ДобавитьПараметрПоШаблону("--filter-type=%1", "ТипОтбора"); + ДобавитьПараметрПоШаблону("--filter=%1", "Отбор"); + ДобавитьПараметрПоШаблону("--duration=%1", "ДлительностьСбораМс"); + ДобавитьПараметрПоШаблону("--cpu-time=%1", "ПроцессорноеВремя"); + ДобавитьПараметрПоШаблону("--memory=%1", "ПотреблениеПамяти"); + ДобавитьПараметрПоШаблону("--read=%1", "ОбъемИнформацииСчитаннойСДиска"); + ДобавитьПараметрПоШаблону("--write=%1", "ОбъемИнформацииЗаписаннойНаДиск"); + ДобавитьПараметрПоШаблону("--duration-dbms=%1", "ДлительностьВызововСУБД"); + ДобавитьПараметрПоШаблону("--dbms-bytes=%1", "ОбъемИнформацииПереданнойСУБД"); + ДобавитьПараметрПоШаблону("--service=%1", "ДлительностьВызововСервисов"); + ДобавитьПараметрПоШаблону("--call=%1", "КоличествоСерверныхВызовов"); + ДобавитьПараметрПоШаблону("--number-of-active-sessions=%1", "КоличествоАктивныхСеансов"); + ДобавитьПараметрПоШаблону("--number-of-sessions=%1", "КоличествоСеансов"); + ДобавитьПараметрПоШаблону("--descr=%1", "Описание"); + + ДобавитьПрочиеПараметрыКоманды("Изменение"); + +КонецПроцедуры // Параметры_СчетчикПотребленияРесурсов_Изменить() + +// Процедура заполняет параметры команды получения описания счетчика потребления ресурсов +// +Процедура Параметры_СчетчикПотребленияРесурсов_Описание() Экспорт + + Параметры_СчетчикПотребленияРесурсов_Общие(); + + ДобавитьПараметрСтроку("info"); + ДобавитьПараметрПоШаблону("--counter=%1", "ИмяСчетчика"); + +КонецПроцедуры // Параметры_СчетчикПотребленияРесурсов_Описание() + +// Процедура заполняет параметры команды удаления сервера +// +Процедура Параметры_СчетчикПотребленияРесурсов_Значения() Экспорт + + Параметры_СчетчикПотребленияРесурсов_Общие(); + + ДобавитьПараметрСтроку("values"); + + ДобавитьПараметрПоШаблону("--counter=%1", "ИмяСчетчика"); + ДобавитьПараметрПоШаблону("--object=%1", "Отбор"); + +КонецПроцедуры // Параметры_СчетчикПотребленияРесурсов_Значения() + +// Процедура заполняет параметры команды удаления счетчика потребления ресурсов +// +Процедура Параметры_СчетчикПотребленияРесурсов_Удалить() Экспорт + + Параметры_СчетчикПотребленияРесурсов_Общие(); + + ДобавитьПараметрСтроку("remove"); + + ДобавитьПараметрПоШаблону("--name=%1", "ИмяСчетчика"); + +КонецПроцедуры // Параметры_СчетчикПотребленияРесурсов_Удалить() + +#КонецОбласти // СчетчикиПотребленияРесурсов + #КонецОбласти // ПроцедурыЗаполненияПараметровОбъектов #Область СлужебныеПроцедуры @@ -925,6 +1044,11 @@ |Изменить:update, |Удалить:remove"); + ОписанияОбъектов.Вставить("СчетчикПотребленияРесурсов:counter" , "Список:list, + |Изменить:update, + |Значения:values, + |Удалить:remove"); + Для Каждого ТекОписание Из ОписанияОбъектов Цикл ДобавитьПолучениеПараметровОбъекта(ТекОписание.Ключ, ТекОписание.Значение); КонецЦикла; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\260.os" index 42e2852..2816510 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\236\320\261\321\212\320\265\320\272\321\202\320\260.os" @@ -19,6 +19,7 @@ // profile.module - Профиль.Модуль // profile.app - Профиль.Приложение // profile.inet - Профиль.ИнтернетРесурс +// counter - СчетчикПотребленияРесурсов Перем ТипОбъекта; Перем Параметры; @@ -61,7 +62,9 @@ ПроцедурыЗаполнения.Вставить(ВРег("Профиль.Приложение") , "ЗаполнитьПараметрыПриложенияПрофиля"); ПроцедурыЗаполнения.Вставить(ВРег("profile.inet") , "ЗаполнитьПараметрыИнтернетРесурсаПрофиля"); ПроцедурыЗаполнения.Вставить(ВРег("Профиль.ИнтернетРесурс") , "ЗаполнитьПараметрыИнтернетРесурсаПрофиля"); - + ПроцедурыЗаполнения.Вставить(ВРег("counter") , "ЗаполнитьПараметрыСчетчикаПотребленияРесурсов"); + ПроцедурыЗаполнения.Вставить(ВРег("Счетчик") , "ЗаполнитьПараметрыСчетчикаПотребленияРесурсов"); + ПроцедураЗаполнения = ПроцедурыЗаполнения[ВРег(ИмяТипаОбъекта)]; Если НЕ ПроцедураЗаполнения = Неопределено Тогда @@ -403,4 +406,25 @@ КонецПроцедуры // ЗаполнитьПараметрыИнтернетРесурсаПрофиля() +Процедура ЗаполнитьПараметрыСчетчикаПотребленияРесурсов() Экспорт + + ДобавитьПараметрОписанияОбъекта("Имя" , "name"); + ДобавитьПараметрОписанияОбъекта("ДлительностьСбора" , "collection-time" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("ДлительностьСбораМс" , "duration" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("Группировка" , "group" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("ТипОтбора" , "filter-type" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("Отбор" , "filter" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("ПроцессорноеВремя" , "cpu-time" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("ДлительностьВызововСУБД" , "duration-dbms" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("ДлительностьВызововСервисов" , "service" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("ПотреблениеПамяти" , "memory" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("ОбъемИнформацииСчитаннойСДиска" , "read" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("ОбъемИнформацииЗаписаннойНаДиск" , "write" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("ОбъемИнформацииПереданнойСУБД" , "dbms-bytes" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("КоличествоСерверныхВызовов" , "call" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("Описание" , "descr" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("КоличествоАктивныхСеансов" , "number-of-active-sessions" , "", "Чтение, Добавление, Изменение"); + ДобавитьПараметрОписанияОбъекта("КоличествоСеансов" , "number-of-sessions" , "", "Чтение, Добавление, Изменение"); +КонецПроцедуры // ЗаполнитьПараметрыСчетчикаПотребленияРесурсов() + Лог = Логирование.ПолучитьЛог("ktb.lib.irac"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\207\320\265\321\202\321\207\320\270\320\272\320\237\320\276\321\202\321\200\320\265\320\261\320\273\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\241\321\207\320\265\321\202\321\207\320\270\320\272\320\237\320\276\321\202\321\200\320\265\320\261\320\273\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..86a73de --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\207\320\265\321\202\321\207\320\270\320\272\320\237\320\276\321\202\321\200\320\265\320\261\320\273\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,212 @@ +Перем Счетчик_Имя; +Перем Счетчик_Параметры; +Перем Счетчик_ДлительностьСбора; +Перем Счетчик_Значения; + +Перем Кластер_Агент; +Перем Кластер_Владелец; + +Перем ПараметрыОбъекта; +Перем ПериодОбновления; +Перем МоментАктуальности; + +Перем Лог; + +// Конструктор +// +// Параметры: +// АгентКластера - АгентКластера - ссылка на родительский объект агента кластера +// Кластер - Кластер - ссылка на родительский объект кластера +// Счетчик - Строка, Соответствие - имя счетчика потребления ресурсов в кластере 1С +// или параметры счетчика потребления ресурсов +// +Процедура ПриСозданииОбъекта(АгентКластера, Кластер, Счетчик) + + Если НЕ ЗначениеЗаполнено(Счетчик) Тогда + Возврат; + КонецЕсли; + + ПараметрыОбъекта = Новый КомандыОбъекта("counter"); + + Кластер_Агент = АгентКластера; + Кластер_Владелец = Кластер; + + Если ТипЗнч(Счетчик) = Тип("Соответствие") Тогда + Счетчик_Имя = Счетчик["name"]; + ЗаполнитьПараметрыСчетчика(Счетчик); + МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Иначе + Счетчик_Имя = Счетчик; + МоментАктуальности = 0; + КонецЕсли; + + ПериодОбновления = 60000; + + Счетчик_Значения = Новый ОбъектыКластера(ЭтотОбъект); + +КонецПроцедуры // ПриСозданииОбъекта() + +// Процедура получает данные от сервиса администрирования кластера 1С +// и сохраняет в локальных переменных +// +// Параметры: +// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) +// - Ложь - данные будут получены если истекло время актуальности +// или данные не были получены ранее +// +Процедура ОбновитьДанные(ОбновитьПринудительно = Ложь) Экспорт + + Если НЕ Служебный.ТребуетсяОбновление(Счетчик_Параметры, + МоментАктуальности, ПериодОбновления, ОбновитьПринудительно) Тогда + Возврат; + КонецЕсли; + + ПараметрыЗапуска = Новый Массив(); + ПараметрыЗапуска.Добавить(Кластер_Агент.СтрокаПодключения()); + + ПараметрыЗапуска.Добавить("counter"); + ПараметрыЗапуска.Добавить("info"); + + ПараметрыЗапуска.Добавить(СтрШаблон("--counter=%1", Имя())); + ПараметрыЗапуска.Добавить(СтрШаблон("--cluster=%1", Кластер_Владелец.Ид())); + ПараметрыЗапуска.Добавить(Кластер_Владелец.СтрокаАвторизации()); + + Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска); + + МассивРезультатов = Кластер_Агент.ВыводКоманды(); + Если МассивРезультатов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ЗаполнитьПараметрыСчетчика(МассивРезультатов[0]); + МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах(); + +КонецПроцедуры // ОбновитьДанные() + +// Процедура заполняет параметры счетчика потребления ресурсов +// +// Параметры: +// ДанныеЗаполнения - Соответствие - данные, из которых будут заполнены параметры счетчика потребления ресурсов +// +Процедура ЗаполнитьПараметрыСчетчика(ДанныеЗаполнения) + + Служебный.ЗаполнитьПараметрыОбъекта(ЭтотОбъект, Счетчик_Параметры, ДанныеЗаполнения); + +КонецПроцедуры // ЗаполнитьПараметрыСчетчика() + +// Функция возвращает коллекцию параметров объекта +// +// Параметры: +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия +// +// Возвращаемое значение: +// Соответствие - коллекция параметров объекта, для получения/изменения значений +// +Функция ПараметрыОбъекта(ИмяПоляКлюча = "ИмяПараметра") Экспорт + + Возврат ПараметрыОбъекта.ОписаниеСвойств(ИмяПоляКлюча); + +КонецФункции // ПараметрыОбъекта() + +// Функция возвращает имя счетчика потребления ресурсов +// +// Возвращаемое значение: +// Строка - имя счетчика потребления ресурсов +// +Функция Имя() Экспорт + + Возврат Счетчик_Имя; + +КонецФункции // Имя() + +// Функция возвращает значение параметра счетчика потребления ресурсов кластера 1С +// +// Параметры: +// ИмяПоля - Строка - Имя параметра кластера +// ОбновитьПринудительно - Булево - Истина - обновить список (вызов RAC) +// +// Возвращаемое значение: +// Произвольный - значение параметра счетчика потребления ресурсов кластера 1С +// +Функция Получить(ИмяПоля, ОбновитьПринудительно = Ложь) Экспорт + + ОбновитьДанные(ОбновитьПринудительно); + + Если НЕ Найти(ВРЕг("Имя, name"), ВРег(ИмяПоля)) = 0 Тогда + Возврат Счетчик_Имя; + КонецЕсли; + + ЗначениеПоля = Счетчик_Параметры.Получить(ИмяПоля); + + Если ЗначениеПоля = Неопределено Тогда + + ОписаниеПараметра = ПараметрыОбъекта("ИмяПоляРАК").Получить(ИмяПоля); + + Если НЕ ОписаниеПараметра = Неопределено Тогда + ЗначениеПоля = Счетчик_Параметры.Получить(ОписаниеПараметра["ИмяПараметра"]); + КонецЕсли; + КонецЕсли; + + Возврат ЗначениеПоля; + +КонецФункции // Получить() + + +// Процедура изменяет параметры счетчика потребления ресурсов +// +// Параметры: +// ПараметрыСчетчика - Структура - новые параметры счетчика потребления ресурсов +// +Процедура Изменить(Знач ПараметрыСчетчика = Неопределено) Экспорт + + Если НЕ ТипЗнч(ПараметрыСчетчика) = Тип("Соответствие") Тогда + ПараметрыСчетчика = Новый Соответствие(); + КонецЕсли; + + ПараметрыКоманды = Новый Соответствие(); + ПараметрыКоманды.Вставить("СтрокаПодключенияАгента" , Кластер_Агент.СтрокаПодключения()); + ПараметрыКоманды.Вставить("СтрокаАвторизацииКластера", Кластер_Владелец.СтрокаАвторизации()); + ПараметрыКоманды.Вставить("ИдентификаторКластера" , Кластер_Владелец.Ид()); + ПараметрыКоманды.Вставить("Имя", Счетчик_Имя); + + Для Каждого ТекЭлемент Из ПараметрыСчетчика Цикл + ПараметрыКоманды.Вставить(ТекЭлемент.Ключ, ТекЭлемент.Значение); + КонецЦикла; + + ПараметрыОбъекта.УстановитьЗначенияПараметровКоманд(ПараметрыКоманды); + + КодВозврата = Кластер_Агент.ВыполнитьКоманду(ПараметрыОбъекта.ПараметрыКоманды("Изменить")); + + Если НЕ КодВозврата = 0 Тогда + ВызватьИсключение СтрШаблон("Ошибка изменения параметров счетчика, КодВозврата = %1: %2", + Имя(), + Кластер_Агент.ВыводКоманды(Ложь)); + КонецЕсли; + + Лог.Отладка(Кластер_Агент.ВыводКоманды(Ложь)); + ОбновитьДанные(Истина); + +КонецПроцедуры // Изменить() + +Функция Значения() Экспорт + + ПараметрыЗапуска = Новый Массив(); + ПараметрыЗапуска.Добавить(Кластер_Агент.СтрокаПодключения()); + + ПараметрыЗапуска.Добавить("counter"); + ПараметрыЗапуска.Добавить(СтрШаблон("--counter=%1", Имя())); + + ПараметрыЗапуска.Добавить(СтрШаблон("--cluster=%1", Кластер_Владелец.Ид())); + ПараметрыЗапуска.Добавить(Кластер_Владелец.СтрокаАвторизации()); + + ПараметрыЗапуска.Добавить("values"); + + Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска); + + Счетчик_Значения.Заполнить(Кластер_Агент.ВыводКоманды()); + + Возврат Счетчик_Значения; + +КонецФункции + +Лог = Логирование.ПолучитьЛог("ktb.lib.irac"); diff --git "a/tests/fixtures/\320\234\320\260\320\272\320\265\321\202_\320\241\321\207\320\265\321\202\321\207\320\270\320\272\320\270\320\237\320\276\321\202\321\200\320\265\320\261\320\273\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\241\321\207\320\265\321\202\321\207\320\270\320\272\320\270\320\237\320\276\321\202\321\200\320\265\320\261\320\273\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..077b1d1 --- /dev/null +++ "b/tests/fixtures/\320\234\320\260\320\272\320\265\321\202_\320\241\321\207\320\265\321\202\321\207\320\270\320\272\320\270\320\237\320\276\321\202\321\200\320\265\320\261\320\273\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,54 @@ +name : CounterAll +collection-time : 3600000 +group : users +filter-type : all-selected +filter : infobase=ut11 +duration : analyze +cpu-time : analyze +memory : analyze +read : analyze +write : analyze +duration-dbms : analyze +dbms-bytes : analyze +service : analyze +call : analyze +number-of-active-sessions : analyze +number-of-sessions : analyze +descr : + +name : serverCalls +collection-time : 3600000 +group : users +filter-type : all +filter : +duration : analyze +cpu-time : not-analyze +memory : not-analyze +read : not-analyze +write : not-analyze +duration-dbms : not-analyze +dbms-bytes : not-analyze +service : not-analyze +call : analyze +number-of-active-sessions : not-analyze +number-of-sessions : not-analyze +descr : + +name : CallInfo +collection-time : current-call +group : users +filter-type : all +filter : +duration : not-analyze +cpu-time : not-analyze +memory : analyze +read : analyze +write : analyze +duration-dbms : not-analyze +dbms-bytes : analyze +service : not-analyze +call : not-analyze +number-of-active-sessions : not-analyze +number-of-sessions : not-analyze +descr : + diff --git "a/tests/fixtures/\320\234\320\260\320\272\320\265\321\202_\320\241\321\207\320\265\321\202\321\207\320\270\320\272\320\270\320\237\320\276\321\202\321\200\320\265\320\261\320\273\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.txt" "b/tests/fixtures/\320\234\320\260\320\272\320\265\321\202_\320\241\321\207\320\265\321\202\321\207\320\270\320\272\320\270\320\237\320\276\321\202\321\200\320\265\320\261\320\273\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.txt" new file mode 100644 index 0000000..c284e53 --- /dev/null +++ "b/tests/fixtures/\320\234\320\260\320\272\320\265\321\202_\320\241\321\207\320\265\321\202\321\207\320\270\320\272\320\270\320\237\320\276\321\202\321\200\320\265\320\261\320\273\320\265\320\275\320\270\321\217\320\240\320\265\321\201\321\203\321\200\321\201\320\276\320\262.\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.txt" @@ -0,0 +1,27 @@ +object : infobase=ut11;userName=DefUser +collection-time : 3600000 +duration : 143047 +cpu-time : 2562 +memory : 0 +read : 5989394 +write : 5038969 +duration-dbms : 4306 +dbms-bytes : 2632378 +service : 92 +call : 0 +number-of-active-sessions : 0 +number-of-sessions : 95 + +object : infobase=ut11;userName=user1 +collection-time : 3600000 +duration : 28000 +cpu-time : 872 +memory : 0 +read : 1390767 +write : 1392297 +duration-dbms : 799 +dbms-bytes : 1586071 +service : 30 +call : 0 +number-of-active-sessions : 0 +number-of-sessions : 9 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 a49b414..ddbc00e 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" @@ -909,6 +909,44 @@ КонецФункции // Вывод_ПрофилиБезопасностиИнтернетРесурсыСписок() +Функция Вывод_СчетчикиПотребленияРесурсовСписок() + + ПараметрыКоманды = Новый Соответствие(); + ПараметрыКоманды.Вставить("СтрокаПодключенияАгента" , Агент_СтрокаПодключения()); + ПараметрыКоманды.Вставить("ИдентификаторКластера" , Кластер_Ид()); + ПараметрыКоманды.Вставить("СтрокаАвторизацииКластера", Кластер_СтрокаАвторизации()); + + ПараметрыОбъекта = Новый КомандыОбъекта("counter", ПараметрыКоманды); + + ВыводКоманды = ВозвращаемыеЗначения["СчетчикиПотребленияРесурсов"]; + + Возврат Новый Структура("ПараметрыКоманды, ВыводКоманды", ПараметрыОбъекта.ПараметрыКоманды("Список"), ВыводКоманды); + +КонецФункции // Вывод_СчетчикиПотребленияРесурсовСписок() + + +Функция Вывод_СчетчикиПотребленияРесурсовЗначения() + + Счетчики = РазобратьВыводКоманды(ВозвращаемыеЗначения["СчетчикиПотребленияРесурсов"]); + + ПараметрыЗапуска = Новый Массив(); + ПараметрыЗапуска.Добавить(Агент_СтрокаПодключения()); + + ПараметрыЗапуска.Добавить("counter"); + + ПараметрыЗапуска.Добавить(СтрШаблон("--counter=%1", Счетчики[0]["name"])); + + ПараметрыЗапуска.Добавить(СтрШаблон("--cluster=%1", Кластер_Ид())); + ПараметрыЗапуска.Добавить(Кластер_СтрокаАвторизации()); + + ПараметрыЗапуска.Добавить("values"); + + ВыводКоманды = ВозвращаемыеЗначения["СчетчикиПотребленияРесурсов.Значения"]; + + Возврат Новый Структура("ПараметрыКоманды, ВыводКоманды", ПараметрыЗапуска, ВыводКоманды); + +КонецФункции // Вывод_СчетчикиПотребленияРесурсовЗначения() + Процедура Инициализация() Лог = Логирование.ПолучитьЛог("ktb.lib.irac"); @@ -1022,6 +1060,11 @@ ПараметрыКластера.Вставить("ПрофилиБезопасности", СтруктураПрофилей); + ПараметрыКластера.Вставить("СчетчикиПотребленияРесурсов", + Новый Структура("Список, Значения")); + ПараметрыКластера.СчетчикиПотребленияРесурсов.Список = Вывод_СчетчикиПотребленияРесурсовСписок(); + ПараметрыКластера.СчетчикиПотребленияРесурсов.Значения = Вывод_СчетчикиПотребленияРесурсовЗначения(); + КонецПроцедуры // Инициализация() Функция ПрочитатьМакетыОбъектовСервера(Знач ПутьККаталогу) diff --git a/tests/irac-test.os b/tests/irac-test.os index bb1e4cd..722a37a 100644 --- a/tests/irac-test.os +++ b/tests/irac-test.os @@ -106,6 +106,10 @@ СписокТестов.Добавить("ТестДолжен_ПолучитьСписокПриложенийПрофиля"); СписокТестов.Добавить("ТестДолжен_ПолучитьСписокИнтернетРесурсовПрофиля"); + СписокТестов.Добавить("ТестДолжен_ПолучитьСписокСчетчиковПотребленияРесурсов"); + СписокТестов.Добавить("ТестДолжен_ПолучитьПараметрыСчетчиковПотребленияРесурсов"); + СписокТестов.Добавить("ТестДолжен_ПолучитьЗначенияСчетчикаПотребленияРесурсов"); + Возврат СписокТестов; КонецФункции // ПолучитьСписокТестов() @@ -1200,3 +1204,79 @@ КонецПроцедуры // ТестДолжен_ПолучитьСписокИнтернетРесурсовПрофиля() +Процедура ТестДолжен_ПолучитьСписокСчетчиковПотребленияРесурсов() Экспорт + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), "Кластеры.Список"); + + Кластеры = АгентКластера.Кластеры(); + Кластер = Кластеры.Получить(ПараметрыТестирования.Параметры().Кластер_АдресПорт); + + Кластер.УстановитьАдминистратора(ПараметрыТестирования.Параметры().Кластер_Администратор, + ПараметрыТестирования.Параметры().Кластер_Пароль); + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), "СчетчикиПотребленияРесурсов.Список"); + + СчетчикиПотребленияРесурсов = Кластер.СчетчикиПотребленияРесурсов().Список(); + + Утверждения.ПроверитьБольше(СчетчикиПотребленияРесурсов.Количество(), 0, "Не удалось получить список счетчиков потребления ресурсов"); + +КонецПроцедуры // ТестДолжен_ПолучитьСписокСчетчиковПотребленияРесурсов() + +// Процедура - тест +// +Процедура ТестДолжен_ПолучитьПараметрыСчетчиковПотребленияРесурсов() Экспорт + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), "Кластеры.Список"); + + Кластеры = АгентКластера.Кластеры(); + + Кластер = Кластеры.Получить(ПараметрыТестирования.Параметры().Кластер_АдресПорт); + + Кластер.УстановитьАдминистратора(ПараметрыТестирования.Параметры().Кластер_Администратор, + ПараметрыТестирования.Параметры().Кластер_Пароль); + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), + "СчетчикиПотребленияРесурсов.Список"); + + СчетчикиПотребленияРесурсов = Кластер.СчетчикиПотребленияРесурсов(); + + Счетчик = СчетчикиПотребленияРесурсов.Получить("CounterAll"); + + ИмяСчетчика = Счетчик.Получить("Имя"); + ДлительностьСбора = Счетчик.Получить("ДлительностьСбора"); + ПотреблениеПамяти = Счетчик.Получить("ПотреблениеПамяти"); + + Утверждения.ПроверитьРавенство(ИмяСчетчика, "CounterAll", "Ошибка проверки имени счетчика потребления ресурсов"); + Утверждения.ПроверитьРавенство(ДлительностьСбора, "3600000", "Ошибка проверки длительности сбора счетчика потребления ресурсов"); + Утверждения.ПроверитьРавенство(ПотреблениеПамяти, "analyze", "Ошибка проверки анализа потребления памяти счетчика потребления ресурсов"); + +КонецПроцедуры // ТестДолжен_ПолучитьПараметрыСчетчиковПотребленияРесурсов() + +// Процедура - тест +// +Процедура ТестДолжен_ПолучитьЗначенияСчетчикаПотребленияРесурсов() Экспорт + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), "Кластеры.Список"); + + Кластеры = АгентКластера.Кластеры(); + + Кластер = Кластеры.Получить(ПараметрыТестирования.Параметры().Кластер_АдресПорт); + + Кластер.УстановитьАдминистратора(ПараметрыТестирования.Параметры().Кластер_Администратор, + ПараметрыТестирования.Параметры().Кластер_Пароль); + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), + "СчетчикиПотребленияРесурсов.Список"); + + СчетчикиПотребленияРесурсов = Кластер.СчетчикиПотребленияРесурсов(); + + Счетчик = СчетчикиПотребленияРесурсов.Получить("CounterAll"); + + ПараметрыТестирования.УстановитьВыводИсполнителяКоманд(АгентКластера.ИсполнительКоманд(), + "СчетчикиПотребленияРесурсов.Значения"); + + ЗначенияСчетчика = Счетчик.Значения(); + + Утверждения.ПроверитьБольше(ЗначенияСчетчика.Количество(), 0, "Не удалось получить значения счетчика потребления ресурсов"); + +КонецПроцедуры // ТестДолжен_ПолучитьЗначенияСчетчикаПотребленияРесурсов() \ No newline at end of file