1. Работа внешней обработки.
При запуске обработки автоматически заполняются реквизиты "Адрес сервера" и "Имя базы". При необходимости эти данные можно поменять в ручную и подключиться к другой базе. Если запустить обработку на файловой конфигурации, то эти реквизиты необходимо занести в ручную. Если на кластер 1С установлен пароль администратора, то его пароль и логин заносятся в реквизиты "Пароль" и "Имя администратора".
В реквизит "Время опроса мин", заносится период опроса сеансов базы данных. Минимальное время 1 мин. Если разница во времени между текущим временем и временем последней активности сеанса будет больше установленого числа в реквизите "Время неактивности сеанса мин", то сеанс будет считаться не активным и будет удален.
Реквизиты "Мониторинг запущен" и "Количество опросов" с момента запуска мониторинга, являются информационными.
Управление обработкой осуществляется кнопками:
"Одиночный опрос"- осуществляет один опос сеансов пользователей базы;
"Начать мониторинг" - запускает непрерывный опрос сеансов пользователей с частотой 1 раз в период установленный в реквизите "Время опроса мин" ;
"Остановить мониторинг" - останавливает мониторинг сеансов пользователей.
Кроме не активных сеансов будут удаляться сеансы повторно запущенных пользователями "тонкого" и "толстого" клиентов. Удален будет сеанс с наименьшим временем активности. Таким образом реализована политика "Один сеанс в одни руки"
Таблица "ПротоколУдаленияСеансов", содержит строки удаленных сеансов базы данных.
2. Работа в режиме фонового задания
Для работы обработки в режиме фонового задания, её необходимо установить в дополнительные обработки и настроить расписание запуска.
После этого в "Регламентных и фоновых заданиях" выбрать пользователя с правами "Администратор", под которым будет запускаться обработка.
При необходимости отредактировать код вызова процедуры мониторинга. Заполняем ИмяАдминистратора и ПарольАдминистратора, если они установлены и меняем ВремяНеактивностиСеансаМин, по умолчанию 80 мин.
Перем Команда_Мониторинг_Сеансов Экспорт;
Перем ТабУдалСеансов;
Перем ПутьКПротоколуУдаленияСеансов;
Функция СведенияОВнешнейОбработке() Экспорт
РегистрационныеДанные = Новый Структура;
РегистрационныеДанные.Вставить("Вид", "ДополнительнаяОбработка");
РегистрационныеДанные.Вставить("Наименование", "Мониторинг сеансов в фоне");
РегистрационныеДанные.Вставить("Версия", "1.0");
РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);
РегистрационныеДанные.Вставить("Информация", "Мониторинг сеансов в фоне");
ТЗКоманды = Новый ТаблицаЗначений;
ТЗКоманды.Колонки.Добавить("Идентификатор");
ТЗКоманды.Колонки.Добавить("Представление");
ТЗКоманды.Колонки.Добавить("Модификатор");
ТЗКоманды.Колонки.Добавить("ПоказыватьОповещение");
ТЗКоманды.Колонки.Добавить("Использование");
СтрокаКоманды = ТЗКоманды.Добавить();
СтрокаКоманды.Представление = "Мониторинг сеансов в фоне";
СтрокаКоманды.ПоказыватьОповещение = Ложь;
СтрокаКоманды.Использование = "ВызовСерверногоМетода";
СтрокаКоманды.Идентификатор = "Команда_Мониторинг_Сеансов";
РегистрационныеДанные.Вставить("Команды", ТЗКоманды);
Возврат РегистрационныеДанные;
КонецФункции
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
УстановитьПривилегированныйРежим(Истина);
ПараметрыСеанса.ПризнакОтключенияКонтроляНастроек = Истина;
Если ИдентификаторКоманды = Команда_Мониторинг_Сеансов Тогда
// Здесь редактируем параметры запуска процедуры мониторинга
НачатьМониторингСеансов(,,,80);
КонецЕсли;
ПараметрыСеанса.ПризнакОтключенияКонтроляНастроек = Ложь;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Функция НачатьМониторингСеансов(ИмяАдминистратора="", ПарольАдминистратора="", ЗапускИзФормы=Ложь, ВремяНеактивностиСеансаМин=60) Экспорт
С настройкой вызова все. Но если мы хотим писать протокол удаленных сеансов то необходимо в переменную ПутьКПротоколуУдаленияСеансов записать путь к папке на сервере 1с для файла, в который будет писаться информация по удаленным сеансам всех баз данных с установленным фоновым заданием "Мониторинг сеансов в фоне".
Процедура ЗаполнитьПротоколУдаления()
КаталогНаДиске = Новый Файл(ПутьКПротоколуУдаленияСеансов);
Если не КаталогНаДиске.Существует() Тогда
Возврат;
КонецЕсли;
Текст = Новый ЗаписьТекста(ПутьКПротоколуУдаленияСеансов+"\Протокол.txt", КодировкаТекста.ANSI, Символы.ВК + Символы.ПС, Истина);
Для Каждого Строка Из ТабУдалСеансов Цикл
Текст.ЗаписатьСтроку(Строка.Пользователь+"|"+Строка.ИдСеанса+"|"+Строка.Приложение+"|"+Строка.ТипУдаления+"|"+Строка.ДатаУдаления+"|"+Строка.ИмяБазы);
КонецЦикла;
Текст.Закрыть();
КонецПроцедуры
Команда_Мониторинг_Сеансов = "Команда_Мониторинг_Сеансов";
ТабУдалСеансов = Новый ТаблицаЗначений;
ТабУдалСеансов.Колонки.Добавить("ИдСеанса", Новый ОписаниеТипов("Число"));
ТабУдалСеансов.Колонки.Добавить("Пользователь");
ТабУдалСеансов.Колонки.Добавить("Приложение");
ТабУдалСеансов.Колонки.Добавить("ТипУдаления", Новый ОписаниеТипов("Число"));
ТабУдалСеансов.Колонки.Добавить("ДатаУдаления", Новый ОписаниеТипов("Дата"));
ТабУдалСеансов.Колонки.Добавить("ИмяБазы");
//ПутьКПротоколуУдаленияСеансов = "C:\РНГ\ПротоколУдаленияСеансов";
ПутьКПротоколуУдаленияСеансов = "";
Если переменная ПутьКПротоколуУдаленияСеансов = "", то протокол , в текстовый файл "Протокол.txt", писаться не будет. Если указанная вами папка на сервере 1с отсутствует, то протокол так же не пишется. Пользователь под которым запускается обработка, как фоновое задание должен иметь права на создание и редакцию файлов в папке протоколов.
Версия 1.1
Добавлен реквизит логического типа "МониторингВсехБаз". Установка в значение "Истина" позволяет осуществлять мониторинг всех баз крастера серверов 1с.
В режиме фонового задания этот же режим достигается установкой параметра МониторингВсехБаз=Истина
//Робота по всем базам в фоне
Функция НачатьМониторингСеансов(ИмяАдминистратора="", ПарольАдминистратора="", ЗапускИзФормы=Ложь, ВремяНеактивностиСеансаМин=60, МониторингВсехБаз=Истина) Экспорт
//Функция НачатьМониторингСеансов(ИмяАдминистратора="", ПарольАдминистратора="", ЗапускИзФормы=Ложь, ВремяНеактивностиСеансаМин=60, МониторингВсехБаз=Ложь) Экспорт
В результате поставив обработку в качестве фонового задания на обну базу, мы можем удалять сеансы по всем базам крастера серверов 1с.