Skip to content

Commit

Permalink
Merge pull request #35 from otymko/develop
Browse files Browse the repository at this point in the history
Соединение как Класс
  • Loading branch information
arkuznetsov authored Nov 7, 2018
2 parents 2245fa7 + c4cef4f commit e9051b6
Show file tree
Hide file tree
Showing 6 changed files with 206 additions and 3 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
.vscode/launch.json
.vscode/launch.json
sonarlint.json

\.sonar/
test-reports/
coverage/
*.ospx
tests/fixtures/ПараметрыТестирования.txt

oscript_modules
1 change: 1 addition & 0 deletions lib.config
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,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"/>
<class name="ИнформационныеБазы" file="src/Классы/КластерИнформационныеБазы.os"/>
<class 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 @@ -16,6 +16,7 @@
<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"/>
Expand Down
2 changes: 1 addition & 1 deletion src/Классы/ИнформационнаяБаза.os
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
ЗаполнитьПараметрыИБ(ТекОписание);

ИБ_Сеансы = Новый Сеансы(Кластер_Агент, Кластер_Владелец, ЭтотОбъект);
ИБ_Соединения = Новый Соединения(Кластер_Агент, Кластер_Владелец, , ЭтотОбъект);
ИБ_Соединения = Новый Соединения(Кластер_Агент, Кластер_Владелец, Неопределено, ЭтотОбъект);

МоментАктуальности = ТекущаяУниверсальнаяДатаВМиллисекундах();

Expand Down
193 changes: 193 additions & 0 deletions src/Классы/Соединение.os
Original file line number Diff line number Diff line change
@@ -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");
8 changes: 7 additions & 1 deletion src/Классы/Соединения.os
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,13 @@

Кластер_Агент.ВыполнитьКоманду(ПараметрыЗапуска);

Элементы.Заполнить(Кластер_Агент.ВыводКоманды());
МассивРезультатов = Кластер_Агент.ВыводКоманды();

МассивПроцессов = Новый Массив();
Для Каждого ТекОписание Из МассивРезультатов Цикл
МассивПроцессов.Добавить(Новый Соединение(Кластер_Агент, Кластер_Владелец, ИБ_Владелец, ТекОписание, Процесс_Владелец));
КонецЦикла;
Элементы.Заполнить(МассивПроцессов);

Элементы.УстановитьАктуальность();

Expand Down

0 comments on commit e9051b6

Please sign in to comment.