Skip to content

Commit

Permalink
feat: Для получения информации о лицензиях рабочих процессов и сеансо…
Browse files Browse the repository at this point in the history
…в реализован отдельный класс "Лицензии".
  • Loading branch information
arkuznetsov committed Oct 18, 2019
1 parent bfa8e04 commit 27009b9
Show file tree
Hide file tree
Showing 7 changed files with 236 additions and 230 deletions.
1 change: 1 addition & 0 deletions lib.config
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
<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"/>
<module name="Перечисления" file="src/Модули/Перечисления.os"/>
Expand Down
1 change: 1 addition & 0 deletions src/lib.config
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
<class name="ОграниченияРесурсов" file="Классы/ОграниченияРесурсов.os"/>
<class name="ОграничениеРесурсов" file="Классы/ОграничениеРесурсов.os"/>
<class name="ОбъектыПрофиля" file="Классы/ОбъектыПрофиля.os"/>
<class name="Лицензии" file="Классы/Лицензии.os"/>
<class name="ИсполнительКоманд" file="Классы/ИсполнительКоманд.os"/>
<module name="Служебный" file="Модули/Служебный.os"/>
<module name="Перечисления" file="Модули/Перечисления.os"/>
Expand Down
230 changes: 230 additions & 0 deletions src/Классы/Лицензии.os
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];

КонецФункции // Получить()
Loading

0 comments on commit 27009b9

Please sign in to comment.