forked from arkuznetsov/irac
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Для получения информации о лицензиях рабочих процессов и сеансо…
…в реализован отдельный класс "Лицензии".
- Loading branch information
1 parent
bfa8e04
commit 27009b9
Showing
7 changed files
with
236 additions
and
230 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,230 @@ | ||
// ---------------------------------------------------------- | ||
// 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) | ||
// ЭлементыКакСоответствия - Булево, - Истина - элементы результата будут преобразованы в соответствия | ||
// Строка с именами свойств в качестве ключей | ||
// <Имя поля> - элементы результата будут преобразованы в соответствия | ||
// со значением указанного поля в качестве ключей ("Имя"|"ИмяРАК") | ||
// Ложь - (по умолчанию) элементы будут возвращены как есть | ||
// | ||
// Возвращаемое значение: | ||
// Массив - список сеансов | ||
// | ||
Функция Список(Отбор = Неопределено, ОбновитьПринудительно = Ложь, ЭлементыКакСоответствия = Ложь) Экспорт | ||
|
||
Лицензии = Элементы.Список(Отбор, ОбновитьПринудительно, ЭлементыКакСоответствия); | ||
|
||
Возврат Лицензии; | ||
|
||
КонецФункции // Список() | ||
|
||
// Функция возвращает список сеансов | ||
// | ||
// Параметры: | ||
// ПоляИерархии - Строка - Поля для построения иерархии списка сеансов, разделенные "," | ||
// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) | ||
// ЭлементыКакСоответствия - Булево, - Истина - элементы результата будут преобразованы в соответствия | ||
// Строка с именами свойств в качестве ключей | ||
// <Имя поля> - элементы результата будут преобразованы в соответствия | ||
// со значением указанного поля в качестве ключей ("Имя"|"ИмяРАК") | ||
// Ложь - (по умолчанию) элементы будут возвращены как есть | ||
// | ||
// Возвращаемое значение: | ||
// Соответствие - список сеансов | ||
// | ||
Функция ИерархическийСписок(Знач ПоляИерархии, ОбновитьПринудительно = Ложь, ЭлементыКакСоответствия = Ложь) Экспорт | ||
|
||
Лицензии = Элементы.ИерархическийСписок(ПоляИерархии, ОбновитьПринудительно, ЭлементыКакСоответствия); | ||
|
||
Возврат Лицензии; | ||
|
||
КонецФункции // ИерархическийСписок() | ||
|
||
// Функция возвращает количество сеансов в списке | ||
// | ||
// Возвращаемое значение: | ||
// Число - количество сеансов | ||
// | ||
Функция Количество() Экспорт | ||
|
||
Если Элементы = Неопределено Тогда | ||
Возврат 0; | ||
КонецЕсли; | ||
|
||
Возврат Элементы.Количество(); | ||
|
||
КонецФункции // Количество() | ||
|
||
// Функция возвращает описание сеанса кластера 1С | ||
// | ||
// Параметры: | ||
// ИдВладельца - Строка - номер сеанса в виде <имя информационной базы>:<номер сеанса> | ||
// или номер процесса в виде <адрес сервера>:<номер процесса ОС (pid))> | ||
// ОбновитьПринудительно - Булево - Истина - принудительно обновить данные (вызов RAC) | ||
// КакСоответствие - Булево - Истина - результат будет преобразован в соответствие | ||
// | ||
// Возвращаемое значение: | ||
// Соответствие - описание сеанса 1С | ||
// | ||
Функция Получить(Знач ИдВладельца, Знач ОбновитьПринудительно = Ложь, КакСоответствие = Ложь) Экспорт | ||
|
||
СеансИлиПроцесс = Владелец.Получить(ИдВладельца); | ||
|
||
Отбор = Новый Соответствие(); | ||
|
||
Если ТипЗнч(Владелец) = Тип("РабочиеПроцессы") Тогда | ||
Отбор.Вставить("process", СеансИлиПроцесс.Ид()); | ||
ИначеЕсли ТипЗнч(Владелец) = Тип("Сеансы") Тогда | ||
Отбор.Вставить("session", СеансИлиПроцесс.Ид()); | ||
Иначе | ||
Возврат Неопределено; | ||
КонецЕсли; | ||
|
||
Лицензии = Элементы.Список(Отбор, ОбновитьПринудительно, КакСоответствие); | ||
|
||
Если Лицензии.Количество() = 0 Тогда | ||
Возврат Неопределено; | ||
КонецЕсли; | ||
|
||
Возврат Лицензии[0]; | ||
|
||
КонецФункции // Получить() |
Oops, something went wrong.