Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,19 @@
КонфигФайл.СоздатьКонфигурационныйФайл("c:\tmp\my-config.yml");
```

## Логирование

Библиотека пишет подробный отладочный лог через [logos](https://github.com/oscript-library/logos)
в лог с именем `oscript.lib.ibcmdrunner`: командные строки запуска ibcmd/ibsrv, длительность
и коды возврата команд, установку параметров. Значения паролей в лог не выводятся.

Чтобы включить отладочный вывод:

```bsl
Лог = Логирование.ПолучитьЛог("oscript.lib.ibcmdrunner");
Лог.УстановитьУровень(УровниЛога.Отладка);
```

## [Программный интерфейс](https://github.com/alex-bob-lip/ibcmdrunner/tree/main/doc/doc.md)

## Лицензия
Expand Down
3 changes: 2 additions & 1 deletion lib.config
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<package-def>
<package-def>
<module name="СлужебныйIbcmdRunner" file="src/Модули/СлужебныйIbcmdRunner.os"/>
<class name="УправлениеИБ" file="src/Классы/ibcmdrunner.os"/>
<class name="УправлениеАС" file="src/Классы/ibsrvrunner.os"/>
<class name="КонфигурационныйФайлАС" file="src/Классы/configfile_as.os"/>
Expand Down
5 changes: 3 additions & 2 deletions packagedef
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
Описание.Имя("ibcmdrunner")
.Версия("0.3.3")
.Версия("0.4.0")
.Автор("Alexey Bobylkin")
.АдресАвтора("alex_bob@lipetsk.ru")
.Описание("Библиотека для упрощения работы с утилитами ibcmd и ibsrv из oscript.")
.ВерсияСреды("1.9.2")
.ВерсияСреды("2.0.0")
.ВключитьФайл("lib.config")
.ВключитьФайл("Readme.md")
.ВключитьФайл("src")
Expand All @@ -14,6 +14,7 @@
.ЗависитОт("v8find", "0.3.1")
.ЗависитОт("logos", "1.7.0")
.ЗависитОт("fs", "1.2.0")
.ЗависитОт("oscript-yaml", "0.3.0")

.РазработкаЗависитОт("1testrunner", "1.8.0")
.РазработкаЗависитОт("coverage", "0.6.1")
Expand Down
454 changes: 208 additions & 246 deletions src/Классы/configfile_as.os

Large diffs are not rendered by default.

864 changes: 455 additions & 409 deletions src/Классы/ibcmdrunner.os

Large diffs are not rendered by default.

73 changes: 59 additions & 14 deletions src/Классы/ibsrvrunner.os
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#Использовать 1commands
#Использовать asserts
#Использовать fs
#Использовать logos

#Область ОписаниеПеременных

Expand Down Expand Up @@ -48,6 +49,8 @@
Ожидаем.Что(Разрядность).ИмеетТип("Строка");
КонецЕсли;

Лог.Отладка("Установка версии платформы для ibsrv: %1 (разрядность: %2)", НомерВерсии, Разрядность);

ВычислитьВерсиюIbsrv(НомерВерсии, Разрядность);

КонецПроцедуры
Expand All @@ -60,7 +63,10 @@
Процедура УстановитьКаталогДанных(Знач КаталогДанныхСервера) Экспорт

Ожидаем.Что(КаталогДанныхСервера).ИмеетТип("Строка");
Ожидаем.Что(ФС.КаталогСуществует(КаталогДанныхСервера)).ЭтоИстина();
Ожидаем.Что(ФС.КаталогСуществует(КаталогДанныхСервера),
СтрШаблон("Каталог данных автономного сервера не существует: %1", КаталогДанныхСервера)).ЭтоИстина();

Лог.Отладка("Установлен каталог данных автономного сервера: %1", КаталогДанныхСервера);

КаталогДанных = КаталогДанныхСервера;
ПараметрыЗапускаАС.Вставить("data", ОбернутьВКавычки(КаталогДанных));
Expand All @@ -75,7 +81,10 @@
Процедура УстановитьПараметрыФайловойИБ(Знач КаталогИБ) Экспорт

Ожидаем.Что(КаталогИБ).ИмеетТип("Строка");
Ожидаем.Что(ФС.КаталогСуществует(КаталогИБ)).ЭтоИстина();
Ожидаем.Что(ФС.КаталогСуществует(КаталогИБ),
СтрШаблон("Каталог файловой информационной базы не существует: %1", КаталогИБ)).ЭтоИстина();

Лог.Отладка("Установлен каталог файловой ИБ: %1", КаталогИБ);

ПараметрыЗапускаАС.Вставить("db-path", ОбернутьВКавычки(КаталогИБ));

Expand All @@ -89,7 +98,11 @@
Процедура УстановитьКонфигурационныйФайл(Знач ПутьККонфигурационномуФайлу) Экспорт

Ожидаем.Что(ПутьККонфигурационномуФайлу).ИмеетТип("Строка");
Ожидаем.Что(ФС.ФайлСуществует(ПутьККонфигурационномуФайлу)).ЭтоИстина();
Ожидаем.Что(ФС.ФайлСуществует(ПутьККонфигурационномуФайлу),
СтрШаблон("Конфигурационный файл автономного сервера не существует: %1", ПутьККонфигурационномуФайлу))
.ЭтоИстина();

Лог.Отладка("Установлен конфигурационный файл автономного сервера: %1", ПутьККонфигурационномуФайлу);

ПараметрыЗапускаАС.Вставить("config", ОбернутьВКавычки(ПутьККонфигурационномуФайлу));

Expand All @@ -102,9 +115,9 @@
//
Процедура УстановитьПортПрямогоДоступа(Знач НомерПорта) Экспорт

Ожидаем.Что(НомерПорта).ИмеетТип("Число");
Ожидаем.Что(НомерПорта).Больше(1000); // BSLLS:MagicNumber-off
Ожидаем.Что(НомерПорта).Меньше(65535); // BSLLS:MagicNumber-off
ПроверитьНомерПорта(НомерПорта);

Лог.Отладка("Установлен порт прямого доступа: %1", НомерПорта);

ПараметрыЗапускаАС.Вставить("direct-regport", НомерПорта);

Expand All @@ -117,9 +130,9 @@
//
Процедура УстановитьПортHttpДоступа(Знач НомерПорта) Экспорт

Ожидаем.Что(НомерПорта).ИмеетТип("Число");
Ожидаем.Что(НомерПорта).Больше(1000); // BSLLS:MagicNumber-off
Ожидаем.Что(НомерПорта).Меньше(65535); // BSLLS:MagicNumber-off
ПроверитьНомерПорта(НомерПорта);

Лог.Отладка("Установлен порт http-доступа: %1", НомерПорта);

ПараметрыЗапускаАС.Вставить("http-port", НомерПорта);

Expand All @@ -131,12 +144,17 @@
Процедура Запустить() Экспорт

Если Запущен() Тогда
ВызватьИсключение "Процесс ibsrv уже запущен!";
ВызватьИсключение СтрШаблон("Процесс ibsrv уже запущен! Идентификатор процесса: %1", Процесс.Идентификатор);
КонецЕсли;

Ожидаем.Что(КаталогДанных).Заполнено();
Ожидаем.Что(КаталогДанных,
"Не установлен каталог данных автономного сервера. Вызовите УстановитьКаталогДанных перед запуском.")
.Заполнено();

ПараметрыКоманды = ЗаполнитьПараметрыКоманды();

Лог.Информация("Запуск автономного сервера ibsrv (каталог данных: %1)", КаталогДанных);

ЗапуститьПроцессIbsrv(ПараметрыКоманды);

ОжидатьЗапускаIbsrv();
Expand Down Expand Up @@ -179,9 +197,12 @@
Процедура Остановить() Экспорт

Если Не Запущен() Тогда
Лог.Отладка("Остановка не требуется: процесс ibsrv не запущен");
Возврат;
КонецЕсли;

Лог.Информация("Остановка автономного сервера ibsrv (идентификатор процесса: %1)", Процесс.Идентификатор);

Процесс.Завершить();

ПрочитатьПотокиIbsrv();
Expand Down Expand Up @@ -210,29 +231,44 @@
#Область СлужебныеПроцедурыИФункции

Функция ИмяЛога()
Возврат "oscript.lib.ibcmdrunner";
Возврат СлужебныйIbcmdRunner.ИмяЛога();
КонецФункции

Функция ОбернутьВКавычки(Строка)
Возврат СтрШаблон("""%1""", Строка);
Возврат СлужебныйIbcmdRunner.ОбернутьВКавычки(Строка);
КонецФункции

Процедура ПроверитьНомерПорта(Знач НомерПорта)

ТекстОшибки = СтрШаблон("Номер порта должен быть в диапазоне от 1000 до 65535, получено: %1", НомерПорта);
Ожидаем.Что(НомерПорта).ИмеетТип("Число");
Ожидаем.Что(НомерПорта, ТекстОшибки).Больше(1000); // BSLLS:MagicNumber-off
Ожидаем.Что(НомерПорта, ТекстОшибки).Меньше(65535); // BSLLS:MagicNumber-off

КонецПроцедуры

Процедура ВычислитьВерсиюIbsrv(НомерВерсии, Разрядность)

ПутьКIbsrv = Платформа1С.ПутьКIBSRV(НомерВерсии, Разрядность);
Ожидаем.Что(ПутьКIbsrv, "Не найдена установленная версия платформы: " + НомерВерсии).Заполнено();

Лог.Отладка("Путь к утилите ibsrv: %1", ПутьКIbsrv);

ПараметрыКоманды = Новый Массив;
ПараметрыКоманды.Добавить("--version");

ВыводКоманды = ВыполнитьКомандуIbsrv(ПараметрыКоманды);

Версия = СокрЛП(ВыводКоманды);

Лог.Отладка("Версия утилиты ibsrv: %1", Версия);

КонецПроцедуры

Функция ВыполнитьКомандуIbsrv(ПараметрыКоманды)

Лог.Отладка("Запуск: %1 %2", ПутьКIbsrv, СтрСоединить(ПараметрыКоманды, " "));

Команда = Новый Команда();
Команда.УстановитьКоманду(ПутьКIbsrv);
Команда.ДобавитьПараметры(ПараметрыКоманды);
Expand All @@ -256,6 +292,8 @@
ПеренаправлятьПотокВвода = Ложь;
КодировкаПотоков = КодировкаТекста.UTF8;

Лог.Отладка("Командная строка запуска ibsrv: %1 (текущий каталог: %2)", КоманднаяСтрока, ТекущийКаталог);

Процесс = СоздатьПроцесс(КоманднаяСтрока, ТекущийКаталог,
ПеренаправлятьПотокВывода, ПеренаправлятьПотокВвода, КодировкаПотоков);
Процесс.Запустить();
Expand All @@ -273,6 +311,9 @@
ИмяФайла = ОбъединитьПути(КаталогДанных, "lock.pid");
ЕстьДанные = Ложь;

Лог.Отладка("Ожидание запуска ibsrv (файл готовности: %1, предельное время ожидания: %2 мс)",
ИмяФайла, ПредельныйПериодОжиданияМс);

Пока Запущен() И ТекущийПериодОжидания < ПредельныйПериодОжиданияМс Цикл
Приостановить(ИнтервалПроверкиМс);

Expand All @@ -288,14 +329,18 @@
КонецЦикла;

Если ФайлСуществует Тогда
Лог.Отладка("Сервер ibsrv готов к работе (время ожидания: %1 мс)", ТекущийПериодОжидания);
Возврат;
КонецЕсли;

Если Запущен() Тогда
Остановить();
КонецЕсли;

ВызватьИсключение ТекстИсключенияЗапускаАС();
ТекстОшибки = СтрШаблон("%1 Файл готовности %2 не появился за %3 мс. Подробности смотрите в отладочном логе %4.",
ТекстИсключенияЗапускаАС(), ИмяФайла, ПредельныйПериодОжиданияМс, ИмяЛога());
Лог.Ошибка(ТекстОшибки);
ВызватьИсключение ТекстОшибки;

КонецПроцедуры

Expand Down
Loading
Loading