diff --git a/.gitignore b/.gitignore index 5ddbfac..736e1d7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -.vscode/launch.json +.vscode/launch.json sonarlint.json \.sonar/ @@ -6,3 +6,5 @@ test-reports/ coverage/ *.ospx tests/fixtures/ПараметрыТестирования.txt + +oscript_modules \ No newline at end of file diff --git a/lib.config b/lib.config index 702695e..2484864 100644 --- a/lib.config +++ b/lib.config @@ -16,6 +16,7 @@ + diff --git a/src/lib.config b/src/lib.config index e26e1f3..88205b7 100644 --- a/src/lib.config +++ b/src/lib.config @@ -16,6 +16,7 @@ + diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\260\321\217\320\221\320\260\320\267\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\260\321\217\320\221\320\260\320\267\320\260.os" index 6748c10..5122544 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\260\321\217\320\221\320\260\320\267\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\260\321\217\320\221\320\260\320\267\320\260.os" @@ -87,7 +87,7 @@ ЗаполнитьПараметрыИБ(ТекОписание); ИБ_Сеансы = Новый Сеансы(Кластер_Агент, Кластер_Владелец, ЭтотОбъект); - ИБ_Соединения = Новый Соединения(Кластер_Агент, Кластер_Владелец, , ЭтотОбъект); + ИБ_Соединения = Новый Соединения(Кластер_Агент, Кластер_Владелец, Неопределено, ЭтотОбъект); МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах(); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\320\265.os" new file mode 100644 index 0000000..43f49d9 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\320\265.os" @@ -0,0 +1,193 @@ +Перем Объект_Ид; +Перем Объект_Параметры; +Перем ПараметрыОбъекта; + +Перем Кластер_Агент; +Перем Кластер_Владелец; +Перем Процесс_Владелец; +Перем ИБ_Владелец; + +Перем ПериодОбновления; +Перем МоментАктуальности; + +Перем Лог; + +// Конструктор +// +// Параметры: +// АгентКластера - АгентКластера - ссылка на родительский объект агента кластера +// Кластер - Кластера - ссылка на родительский объект кластера +// Процесс - Процесс - ссылка на родительский объект процесса +// ИБ - ИнформационнаяБаза - ссылка на родительский объект информационной базы +// Соединение - Строка, Соответствие - идентификатор или параметры соединения +// +Процедура ПриСозданииОбъекта(АгентКластера, Кластер, ИБ, Соединение, Процесс = Неопределено) + + Кластер_Агент = АгентКластера; + Кластер_Владелец = Кластер; + ИБ_Владелец = ИБ; + Процесс_Владелец = Процесс; + + ПараметрыОбъекта = Новый ПараметрыОбъекта("connection"); + + Если ТипЗнч(Соединение) = Тип("Соответствие") Тогда + Объект_Ид = Соединение["connection"]; + Служебный.ЗаполнитьПараметрыОбъекта(ЭтотОбъект, Объект_Параметры, Соединение); + МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Иначе + Объект_Ид = Соединение; + МоментАктуальности = 0; + КонецЕсли; + + ПериодОбновления = 60000; + +КонецПроцедуры // ПриСозданииОбъекта() + +// Функция возвращает ИД объекта +// +// Возвращаемое значение: +// Строка - идентификатор объекта +// +Функция Ид() Экспорт + + Возврат Объект_Ид; + +КонецФункции // Ид() + +// Процедура получает данные от сервиса администрирования кластера 1С +// и сохраняет в локальных переменных +// +// Параметры: +// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) +// - Ложь - данные будут получены если истекло время актуальности +// или данные не были получены ранее +// +Процедура ОбновитьДанные(ОбновитьПринудительно = Ложь) Экспорт + + Если Служебный.ТребуетсяОбновление(Объект_Параметры, + МоментАктуальности, ПериодОбновления, ОбновитьПринудительно) Тогда + + ОбновитьДанныеОбъекта(); + + КонецЕсли; + + МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах(); + +КонецПроцедуры // ОбновитьДанные() + +// Процедура получает данные соединения от сервиса администрирования кластера 1С +// и сохраняет в локальных переменных +// +Процедура ОбновитьДанныеОбъекта() Экспорт + + ПараметрыЗапуска = Новый Массив(); + ПараметрыЗапуска.Добавить(Кластер_Агент.СтрокаПодключения()); + + ПараметрыЗапуска.Добавить("connection"); + ПараметрыЗапуска.Добавить("list"); + + ПараметрыЗапуска.Добавить(СтрШаблон("--cluster=%1", Кластер_Владелец.Ид())); + ПараметрыЗапуска.Добавить(Кластер_Владелец.СтрокаАвторизации()); + + Если НЕ Процесс_Владелец = Неопределено Тогда + ПараметрыЗапуска.Добавить(СтрШаблон("--process=%1", Процесс_Владелец.Получить("process"))); + КонецЕсли; + + Если НЕ ИБ_Владелец = Неопределено Тогда + ПараметрыЗапуска.Добавить(СтрШаблон("--infobase=%1", ИБ_Владелец.Ид())); + ПараметрыЗапуска.Добавить(СтрШаблон(ИБ_Владелец.СтрокаАвторизации())); + КонецЕсли; + + Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска); + + МассивРезультатов = Кластер_Агент.ВыводКоманды(); + + Если МассивРезультатов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Служебный.ЗаполнитьПараметрыОбъекта(ЭтотОбъект, Объект_Параметры, МассивРезультатов[0]); + +КонецПроцедуры // ОбновитьДанныеОбъекта() + +// Функция возвращает коллекцию параметров объекта +// +// Параметры: +// ИмяПоляКлюча - Строка - имя поля, значение которого будет использовано +// в качестве ключа возвращаемого соответствия +// +// Возвращаемое значение: +// Соответствие - коллекция параметров объекта, для получения/изменения значений +// +Функция ПараметрыОбъекта(ИмяПоляКлюча = "ИмяПараметра") Экспорт + + Возврат ПараметрыОбъекта.Получить(ИмяПоляКлюча); + +КонецФункции // ПараметрыОбъекта() + +// Функция возвращает значение параметра соединения 1С +// +// Параметры: +// ИмяПоля - Строка - Имя параметра соединения +// ОбновитьПринудительно - Булево - Истина - обновить список (вызов RAC) +// +// Возвращаемое значение: +// Произвольный - значение параметра соединения 1С +// +Функция Получить(ИмяПоля, ОбновитьПринудительно = Ложь) Экспорт + + ОбновитьДанные(ОбновитьПринудительно); + + Если НЕ Найти(ВРег("Ид, process"), ВРег(ИмяПоля)) = 0 Тогда + Возврат Объект_Ид; + КонецЕсли; + + ЗначениеПоля = Объект_Параметры.Получить(ИмяПоля); + + Если ЗначениеПоля = Неопределено Тогда + + ОписаниеПараметра = ПараметрыОбъекта("ИмяПоляРАК").Получить(ИмяПоля); + + Если НЕ ОписаниеПараметра = Неопределено Тогда + ЗначениеПоля = Объект_Параметры.Получить(ОписаниеПараметра["ИмяПараметра"]); + КонецЕсли; + КонецЕсли; + + Возврат ЗначениеПоля; + +КонецФункции // Получить() + +// Процедура отключает соединение в кластере 1С +// +Процедура Отключить() Экспорт + + ПараметрыЗапуска = Новый Массив(); + ПараметрыЗапуска.Добавить(Кластер_Агент.СтрокаПодключения()); + + ПараметрыЗапуска.Добавить("connection"); + ПараметрыЗапуска.Добавить("list"); + + ПараметрыЗапуска.Добавить(СтрШаблон("--cluster=%1", Кластер_Владелец.Ид())); + ПараметрыЗапуска.Добавить(Кластер_Владелец.СтрокаАвторизации()); + + Если НЕ Процесс_Владелец = Неопределено Тогда + ПараметрыЗапуска.Добавить(СтрШаблон("--process=%1", Процесс_Владелец.Получить("process"))); + КонецЕсли; + + ОтборИБ = Новый Соответствие(); + ОтборИБ.Вставить("infobase", ИБ_Владелец.Ид()); + + СписокИБ = Кластер_Владелец.ИнформационныеБазы().Список(ОтборИБ); + Если НЕ СписокИБ.Количество() = 0 Тогда + ПараметрыЗапуска.Добавить(СтрШаблон(СписокИБ[0].СтрокаАвторизации())); + КонецЕсли; + + Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска); + + Лог.Отладка(Кластер_Агент.ВыводКоманды(Ложь)); + + ОбновитьДанные(Истина); + +КонецПроцедуры // Отключить() + +Лог = Логирование.ПолучитьЛог("ktb.lib.irac"); \ No newline at end of file diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" index 8f3000a..326fbb5 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\276\320\265\320\264\320\270\320\275\320\265\320\275\320\270\321\217.os" @@ -63,7 +63,13 @@ Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска); - Элементы.Заполнить(Кластер_Агент.ВыводКоманды()); + МассивРезультатов = Кластер_Агент.ВыводКоманды(); + + МассивПроцессов = Новый Массив(); + Для Каждого ТекОписание Из МассивРезультатов Цикл + МассивПроцессов.Добавить(Новый Соединение(Кластер_Агент, Кластер_Владелец, ИБ_Владелец, ТекОписание, Процесс_Владелец)); + КонецЦикла; + Элементы.Заполнить(МассивПроцессов); Элементы.УстановитьАктуальность();