Предоставляет доступ к свойствам рабочего процесса. Требуется наличие запущенного сервера администрирования (ras).
Полное описание, параметры и ограничения
АдминистрированиеРабочийПроцесс (AdministrationWorkProcess)
АдминистрированиеРабочийПроцесс (AdministrationWorkProcess)
Доступен, начиная с версии 8.3.14.
Свойства:
Активен (Running)
Включен (TurnedOn)
ВремяЗапуска (StartTime)
ВремяПревышенияПоПамяти (MemoryUsageExcessTime)
ДоступнаяПроизводительность (AvailablePerformance)
ИдентификаторПроцесса (ProcessID)
ИдентификаторРабочегоПроцесса (WorkProcessID)
ИмяКомпьютера (ComputerName)
Лицензии (Licenses)
ОтносительнаяПроизводительность (Capacity)
Порт (Port)
ПотреблениеПамяти (MemoryUsage)
Резервный (Enable)
СостояниеРабочегоПроцесса (WorkProcessStatus)
СреднееКоличествоПотоков (AverageThreadCount)
СредняяДлительностьВызова (AverageCallDuration)
СредняяДлительностьВызововСервисов (AverageServiceCallDuration)
СредняяДлительностьВызововСУБД (AverageDBMSCallsDuration)
СредняяДлительностьОбработкиВызоваРабочимПроцессом (AverageWorkProcessCallProcessingDuration)
Методы:
Выключить (TurnOff)
Описание:
Предоставляет доступ к свойствам рабочего процесса.
Требуется наличие запущенного сервера администрирования (ras).
Доступность:
Тонкий клиент, сервер, толстый клиент, интеграция.
Использование в версии:
Доступен, начиная с версии 8.3.14.
Методическая информация
Практические примеры
Показать средние длительности вызовов с правильными единицами
Три описанных в справке длительности заданы в секундах. Для четвёртого свойства справка не называет единицу: выводим исходное значение и не придумываем перевод в миллисекунды.
Где и как запускать
Управляемая форма учебной обработки; чтение совместимого ras только отдельного изолированного учебного кластера.
Подготовка
Только отдельный учебный кластер 1С:Предприятия 8.5.1.1343 с уже настроенным ras совместимой версии. Не подключайтесь к рабочему серверу для обучения.
Создайте внешнюю обработку с управляемой формой. Добавьте реквизиты АдресRAS (Строка), ПортRAS (Число), ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера (Строка). Выведите поля на форму; у элементов ввода паролей в свойствах включите Режим пароля (PasswordMode).
АдресRAS относится к машине серверного выполнения кода. Пример для ras на этой же тестовой машине: 127.0.0.1 и порт 1545; подтвердите фактические адрес и порт у администратора.
Используйте законные учётные данные учебного агента и кластера. Оставлять имя и пароль пустыми можно только если соответствующие администраторы не зарегистрированы и среда допускает такую аутентификацию.
При первом запуске оставьте ИдентификаторКластера пустым: код выведет идентификаторы и имена кластеров. Скопируйте идентификатор нужного учебного кластера в поле и повторите.
Вставьте клиентскую процедуру и серверную функцию отдельно на уровне модуля формы. Код не запускает ras и не настраивает учётные записи.
Добавьте реквизит ИдентификаторУчебногоПроцесса (Строка) и выведите его на форму. Создайте команду с именем клиентской процедуры соответствующего примера.
После выбора учебного кластера оставьте UUID процесса пустым: получите список UUID/PID. Вставьте UUID нужного процесса, не PID Windows, затем повторите.
Код только читает процесс учебного кластера. Не останавливает/перезапускает процессы, не записывает настройки и не меняет распределение клиентов.
&НаКлиенте
Процедура ПрочитатьДлительностиПроцесса(Команда)
Результат = ПрочитатьДлительностиПроцессаНаСервере(АдресRAS, ПортRAS, ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера, ИдентификаторУчебногоПроцесса);
Сообщить(Результат);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПрочитатьДлительностиПроцессаНаСервере(АдресRAS, ПортRAS, ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера, ИдентификаторУчебногоПроцесса)
Сервер = Новый АдминистрированиеСервера(АдресRAS, ПортRAS);
Сервер.ВыполнитьАутентификацию(ПарольАгента, ИмяАгента);
Кластеры = Сервер.ПолучитьКластеры();
Если Не ЗначениеЗаполнено(ИдентификаторКластера) Тогда
Строки = Новый Массив;
Для Каждого Элемент Из Кластеры Цикл
Строки.Добавить(Строка(Элемент.ИдентификаторКластера) + " — " + Элемент.Имя);
КонецЦикла;
Если Строки.Количество() = 0 Тогда
Возврат "Кластеров нет";
КонецЕсли;
Возврат СтрСоединить(Строки, Символы.ПС);
КонецЕсли;
Кластер = Неопределено;
Для Каждого Элемент Из Кластеры Цикл
Если НРег(Строка(Элемент.ИдентификаторКластера)) = НРег(СокрЛП(ИдентификаторКластера)) Тогда
Кластер = Элемент;
Прервать;
КонецЕсли;
КонецЦикла;
Если Кластер = Неопределено Тогда
ВызватьИсключение "Указанный учебный кластер не найден";
КонецЕсли;
Кластер.ВыполнитьАутентификацию(ИмяАдминистратораКластера, ПарольАдминистратораКластера);
Процессы = Кластер.ПолучитьРабочиеПроцессы();
Если Не ЗначениеЗаполнено(ИдентификаторУчебногоПроцесса) Тогда
Строки = Новый Массив;
Для Каждого Элемент Из Процессы Цикл
Строки.Добавить(СтрШаблон("UUID=%1; PID=%2; узел=%3", Элемент.ИдентификаторРабочегоПроцесса,
Элемент.ИдентификаторПроцесса, Элемент.ИмяКомпьютера));
КонецЦикла;
Если Строки.Количество() = 0 Тогда
Возврат "Рабочих процессов в учебном кластере нет";
КонецЕсли;
Возврат СтрСоединить(Строки, Символы.ПС);
КонецЕсли;
Процесс = Неопределено;
Для Каждого Элемент Из Процессы Цикл
Если НРег(Строка(Элемент.ИдентификаторРабочегоПроцесса)) = НРег(СокрЛП(ИдентификаторУчебногоПроцесса)) Тогда
Процесс = Элемент;
Прервать;
КонецЕсли;
КонецЦикла;
Если Процесс = Неопределено Тогда
ВызватьИсключение "Рабочий процесс с данным UUID не найден в выбранном учебном кластере";
КонецЕсли;
Строки = Новый Массив;
Строки.Добавить(СтрШаблон("Среднее обслуживание клиента: %1 с (%2 мс)",
Процесс.СредняяДлительностьВызова, Процесс.СредняяДлительностьВызова * 1000));
Строки.Добавить("Среднее обращение к rmngr, с: " + Строка(Процесс.СредняяДлительностьВызововСервисов));
Строки.Добавить("Среднее обращение к СУБД, с: " + Строка(Процесс.СредняяДлительностьВызововСУБД));
Строки.Добавить("СредняяДлительностьОбработкиВызоваРабочимПроцессом, исходная величина без неподтверждённого перевода: "
+ Строка(Процесс.СредняяДлительностьОбработкиВызоваРабочимПроцессом));
Возврат СтрСоединить(Строки, Символы.ПС);
КонецФункцииРазбор по шагам
Обслуживание клиента показываем в исходных секундах и явно переводим только это значение умножением на 1000.
Обращения к rmngr и СУБД читаем отдельными показателями со своими подписями секунд.
Для обработки вызова рабочим процессом локальная справка не уточняет единицу. До отдельной проверки не присваиваем ей единицу по соседним именам.
Не складываем все показатели в выдуманное общее время: они имеют разный смысл и могут не образовывать независимые части.
Как проверить результат
Четыре строки показаны; миллисекунды первой равны секундам ×1000.
Для четвёртой строки нет выдуманных с/мс; конкретные значения заранее не заданы и должны соответствовать выбранному процессу.
Ожидаемый результат
Показаны четыре средних длительности с явной границей подтверждённых единиц.
На что обратить внимание
Средние значения не показывают самый медленный вызов и не идентифицируют конкретный SQL-запрос.
Одинаковое слово Длительность у разных административных API не гарантирует одинаковую единицу.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Разделить «должен работать», «работает» и резервный процесс
Включен задаёт намерение кластера, Активен — текущую активность. Это разные признаки, особенно во время перехода или ожидания завершения клиентов.
Где и как запускать
Управляемая форма учебной обработки; чтение совместимого ras только отдельного изолированного учебного кластера.
Подготовка
Только отдельный учебный кластер 1С:Предприятия 8.5.1.1343 с уже настроенным ras совместимой версии. Не подключайтесь к рабочему серверу для обучения.
Создайте внешнюю обработку с управляемой формой. Добавьте реквизиты АдресRAS (Строка), ПортRAS (Число), ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера (Строка). Выведите поля на форму; у элементов ввода паролей в свойствах включите Режим пароля (PasswordMode).
АдресRAS относится к машине серверного выполнения кода. Пример для ras на этой же тестовой машине: 127.0.0.1 и порт 1545; подтвердите фактические адрес и порт у администратора.
Используйте законные учётные данные учебного агента и кластера. Оставлять имя и пароль пустыми можно только если соответствующие администраторы не зарегистрированы и среда допускает такую аутентификацию.
При первом запуске оставьте ИдентификаторКластера пустым: код выведет идентификаторы и имена кластеров. Скопируйте идентификатор нужного учебного кластера в поле и повторите.
Вставьте клиентскую процедуру и серверную функцию отдельно на уровне модуля формы. Код не запускает ras и не настраивает учётные записи.
Добавьте реквизит ИдентификаторУчебногоПроцесса (Строка) и выведите его на форму. Создайте команду с именем клиентской процедуры соответствующего примера.
После выбора учебного кластера оставьте UUID процесса пустым: получите список UUID/PID. Вставьте UUID нужного процесса, не PID Windows, затем повторите.
Код только читает процесс учебного кластера. Не останавливает/перезапускает процессы, не записывает настройки и не меняет распределение клиентов.
&НаКлиенте
Процедура ПрочитатьСостояниеПроцесса(Команда)
Результат = ПрочитатьСостояниеПроцессаНаСервере(АдресRAS, ПортRAS, ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера, ИдентификаторУчебногоПроцесса);
Сообщить(Результат);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПрочитатьСостояниеПроцессаНаСервере(АдресRAS, ПортRAS, ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера, ИдентификаторУчебногоПроцесса)
Сервер = Новый АдминистрированиеСервера(АдресRAS, ПортRAS);
Сервер.ВыполнитьАутентификацию(ПарольАгента, ИмяАгента);
Кластеры = Сервер.ПолучитьКластеры();
Если Не ЗначениеЗаполнено(ИдентификаторКластера) Тогда
Строки = Новый Массив;
Для Каждого Элемент Из Кластеры Цикл
Строки.Добавить(Строка(Элемент.ИдентификаторКластера) + " — " + Элемент.Имя);
КонецЦикла;
Если Строки.Количество() = 0 Тогда
Возврат "Кластеров нет";
КонецЕсли;
Возврат СтрСоединить(Строки, Символы.ПС);
КонецЕсли;
Кластер = Неопределено;
Для Каждого Элемент Из Кластеры Цикл
Если НРег(Строка(Элемент.ИдентификаторКластера)) = НРег(СокрЛП(ИдентификаторКластера)) Тогда
Кластер = Элемент;
Прервать;
КонецЕсли;
КонецЦикла;
Если Кластер = Неопределено Тогда
ВызватьИсключение "Указанный учебный кластер не найден";
КонецЕсли;
Кластер.ВыполнитьАутентификацию(ИмяАдминистратораКластера, ПарольАдминистратораКластера);
Процессы = Кластер.ПолучитьРабочиеПроцессы();
Если Не ЗначениеЗаполнено(ИдентификаторУчебногоПроцесса) Тогда
Строки = Новый Массив;
Для Каждого Элемент Из Процессы Цикл
Строки.Добавить(СтрШаблон("UUID=%1; PID=%2; узел=%3", Элемент.ИдентификаторРабочегоПроцесса,
Элемент.ИдентификаторПроцесса, Элемент.ИмяКомпьютера));
КонецЦикла;
Если Строки.Количество() = 0 Тогда
Возврат "Рабочих процессов в учебном кластере нет";
КонецЕсли;
Возврат СтрСоединить(Строки, Символы.ПС);
КонецЕсли;
Процесс = Неопределено;
Для Каждого Элемент Из Процессы Цикл
Если НРег(Строка(Элемент.ИдентификаторРабочегоПроцесса)) = НРег(СокрЛП(ИдентификаторУчебногоПроцесса)) Тогда
Процесс = Элемент;
Прервать;
КонецЕсли;
КонецЦикла;
Если Процесс = Неопределено Тогда
ВызватьИсключение "Рабочий процесс с данным UUID не найден в выбранном учебном кластере";
КонецЕсли;
Строки = Новый Массив;
Строки.Добавить("Должен быть запущен: " + Строка(Процесс.Включен));
Строки.Добавить("Активен сейчас: " + Строка(Процесс.Активен));
Строки.Добавить("Резервный: " + Строка(Процесс.Резервный));
Строки.Добавить("Состояние: " + Строка(Процесс.СостояниеРабочегоПроцесса));
Если Процесс.ВремяЗапуска = Дата(1, 1, 1) Тогда
Строки.Добавить("Время запуска не задано: процесс не запущен");
Иначе
Строки.Добавить("Время запуска: " + Формат(Процесс.ВремяЗапуска, "ДФ=dd.MM.yyyy HH:mm:ss"));
КонецЕсли;
Возврат СтрСоединить(Строки, Символы.ПС);
КонецФункцииРазбор по шагам
Включен/Активен/Резервный выводим раздельно, не присваиваем им значения.
Нулевая дата обрабатывается до форматирования как отсутствие запуска.
СостояниеРабочегоПроцесса — отдельное значение платформы, не замена трём булевым флагам.
Как проверить результат
Пять строк отражают фактические признаки выбранного учебного процесса; заранее одинаковые значения не обещаем.
Для неработающего процесса нулевая дата показана сообщением, не как реальная дата запуска в первом году.
Ожидаемый результат
Получена согласованная диагностика жизненного состояния процесса.
На что обратить внимание
Включен = Истина не гарантирует, что запуск уже завершился или что процесс может принять любой запрос.
Не пытайтесь «исправить» переходное состояние присваиванием флага: здесь readonly-диагностика.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.