СеансыИнформационнойБазы (БСП)

Автор: 1С
ОбщийМодуль.АдминистрированиеКластераRAS
БСП

Сеансы информационной базы. Возвращает описания сеансов информационной базы.

// Возвращает описания сеансов информационной базы.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - Структура - структура, описывающая параметры подключения к кластеру серверов,
//                  описание см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера().
//   ПараметрыАдминистрированияИБ - Структура - структура, описывающая параметры подключения к информационной базе,
//                  описание см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера().
//   Фильтр - Описание условия фильтрации сеансов, описания которых требуется получить.
//      Варианты:
//         1. Массив структур, описывающих условия фильтрации сеансов. Поля структур, входящих в массив:
//            Свойство - Строка, имя свойства, по которому осуществляется фильтрация. Допустимые значения - см.
//               Возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса(),
//            ВидСравнения - значение системного перечисления ВидСравнения, вид сравнения значений сеансов с указанным
//               в условии фильтра. Допустимые значения:
//                  ВидСравнения.Равно,
//                  ВидСравнения.НеРавно,
//                  ВидСравнения.Больше (только для числовых значений),
//                  ВидСравнения.БольшеИлиРавно (только для числовых значений),
//                  ВидСравнения.Меньше (только для числовых значений),
//                  ВидСравнения.МеньшеИлиРавно (только для числовых значений),
//                  ВидСравнения.ВСписке,
//                  ВидСравнения.НеВСписке,
//                  ВидСравнения.Интервал (только для числовых значений),
//                  ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений),
//                  ВидСравнения.ИнтервалВключаяНачало (только для числовых значений),
//                  ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений),
//            Значение - Число, Строка, Дата, Булево, СписокЗначений, Массив, Структура - значение, с которым
//               сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке
//               в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми
//               будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы,
//               ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны
//               передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться
//               соответствующее сравнение,
//         2. Структура (упрощенный вариант), ключ - Имя свойства сеанса (см. выше), значение - значение, с которым
//            выполняется сравнение. При использовании данного варианта описания фильтра сравнение всегда выполняется на
//            равенство.
//
// Возвращаемое значение: 
//   Массив - массив структур, описывающих свойства сеансов, описание 
//                  см. АдминистрированиеКластера.СвойстваСеанса().
//
Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт
	
	ИдентификаторКластера = ИдентификаторКластера(ПараметрыАдминистрированияКластера);
	ИдентификаторИнформационнойБазы = ИдентификаторИнформационнойБазы(ИдентификаторКластера, ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ);
		
	ПараметрыКластера = ПараметрыКластера(ПараметрыАдминистрированияКластера, ИдентификаторКластера);
	
	// Лицензии для процессов.
	Команда = "process list --licenses " + ПараметрыКластера;
	ЛицензииПроцессов = Новый Соответствие;
	Для Каждого Лицензия Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойствЛицензии()) Цикл
		Лицензия.Вставить("license-type", ?(Лицензия["license-type"] = "soft", 0, 1));
		ЛицензииПроцессов.Вставить(Лицензия["process"], Лицензия); 
	КонецЦикла;
	
	// Процессы.
	Команда = "process list " + ПараметрыКластера;
	Процессы = Новый Соответствие;
	Для Каждого Процесс Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойствРабочегоПроцесса()) Цикл
		Процесс.Вставить("license", ЛицензииПроцессов[Процесс["process"]]);
		Процесс.Вставить("running", ?(Процесс["running"], 1, 0));
		Процесс.Вставить("use", ?(Процесс["use"] = "used", 1, ?(Процесс["use"] = "not-used", 0, 2)));  // "not-used" - это неточное значение.
		Процессы.Вставить(Процесс["process"], Процесс);
	КонецЦикла;
	
	// Описания соединений.
	Команда = "connection list " + ПараметрыКластера;
	ОписанияСоединений = Новый Соответствие;
	Для Каждого Соединение Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойствОписанияСоединения()) Цикл
		Соединение.Вставить("process", Процессы[Соединение["process"]]);
		ОписанияСоединений.Вставить(Соединение["connection"], Соединение);
	КонецЦикла;
	
	// Лицензии для сеансов.
	Команда = "session list --licenses " + ПараметрыКластера;
	ЛицензииСеансов = Новый Соответствие;
	Для Каждого ЛицензияСеанса Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойствЛицензии()) Цикл
		ЛицензияСеанса.Вставить("license-type", ?(ЛицензияСеанса["license-type"] = "soft", 0, 1));
		ЛицензииСеансов.Вставить(ЛицензияСеанса["session"], ЛицензияСеанса);
	КонецЦикла;
	
	// Блокировки сеансов.
	Команда = "lock list --infobase=%1 " + ПараметрыКластера;
	ПодставитьПараметрыВКоманду(Команда, ИдентификаторИнформационнойБазы);
	БлокировкиСеансов = Новый Соответствие();
	Для Каждого БлокировкаСеанса Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , , ТипыСвойствБлокировки()) Цикл
		АдминистрированиеКластера.ДанныеСеансаИзБлокировки(БлокировкиСеансов,
		                                                               БлокировкаСеанса["descr"],
		                                                               БлокировкаСеанса["session"],
		                                                               ПараметрыАдминистрированияИБ.ИмяВКластере); 

	КонецЦикла;
	
	// Сеансы.
	Команда = "session list --infobase=%1 " + ПараметрыКластера;
	ПодставитьПараметрыВКоманду(Команда, ИдентификаторИнформационнойБазы);
	Фильтр = ФильтрВНотациюRac(Фильтр, СловарьСвойствСеансов());
	Результат = Новый Массив;
	Для Каждого Сеанс Из ЗапуститьКоманду(Команда, ПараметрыАдминистрированияКластера, , Фильтр, ТипыСвойствСеансов()) Цикл
		Сеанс.Вставить("process", Процессы[Сеанс["process"]]);
		Сеанс.Вставить("license", ЛицензииСеансов[Сеанс["session"]]);
		Сеанс.Вставить("connection", ОписанияСоединений[Сеанс["connection"]]);
		РазобранныйСеанс = РазобратьЭлементВывода(Сеанс, СловарьСвойствСеансов());
		
		РазобранныйСеанс.Вставить("РежимБлокировкиБД", ?(БлокировкиСеансов[Сеанс["session"]] <> Неопределено, БлокировкиСеансов[Сеанс["session"]].РежимБлокировкиБД, ""));
		РазобранныйСеанс.Вставить("Разделитель", ?(БлокировкиСеансов[Сеанс["session"]] <> Неопределено, БлокировкиСеансов[Сеанс["session"]].Разделитель, ""));
		
		Результат.Добавить(РазобранныйСеанс);
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

СеансыИнформационнойБазы (БСП)

УдалитьСеансыИнформационнойБазы (БСП)

1С Менеджер конфигураций