You've already forked oScript-Examples
mirror of
https://github.com/Stepa86/oScript-Examples.git
synced 2026-04-28 19:34:24 +02:00
329 lines
15 KiB
Plaintext
329 lines
15 KiB
Plaintext
#Использовать cmdline
|
|
#Использовать logos
|
|
#Использовать json
|
|
#Использовать v8runner
|
|
|
|
#Использовать "."
|
|
|
|
Перем _Лог;
|
|
Перем _Замер;
|
|
|
|
// Получить имя лога продукта
|
|
//
|
|
// Возвращаемое значение:
|
|
// Строка - имя лога продукта
|
|
//
|
|
Функция ИмяЛога() Экспорт
|
|
Возврат "oscript.app.CopyBase";
|
|
КонецФункции
|
|
|
|
Функция ПолучитьПараметры( Знач пАргументы )
|
|
|
|
Парсер = Новый ПарсерАргументовКоманднойСтроки();
|
|
|
|
Парсер.ДобавитьПараметр("ПутьКФайлу");
|
|
Парсер.ДобавитьПараметрФлаг("-debug");
|
|
|
|
Параметры = Парсер.Разобрать(пАргументы);
|
|
|
|
Если Не Параметры.Количество() > 0 Тогда
|
|
|
|
Сообщить("Должен быть передан 1 параметр - файл настроек.");
|
|
Сообщить("Например,");
|
|
Сообщить("oscript CopyBase.os g:\git\oScript-Examples\Configs\db111.base_config");
|
|
|
|
ЗавершитьРаботу(1);
|
|
|
|
КонецЕсли;
|
|
|
|
Если Параметры["-debug"] Тогда
|
|
|
|
_Лог.УстановитьУровень(УровниЛога.Отладка);
|
|
|
|
КонецЕсли;
|
|
|
|
текстНастроек = ОбщегоНазначения.ПолучитьТекстИзФайла(Параметры["ПутьКФайлу"]);
|
|
Если текстНастроек = Ложь Тогда
|
|
|
|
Сообщить("Переданный файл не найден или не является файлом настроек.");
|
|
Сообщить("Для создания файла воспользуйтесь обработкой _ПодготовкаНастроекДляБазы.epf");
|
|
|
|
ЗавершитьРаботу(1);
|
|
|
|
КонецЕсли;
|
|
|
|
ЧтениеJSON = Новый ПарсерJSON;
|
|
параметрыИзФайла = ЧтениеJSON.ПрочитатьJSON(текстНастроек,,,Истина);
|
|
|
|
прочитанныеПараметры = Новый Соответствие;
|
|
|
|
ПрочитатьПараметрыРекурсивно( параметрыИзФайла, прочитанныеПараметры );
|
|
|
|
Для каждого цЭлемент Из прочитанныеПараметры Цикл
|
|
|
|
_Лог.Отладка( "Прочитан параметр " + цЭлемент.Ключ + ": " + цЭлемент.Значение );
|
|
|
|
КонецЦикла;
|
|
|
|
Возврат прочитанныеПараметры;
|
|
|
|
КонецФункции
|
|
|
|
Процедура ПрочитатьПараметрыРекурсивно( Знач пПараметры, пПрочитенныеПараметры )
|
|
|
|
Для каждого цЭлемент Из пПараметры Цикл
|
|
|
|
Если ТипЗнч( цЭлемент.Значение ) = Тип("Структура")
|
|
ИЛИ ТипЗнч( цЭлемент.Значение ) = Тип("Соответствие") Тогда
|
|
|
|
ПрочитатьПараметрыРекурсивно( цЭлемент.Значение, пПрочитенныеПараметры );
|
|
|
|
Иначе
|
|
|
|
пПрочитенныеПараметры.Вставить( цЭлемент.Ключ, цЭлемент.Значение );
|
|
|
|
КонецЕсли;
|
|
|
|
КонецЦикла;
|
|
|
|
КонецПроцедуры
|
|
|
|
Функция Инициализация( Знач пАргументы )
|
|
|
|
_Замер = Новый Замер();
|
|
|
|
_Замер.НачатьЗамер();
|
|
|
|
_Замер.НачатьЗамер( "Начат разбор параметров", "РазборПараметров" );
|
|
|
|
параметры = ПолучитьПараметры( пАргументы );
|
|
|
|
_Замер.СообщитьЗамер( "Параметры получены" );
|
|
|
|
Возврат параметры;
|
|
|
|
КонецФункции
|
|
|
|
Процедура ВыполнитьБекап( Знач пПараметры )
|
|
|
|
Если Не пПараметры["Source_SQL.UseBackup"] = Истина Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
_Замер.НачатьЗамер( "Начат бекап", "Бекап" );
|
|
|
|
выполнениеБекапа = Новый РаботаСSQL();
|
|
|
|
Если _Лог.Уровень() = УровниЛога.Отладка Тогда
|
|
|
|
логSQL = Логирование.ПолучитьЛог(выполнениеБекапа.ИмяЛога());
|
|
логSQL.УстановитьУровень( УровниЛога.Отладка );
|
|
|
|
КонецЕсли;
|
|
|
|
выполнениеБекапа.УстановитьСервер( пПараметры["Source_SQL.Server"] );
|
|
выполнениеБекапа.УстановитьПользователя( пПараметры["Source_SQL.User"] );
|
|
выполнениеБекапа.УстановитьПароль( пПараметры["Source_SQL.Password"] );
|
|
выполнениеБекапа.УстановитьИмяБазы( пПараметры["Source_SQL.Base"] );
|
|
|
|
результат = выполнениеБекапа.ВыполнитьБекап( пПараметры["FileBackup"] );
|
|
|
|
Если Не результат Тогда
|
|
ЗавершитьРаботу(1);
|
|
КонецЕсли;
|
|
|
|
_Замер.СообщитьЗамер( "Выполнен бекап");
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПроверитьСоединения( Знач пПараметры )
|
|
|
|
Если Не пПараметры["Current_SQL.UseRestore"] = Истина Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
_Замер.НачатьЗамер( "Начало проверки количества соединений", "ПроверкаСоединения" );
|
|
|
|
проверкаСоединения = Новый РаботаСSQL();
|
|
|
|
Если _Лог.Уровень() = УровниЛога.Отладка Тогда
|
|
|
|
логSQL = Логирование.ПолучитьЛог(проверкаСоединения.ИмяЛога());
|
|
логSQL.УстановитьУровень( УровниЛога.Отладка );
|
|
|
|
КонецЕсли;
|
|
|
|
проверкаСоединения.УстановитьСервер( пПараметры["Current_SQL.Server"] );
|
|
проверкаСоединения.УстановитьПользователя( пПараметры["Current_SQL.User"] );
|
|
проверкаСоединения.УстановитьПароль( пПараметры["Current_SQL.Password"] );
|
|
проверкаСоединения.УстановитьИмяБазы( пПараметры["Current_SQL.Base"] );
|
|
|
|
количествоСоединений = проверкаСоединения.ПолучитьКоличествоСоединений();
|
|
|
|
_Лог.Отладка( "Количество соединений: " + количествоСоединений );
|
|
|
|
Если количествоСоединений < 0 Тогда
|
|
ЗавершитьРаботу(1);
|
|
КонецЕсли;
|
|
|
|
_Замер.СообщитьЗамер( "Проверены активные соединения. Соединений: " + количествоСоединений);
|
|
|
|
Если количествоСоединений > 0 Тогда
|
|
|
|
_Лог.Ошибка( "Есть активные соединения. Выполнение скрипта прервано." );
|
|
ЗавершитьРаботу(1);
|
|
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ВыполнитьВосстановление( Знач пПараметры )
|
|
|
|
Если Не пПараметры["Current_SQL.UseRestore"] = Истина Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
_Замер.НачатьЗамер( "Начало восстановления", "Восстановление" );
|
|
|
|
выполнениеВосстановления = Новый РаботаСSQL();
|
|
|
|
Если _Лог.Уровень() = УровниЛога.Отладка Тогда
|
|
|
|
логSQL = Логирование.ПолучитьЛог(выполнениеВосстановления.ИмяЛога());
|
|
логSQL.УстановитьУровень( УровниЛога.Отладка );
|
|
|
|
КонецЕсли;
|
|
|
|
выполнениеВосстановления.УстановитьСервер( пПараметры["Current_SQL.Server"] );
|
|
выполнениеВосстановления.УстановитьПользователя( пПараметры["Current_SQL.User"] );
|
|
выполнениеВосстановления.УстановитьПароль( пПараметры["Current_SQL.Password"] );
|
|
выполнениеВосстановления.УстановитьИмяБазы( пПараметры["Current_SQL.Base"] );
|
|
|
|
результат = выполнениеВосстановления.ВыполнитьСкрипт( пПараметры["Script_Restore"] );
|
|
|
|
Если Не результат Тогда
|
|
ЗавершитьРаботу(1);
|
|
КонецЕсли;
|
|
|
|
_Замер.СообщитьЗамер( "Выполнено восстановление");
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура УдалитьФайлБекапа( Знач пПараметры )
|
|
|
|
Если Не пПараметры["Current_SQL.DelBackup"] = Истина Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
_Замер.НачатьЗамер( "Удаление файла бекапа", "УдалениеБекапа" );
|
|
|
|
Если ОбщегоНазначения.ФайлСуществует( пПараметры["FileBackup"] ) Тогда
|
|
|
|
УдалитьФайлы( пПараметры["FileBackup"] );
|
|
|
|
КонецЕсли;
|
|
|
|
_Замер.СообщитьЗамер( "Удален бекап" );
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ПереподключитьХранилище( Знач пПараметры)
|
|
|
|
Если Не пПараметры["Current_Repo.Blind"] = Истина Тогда
|
|
Возврат;
|
|
КонецЕсли;
|
|
|
|
_Замер.НачатьЗамер( "ОтключениеОтХранилища" );
|
|
|
|
Конфигуратор = Новый УправлениеКонфигуратором;
|
|
|
|
Если _Лог.Уровень() = УровниЛога.Отладка Тогда
|
|
|
|
логSQL = Логирование.ПолучитьЛог("oscript.lib.v8runner");
|
|
логSQL.УстановитьУровень( УровниЛога.Отладка );
|
|
|
|
КонецЕсли;
|
|
|
|
Конфигуратор.УстановитьКонтекст(пПараметры["Current_Base.Connect"], пПараметры["Current_Base.User"], пПараметры["Current_Base.Password"]);
|
|
Конфигуратор.ПутьКПлатформе1С( пПараметры["EXE1CV8"] );
|
|
|
|
Если ЗначениеЗаполнено( пПараметры["Current_Base.EPF"] )
|
|
И ОбщегоНазначения.ФайлСуществует( пПараметры["Current_Base.EPF"] ) Тогда
|
|
|
|
_Замер.НачатьЗамер( "Выполнение обработки перед переподключением", "ВыполнениеОбработки" );
|
|
|
|
ДополнительныеКлючи = "/Execute" + ОбщегоНазначения.ОбернутьВКавычки( пПараметры["Current_Base.EPF"] );
|
|
|
|
Конфигуратор.ЗапуститьВРежимеПредприятия("", Неопределено, ДополнительныеКлючи);
|
|
Текст = Конфигуратор.ВыводКоманды();
|
|
Если Не ПустаяСтрока(Текст) Тогда
|
|
_Лог.Информация(Текст);
|
|
КонецЕсли;
|
|
|
|
_Замер.СообщитьЗамер( "Выполнена обработка" );
|
|
|
|
КонецЕсли;
|
|
|
|
_Замер.НачатьЗамер( "Начало отключения от хранилища", "ОтключениеОтХранилища" );
|
|
|
|
Конфигуратор.ОтключитьсяОтХранилища();
|
|
Текст = Конфигуратор.ВыводКоманды();
|
|
Если Не ПустаяСтрока(Текст) Тогда
|
|
_Лог.Информация(Текст);
|
|
КонецЕсли;
|
|
|
|
_Замер.СообщитьЗамер( "Отключено от хранилища" );
|
|
|
|
_Замер.НачатьЗамер( "Подключение к хранилищу", "ПодключениеКХранилищу" );
|
|
|
|
Конфигуратор.ПодключитьсяКХранилищу(пПараметры["Current_Repo.Connect"], пПараметры["Current_Repo.User"], пПараметры["Current_Repo.Password"], Истина );
|
|
Текст = Конфигуратор.ВыводКоманды();
|
|
Если Не ПустаяСтрока(Текст) Тогда
|
|
_Лог.Информация(Текст);
|
|
КонецЕсли;
|
|
|
|
_Замер.СообщитьЗамер( "Подключено к хранилищу" );
|
|
|
|
Если пПараметры["Current_Repo.UpdateCfg"] Тогда
|
|
|
|
_Замер.НачатьЗамер( "Начало обновления конфигурации", "ОбновлениеКонфигурации" );
|
|
|
|
Конфигуратор.ОбновитьКонфигурациюБазыДанныхИзХранилища(пПараметры["Current_Repo.Connect"], пПараметры["Current_Repo.User"], пПараметры["Current_Repo.Password"] );
|
|
Текст = Конфигуратор.ВыводКоманды();
|
|
Если Не ПустаяСтрока(Текст) Тогда
|
|
_Лог.Информация(Текст);
|
|
КонецЕсли;
|
|
|
|
_Замер.СообщитьЗамер( "Конфигурация обновлена" );
|
|
|
|
КонецЕсли;
|
|
|
|
файлИнформаци = Конфигуратор.ФайлИнформации();
|
|
|
|
Если ОбщегоНазначения.ФайлСуществует( файлИнформаци ) Тогда
|
|
УдалитьФайлы( файлИнформаци );
|
|
КонецЕсли;
|
|
|
|
КонецПроцедуры
|
|
|
|
Процедура ВыполнитьКоманду(Знач пАргументы)
|
|
|
|
параметры = Инициализация( пАргументы );
|
|
|
|
ВыполнитьБекап( параметры );
|
|
|
|
ПроверитьСоединения( параметры );
|
|
|
|
ВыполнитьВосстановление( параметры );
|
|
|
|
УдалитьФайлБекапа( параметры );
|
|
|
|
ПереподключитьХранилище( параметры );
|
|
|
|
_Замер.СообщитьЗавершение();
|
|
|
|
КонецПроцедуры
|
|
|
|
_Лог = Логирование.ПолучитьЛог(ИмяЛога());
|
|
|
|
ВыполнитьКоманду(АргументыКоманднойСтроки); |