Skip to content
КомандаУправлениеСеансами.os 10.2 KiB
Newer Older

///////////////////////////////////////////////////////////////////////////////////////////////////
// Прикладной интерфейс

Перем мНастройки;
Перем Лог;

Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт
	
	ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, "Управление сеансами информационной базы");
    Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "Действие", "lock|unlock|kill");
	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-ras", "Сетевой адрес RAS, по умолчанию localhost:1545");
	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-rac", "Команда запуска RAC, по умолчанию находим в каталоге установки 1с");
	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "-db", "Имя информационной базы");
	
	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, 
		"-db-user",
		"Пользователь информационной базы");

	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, 
		"-db-pwd",
		"Пароль пользователя информационной базы");
		
	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, 
		"-cluster-admin",
		"Администратор кластера");

	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, 
		"-cluster-pwd",
		"Пароль администратора кластера");
	
	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, 
		"-v8version",
		"Маска версии платформы 1С");
	
	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, 
		"-lockmessage",
		"Сообщение блокировки");
		
	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, 
		"-lockuccode",
		"Ключ разрешения запуска");
	
	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, 
		"-lockstart",
		"Время старта блокировки пользователей, время указываем как '2040-12-31T23:59:59'");
	
	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, 
		"-lockstartat",
		"Время старта блокировки через n сек");

	Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды,
        "-try",
        "Число попыток обращения по протоколу rac/ras");

	
	Парсер.ДобавитьКоманду(ОписаниеКоманды);
	
КонецПроцедуры

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

	ПрочитатьПараметры(ПараметрыКоманды);
	
	Если Не ПараметрыВведеныКорректно() Тогда
		Возврат МенеджерКомандПриложения.РезультатыКоманд().НеверныеПараметры;
	КонецЕсли;

	СерверАдминистрирования = Новый СерверАдминистрирования;

	СерверАдминистрирования.Инициализация(мНастройки.АдресСервераАдминистрирования,
	                                      мНастройки.ПутьКлиентаАдминистрирования,
	                                      мНастройки.ИмяБазыДанных,
	                                      мНастройки.АдминистраторИБ,
	                                      мНастройки.ПарольАдминистратораИБ,
	                                      мНастройки.АдминистраторКластера,
	                                      мНастройки.ПарольАдминистратораКластера,
	                                      мНастройки.ИспользуемаяВерсияПлатформы,
										  мНастройки.КлючРазрешенияЗапуска); 
	
	Если мНастройки.Действие = "lock" Тогда
		СерверАдминистрирования.УстановитьСтатусБлокировкиСеансов(Истина, мНастройки.ВремяСтартаБлокировки, мНастройки.ВремяСтартаБлокировкиЧерез, мНастройки.СообщениеОблокировке, мНастройки.ЧислоПопыток);
	ИначеЕсли мНастройки.Действие = "unlock" Тогда
		СерверАдминистрирования.УстановитьСтатусБлокировкиСеансов(Ложь, мНастройки.ВремяСтартаБлокировки, мНастройки.ВремяСтартаБлокировкиЧерез, мНастройки.СообщениеОблокировке, мНастройки.ЧислоПопыток);
	ИначеЕсли мНастройки.Действие = "kill" Тогда
		СерверАдминистрирования.УдалитьВсеСеансыИСоединенияБазы(мНастройки.ЧислоПопыток);
	Иначе
		Лог.Ошибка("Неизвестное действие: " + мНастройки.Действие);
		Возврат МенеджерКомандПриложения.РезультатыКоманд().НеверныеПараметры;
	КонецЕсли;

	Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех;
КонецФункции

Процедура ПрочитатьПараметры(Знач ПараметрыКоманды)
	мНастройки = Новый Структура;
	
	Для Каждого КЗ Из ПараметрыКоманды Цикл
		Лог.Отладка(КЗ.Ключ + " = " + КЗ.Значение);
	КонецЦикла;
	
	мНастройки.Вставить("АдресСервераАдминистрирования", ПараметрыКоманды["-ras"]);
	мНастройки.Вставить("ПутьКлиентаАдминистрирования", ПараметрыКоманды["-rac"]);
	мНастройки.Вставить("ИмяБазыДанных", ПараметрыКоманды["-db"]);
	мНастройки.Вставить("АдминистраторИБ", ПараметрыКоманды["-db-user"]);
	мНастройки.Вставить("ПарольАдминистратораИБ", ПараметрыКоманды["-db-pwd"]);
	мНастройки.Вставить("АдминистраторКластера", ПараметрыКоманды["-cluster-admin"]);
	мНастройки.Вставить("ПарольАдминистратораКластера", ПараметрыКоманды["-cluster-pwd"]);
	мНастройки.Вставить("ИспользуемаяВерсияПлатформы", ПараметрыКоманды["-v8version"]);
	мНастройки.Вставить("КлючРазрешенияЗапуска", ПараметрыКоманды["-lockuccode"]);
	мНастройки.Вставить("СообщениеОблокировке", ПараметрыКоманды["-lockmessage"]);
	мНастройки.Вставить("ВремяСтартаБлокировки", ПараметрыКоманды["-lockstart"]);
	мНастройки.Вставить("ВремяСтартаБлокировкиЧерез", ПараметрыКоманды["-lockstartat"]);
	мНастройки.Вставить("ЧислоПопыток", ПараметрыКоманды["-try"]);
		
	мНастройки.Вставить("Действие", ПараметрыКоманды["Действие"]);
КонецПроцедуры

Функция ПараметрыВведеныКорректно()
	
	Успех = Истина;
	
	Если Не ЗначениеЗаполнено(мНастройки.ИмяБазыДанных) Тогда
		Лог.Ошибка("Не указано имя базы данных");
		Успех = Ложь;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(мНастройки.Действие) Тогда
		Лог.Ошибка("Не указано действие lock/unlock");
		Успех = Ложь;
	КонецЕсли;

	Если мНастройки.ЧислоПопыток <> Неопределено Тогда
		Попытка
			ПопыткиЧислом = Число(мНастройки.ЧислоПопыток);
		Исключение
			Лог.Ошибка("Параметр -try не является числовым.");
			Успех = Ложь;
		КонецПопытки;

		Если Успех и ПопыткиЧислом <= 0 Тогда
			ПопыткиЧислом = 1;
			Лог.Предупреждение("Параметр -try не представляет собой число попыток. Он будет проигнорирован");
		КонецЕсли;

		Если Успех Тогда
			мНастройки.ЧислоПопыток = ПопыткиЧислом;
		Иначе
			мНастройки.ЧислоПопыток = 1;
		КонецЕсли;
	Иначе
		мНастройки.ЧислоПопыток = 1;
	КонецЕсли;
Nikita Gryzlov's avatar
Nikita Gryzlov committed
Лог = Логирование.ПолучитьЛог("vanessa.app.deployka");