АдминистрированиеСчетчикПотребленияРесурсов

Типы · AdministrationResourceConsumptionCounter

Предоставляет доступ к свойствам и методам счетчика потребления ресурсов. Требуется наличие запущенного сервера администрирования (ras).

Полное описание, параметры и ограничения

АдминистрированиеСчетчикПотребленияРесурсов (AdministrationResourceConsumptionCounter)

АдминистрированиеСчетчикПотребленияРесурсов (AdministrationResourceConsumptionCounter)

Доступен, начиная с версии 8.3.14.

Свойства:
Группировка (Group)
ДлительностьНакопления (CollectionTime)
ЗначениеОтбора (FilterValue)
Имя (Name)
Описание (Description)
СчитатьДлительностьВызовов (CollectCallsDuration)
СчитатьДлительностьВызововСервисов (CollectServiceCallsDuration)
СчитатьДлительностьВызововСУБД (CollectDBMSCallsDuration)
СчитатьКоличествоАктивныхСеансов (CollectActiveSessionsCount)
СчитатьКоличествоВызовов (CollectCallsCount)
СчитатьКоличествоСеансов (CollectSessionCount)
СчитатьОбъемДанныхЗаписанныхНаДиск (CollectWriteDiskDataSize)
СчитатьОбъемДанныхПереданныхИПолученныхСУБД (CollectDBMSSentAndReceivedDataSize)
СчитатьОбъемДанныхСчитанныхСДиска (CollectReadDiskDataSize)
СчитатьПотреблениеПамяти (CollectMemoryUsage)
СчитатьПроцессорноеВремя (CollectCPUTime)
ТипОтбора (FilterType)

Методы:
Записать (Write)
ОчиститьНакопленныеЗначения (ClearAccumulatedValues)
ПолучитьЗначения (GetValues)
ПолучитьНакопленныеЗначения (GetAccumulatedValues)
Удалить (Delete)

Описание:

Предоставляет доступ к свойствам и методам счетчика потребления ресурсов.
Требуется наличие запущенного сервера администрирования (ras).

Доступность:

Тонкий клиент, сервер, толстый клиент, интеграция.

См. также:
АдминистрированиеКластер, метод ПолучитьСчетчикиПотребленияРесурсов
АдминистрированиеКластер, метод СоздатьСчетчикПотребленияРесурсов

Использование в версии:

Доступен, начиная с версии 8.3.14.

Методическая информация

Практические примеры

Получить накопленные измерения за текущий день своего сервера

Запрашиваем историю собственного счётчика с документированным отбором ДатаНачала/ДатаОкончания. Сравниваем исторические значения с текущим чтением, не объединяя их в вымышленный общий итог.

Где и как запускать

Полный модуль собственной управляемой формы учебной обработки. Читает только явно выбранный УчебныйКластер85 через свой loopback ras, если вы сами запускаете его на стенде.

Подготовка

  1. Нужен отдельный собственный серверный стенд 1С 8.5.1.1343 без рабочих баз. Администратор должен заранее установить сервер, запустить совместимый ras и создать кластер с точным именем УчебныйКластер85. Код ничего не устанавливает и не регистрирует.

  2. Запускайте обработку в собственной пустой учебной конфигурации с именем метаданных УчебнаяКонфигурацияСинтаксиса. Серверное выполнение должно находиться на той же машине, что собственный ras: код разрешает только 127.0.0.1. Это адрес сервера выполнения, не обязательно компьютера тонкого клиента.

  3. Создайте учебную обработку с управляемой формой. Добавьте реквизиты формы: ПортRAS — Число без дробной части; ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера, JSONРезультат — Строка. У JSONРезультат длина 0, то есть неограниченная. ИмяАдминистратораКластера — логин, а не имя кластера.

  4. Выведите поля на форму. Для элементов ПарольАгента и ПарольАдминистратораКластера включите Режим пароля; не сохраняйте их значения в настройках и истории. Для JSONРезультат используйте многострочное поле строки только для просмотра. Маскировка ввода не шифрует пароль и не заменяет защищённый стенд.

  5. Создайте команду ПолучитьУчебныйСнимок, назначьте ей клиентский обработчик с таким же именем и вставьте весь приведённый модуль формы. Другие процедуры команд, общий модуль или готовые неизвестные объекты не нужны.

  6. ПортRAS возьмите из фактического запуска своего ras, не из порта ragent или рабочего процесса. Например, 1545 подходит только если именно этот порт настроен на вашем стенде. Используйте законные учётные данные своего агента и своего кластера; пустые допустимы только для намеренно настроенного учебного стенда без соответствующих администраторов.

  7. В первый раз оставьте ИдентификаторКластера пустым: появится JSON только с кластерами УчебныйКластер85. Скопируйте настоящий UUID из результата, вновь введите очищенные пароли и повторите команду. Кластер выбирается одновременно по UUID и точному учебному имени; чужой кластер не принимается.

  8. Для уроков счётчиков заранее штатными средствами администрирования своего стенда зарегистрируйте счётчик с точным именем УчебныйСчетчик85, выбрав нужные метрики. ПолучитьСчетчикиПотребленияРесурсов только читает уже зарегистрированные счётчики; этот код не создаёт и не включает их. Без этой отдельной подготовки будет явная ошибка, а не подставленные показания.

  9. Чтобы появились настоящие показания, откройте собственную учебную базу кластера и выполните несколько учебных действий, например константный запрос или отчёт из уроков СКД. Дождитесь накопления согласно реальной настройке счётчика. CPU, трафик, память и длительности зависят от стенда; фиксированные вымышленные значения не обещаются.

  10. Выполняйте каждый урок отдельно. JSON формируется в памяти и показывается только на своей форме; код не сохраняет файлы, не пишет настройки кластера, не прерывает сеансы и не запускает команды ОС. Он выполняет сетевое обращение к своему локальному ras только если вы сами запустите его на подготовленном стенде.

  11. Здесь подключение к ras и запуск в 1С не выполнялись. Проверены тексты, сигнатуры и привязки к локальной справке 8.5.1.1343. Пройдите контрольные действия сами только на своём учебном стенде.

&НаКлиенте
Процедура ПолучитьУчебныйСнимок(Команда)
    Попытка
        JSONРезультат = УчебныйСнимокНаСервере(ПортRAS, ИмяАгента, ПарольАгента,
            ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера);
    Исключение
        JSONРезультат = "Снимок не получен. Проверьте собственный стенд, порт, UUID, учебное имя и права. Подробную серверную ошибку исследуйте в отладчике без публикации учётных данных.";
    КонецПопытки;
    ПарольАгента = "";
    ПарольАдминистратораКластера = "";
КонецПроцедуры

&НаСервереБезКонтекста
Функция УчебныйСнимокНаСервере(ПортRAS, ИмяАгента, ПарольАгента,
    ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера)
    Если ТипЗнч(ПортRAS) <> Тип("Число") Тогда
        ВызватьИсключение "Порт ras должен быть числом";
    КонецЕсли;
    Если ПортRAS <> Цел(ПортRAS) Или ПортRAS < 1 Или ПортRAS > 65535 Тогда
        ВызватьИсключение "Недопустимый порт собственного ras";
    КонецЕсли;
    ТекстовыеПараметры = Новый Массив;
    ТекстовыеПараметры.Добавить(ИмяАгента);
    ТекстовыеПараметры.Добавить(ПарольАгента);
    ТекстовыеПараметры.Добавить(ИдентификаторКластера);
    ТекстовыеПараметры.Добавить(ИмяАдминистратораКластера);
    ТекстовыеПараметры.Добавить(ПарольАдминистратораКластера);
    Для Каждого ТекстовыйПараметр Из ТекстовыеПараметры Цикл
        Если ТипЗнч(ТекстовыйПараметр) <> Тип("Строка") Тогда
            ВызватьИсключение "Учётные данные и UUID должны быть строками";
        КонецЕсли;
    КонецЦикла;
    Агент = Новый АдминистрированиеСервера("127.0.0.1", ПортRAS);
    Агент.ВыполнитьАутентификацию(ПарольАгента, ИмяАгента);
    Кластеры = Агент.ПолучитьКластеры();
    Если ПустаяСтрока(СокрЛП(ИдентификаторКластера)) Тогда
        Каталог = Новый Массив;
        Для Каждого Найденный Из Кластеры Цикл
            Если Найденный.Имя = "УчебныйКластер85" Тогда
                СтрокаКаталога = Новый Структура;
                СтрокаКаталога.Вставить("UUID", Строка(Найденный.ИдентификаторКластера));
                СтрокаКаталога.Вставить("Имя", Найденный.Имя);
                Каталог.Добавить(СтрокаКаталога);
            КонецЕсли;
        КонецЦикла;
        Возврат СериализоватьСвойСнимок(Новый Структура("УчебныеКластеры", Каталог));
    КонецЕсли;
    Кластер = Неопределено;
    Совпадений = 0;
    Для Каждого Найденный Из Кластеры Цикл
        Если НРег(Строка(Найденный.ИдентификаторКластера)) = НРег(СокрЛП(ИдентификаторКластера))
            И Найденный.Имя = "УчебныйКластер85" Тогда
            Кластер = Найденный;
            Совпадений = Совпадений + 1;
        КонецЕсли;
    КонецЦикла;
    Если Совпадений <> 1 Тогда
        ВызватьИсключение "Нужен один собственный учебный кластер с подтверждённым UUID";
    КонецЕсли;
    Кластер.ВыполнитьАутентификацию(ИмяАдминистратораКластера, ПарольАдминистратораКластера);
    Снимок = Новый Структура;
    Снимок.Вставить("UUIDКластера", Строка(Кластер.ИдентификаторКластера));
    Снимок.Вставить("ИмяКластера", Кластер.Имя);
    СвойСчетчик = Неопределено;
    СовпаденийСчетчика = 0;
    Для Каждого Счетчик Из Кластер.ПолучитьСчетчикиПотребленияРесурсов() Цикл
        Если Счетчик.Имя = "УчебныйСчетчик85" Тогда
            СвойСчетчик = Счетчик;
            СовпаденийСчетчика = СовпаденийСчетчика + 1;
        КонецЕсли;
    КонецЦикла;
    Если СовпаденийСчетчика <> 1 Тогда
        ВызватьИсключение "Заранее зарегистрируйте один свой УчебныйСчетчик85";
    КонецЕсли;
    КонецИнтервала = ТекущаяДата();
    НачалоИнтервала = НачалоДня(КонецИнтервала);
    Отбор = Новый Структура("ДатаНачала,ДатаОкончания", НачалоИнтервала, КонецИнтервала);
    Снимок.Вставить("НачалоИнтервала", XMLСтрока(НачалоИнтервала));
    Снимок.Вставить("КонецИнтервала", XMLСтрока(КонецИнтервала));
    Строки = Новый Массив;
    Показания = СвойСчетчик.ПолучитьНакопленныеЗначения(Отбор);
    Для Каждого Значение Из Показания Цикл
        СтрокаПоказания = Новый Структура;
        СтрокаПоказания.Вставить("Время", XMLСтрока(Значение.Время));
        СтрокаПоказания.Вставить("ДлительностьВызова", Значение.ДлительностьВызова);
        СтрокаПоказания.Вставить("ДлительностьВызововСервисов", Значение.ДлительностьВызововСервисов);
        СтрокаПоказания.Вставить("ДлительностьВызововСУБД", Значение.ДлительностьВызововСУБД);
        СтрокаПоказания.Вставить("ДлительностьНакопления", Значение.ДлительностьНакопления);
        СтрокаПоказания.Вставить("КоличествоАктивныхСеансов", Значение.КоличествоАктивныхСеансов);
        СтрокаПоказания.Вставить("КоличествоВызовов", Значение.КоличествоВызовов);
        СтрокаПоказания.Вставить("КоличествоСеансов", Значение.КоличествоСеансов);
        СтрокаПоказания.Вставить("Объект", Значение.Объект);
        СтрокаПоказания.Вставить("ОбъемДанныхЗаписанныхНаДиск", Значение.ОбъемДанныхЗаписанныхНаДиск);
        СтрокаПоказания.Вставить("ОбъемДанныхПереданныхИПолученныхСУБД", Значение.ОбъемДанныхПереданныхИПолученныхСУБД);
        СтрокаПоказания.Вставить("ОбъемДанныхСчитанныхСДиска", Значение.ОбъемДанныхСчитанныхСДиска);
        СтрокаПоказания.Вставить("ПотреблениеПамяти", Значение.ПотреблениеПамяти);
        СтрокаПоказания.Вставить("ПроцессорноеВремя", Значение.ПроцессорноеВремя);
        СтрокаПоказания.Вставить("CPUСекунды", Значение.ПроцессорноеВремя / 1000);
        СтрокаПоказания.Вставить("ПамятьMiB", Значение.ПотреблениеПамяти / 1024 / 1024);
        Строки.Добавить(СтрокаПоказания);
    КонецЦикла;
    Снимок.Вставить("ИмяСчетчика", СвойСчетчик.Имя);
    Снимок.Вставить("КоличествоПоказаний", Показания.Количество());
    Снимок.Вставить("Показания", Строки);
    Возврат СериализоватьСвойСнимок(Снимок);
КонецФункции

&НаСервереБезКонтекста
Функция СериализоватьСвойСнимок(Снимок)
    Писатель = Новый ЗаписьJSON;
    Писатель.УстановитьСтроку();
    ЗаписатьJSON(Писатель, Снимок);
    Возврат Писатель.Закрыть();
КонецФункции

Разбор по шагам

  1. Проверка имени учебной конфигурации и числового порта выполняется до создания соединения. Удалённый адрес не принимается: 127.0.0.1 записан в серверном коде.

  2. У агента порядок аутентификации — пароль, имя; у кластера — имя, пароль. Два вызова имеют разные контракты и не взаимозаменяемы.

  3. Пустой UUID запускает только каталог собственных учебных кластеров. Повторный запуск выбирает один кластер по реальному UUID и точному имени, не первый элемент массива.

  4. В JSON попадают только явно перечисленные диагностические поля. Объект администрирования целиком не сериализуется; пароли и сырая ошибка аутентификации не выводятся.

  5. После любого исхода клиент очищает два поля пароля. Для следующего запуска их нужно вводить заново; остальные параметры и результат остаются на своей форме.

  6. Выбираем один собственный зарегистрированный счётчик, а не произвольный объект из чужого снимка.

  7. На сервере один раз получаем конец интервала. НачалоДня от этой даты даёт начало того же календарного дня сервера; нет двух независимых чтений часов около полуночи.

  8. Структура отбора содержит точные документированные ключи ДатаНачала и ДатаОкончания, оба типа Дата. Ключ Объект не задан, поэтому возвращаются экземпляры выбранного собственного счётчика в этом окне.

  9. ПолучитьНакопленныеЗначения — самостоятельный метод истории, не ПолучитьЗначения с дополнительным аргументом. Все реальные строки сохраняем с их временем и идентификатором объекта.

  10. Единицы длительности, CPU, памяти и трафика трактуются так же, как в уроке текущих значений. Не суммируем подряд значения памяти или количества активных сеансов как расход за день.

Как проверить результат

  1. НачалоИнтервала и КонецИнтервала соответствуют одному дню собственного сервера; число показаний совпадает с длиной массива.

  2. Пустая история допустима, если накопление ещё не произошло, выбранный период пуст или счётчик не собирал нужные метрики. Вымышленных данных нет.

  3. Сопоставьте время и Объект строк с собственной консолью и предыдущим уроком. Этот код не обещает включённость обеих границ интервала, если такое правило не указано в справке.

Ожидаемый результат

Получена реальная история своего счётчика в явно заданном серверном календарном окне, без очистки накопленных данных.

На что обратить внимание

  1. Имя и loopback-адрес — защитные условия учебного сценария, не замена правам администратора и сетевой защите. Не переименовывайте рабочий кластер ради обхода проверки.

  2. Свойства настроек могут быть записываемыми, но этот урок их только читает. Нет Записать, Удалить, Прервать или Отключить и нет автоматического исправления конфигурации.

  3. Снимок меняется со временем. Пустая коллекция и нулевое показание имеют разные причины; проверяйте подготовку, включённые метрики и интервалы наблюдения.

  4. Расширенная серверная ошибка может содержать чувствительные сведения. Клиент показывает нейтральную причину; диагностируйте свой стенд в отладчике, не публикуя учётные данные.

  5. Платформа и ras должны соответствовать установленной версии. Чтение свойства не доказывает, что этот параметр используется текущей версией сервера.

  6. Дата сервера может отличаться от даты клиентского компьютера. Не объявляйте окно пользовательским часовым поясом без отдельного преобразования.

  7. Исторические строки могут быть моментными или накопленными по настройкам счётчика. Их нельзя без анализа складывать в суммы по всем показателям.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Прочитать настоящие текущие значения своего счётчика

Своё определение счётчика доводим до реальных показаний: время, объект, вызовы, сеансы, CPU, память и трафик. Переводим только документированные единицы, не выдумываем проценты загрузки.

Где и как запускать

Полный модуль собственной управляемой формы учебной обработки. Читает только явно выбранный УчебныйКластер85 через свой loopback ras, если вы сами запускаете его на стенде.

Подготовка

  1. Нужен отдельный собственный серверный стенд 1С 8.5.1.1343 без рабочих баз. Администратор должен заранее установить сервер, запустить совместимый ras и создать кластер с точным именем УчебныйКластер85. Код ничего не устанавливает и не регистрирует.

  2. Запускайте обработку в собственной пустой учебной конфигурации с именем метаданных УчебнаяКонфигурацияСинтаксиса. Серверное выполнение должно находиться на той же машине, что собственный ras: код разрешает только 127.0.0.1. Это адрес сервера выполнения, не обязательно компьютера тонкого клиента.

  3. Создайте учебную обработку с управляемой формой. Добавьте реквизиты формы: ПортRAS — Число без дробной части; ИмяАгента, ПарольАгента, ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера, JSONРезультат — Строка. У JSONРезультат длина 0, то есть неограниченная. ИмяАдминистратораКластера — логин, а не имя кластера.

  4. Выведите поля на форму. Для элементов ПарольАгента и ПарольАдминистратораКластера включите Режим пароля; не сохраняйте их значения в настройках и истории. Для JSONРезультат используйте многострочное поле строки только для просмотра. Маскировка ввода не шифрует пароль и не заменяет защищённый стенд.

  5. Создайте команду ПолучитьУчебныйСнимок, назначьте ей клиентский обработчик с таким же именем и вставьте весь приведённый модуль формы. Другие процедуры команд, общий модуль или готовые неизвестные объекты не нужны.

  6. ПортRAS возьмите из фактического запуска своего ras, не из порта ragent или рабочего процесса. Например, 1545 подходит только если именно этот порт настроен на вашем стенде. Используйте законные учётные данные своего агента и своего кластера; пустые допустимы только для намеренно настроенного учебного стенда без соответствующих администраторов.

  7. В первый раз оставьте ИдентификаторКластера пустым: появится JSON только с кластерами УчебныйКластер85. Скопируйте настоящий UUID из результата, вновь введите очищенные пароли и повторите команду. Кластер выбирается одновременно по UUID и точному учебному имени; чужой кластер не принимается.

  8. Для уроков счётчиков заранее штатными средствами администрирования своего стенда зарегистрируйте счётчик с точным именем УчебныйСчетчик85, выбрав нужные метрики. ПолучитьСчетчикиПотребленияРесурсов только читает уже зарегистрированные счётчики; этот код не создаёт и не включает их. Без этой отдельной подготовки будет явная ошибка, а не подставленные показания.

  9. Чтобы появились настоящие показания, откройте собственную учебную базу кластера и выполните несколько учебных действий, например константный запрос или отчёт из уроков СКД. Дождитесь накопления согласно реальной настройке счётчика. CPU, трафик, память и длительности зависят от стенда; фиксированные вымышленные значения не обещаются.

  10. Выполняйте каждый урок отдельно. JSON формируется в памяти и показывается только на своей форме; код не сохраняет файлы, не пишет настройки кластера, не прерывает сеансы и не запускает команды ОС. Он выполняет сетевое обращение к своему локальному ras только если вы сами запустите его на подготовленном стенде.

  11. Здесь подключение к ras и запуск в 1С не выполнялись. Проверены тексты, сигнатуры и привязки к локальной справке 8.5.1.1343. Пройдите контрольные действия сами только на своём учебном стенде.

&НаКлиенте
Процедура ПолучитьУчебныйСнимок(Команда)
    Попытка
        JSONРезультат = УчебныйСнимокНаСервере(ПортRAS, ИмяАгента, ПарольАгента,
            ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера);
    Исключение
        JSONРезультат = "Снимок не получен. Проверьте собственный стенд, порт, UUID, учебное имя и права. Подробную серверную ошибку исследуйте в отладчике без публикации учётных данных.";
    КонецПопытки;
    ПарольАгента = "";
    ПарольАдминистратораКластера = "";
КонецПроцедуры

&НаСервереБезКонтекста
Функция УчебныйСнимокНаСервере(ПортRAS, ИмяАгента, ПарольАгента,
    ИдентификаторКластера, ИмяАдминистратораКластера, ПарольАдминистратораКластера)
    Если ТипЗнч(ПортRAS) <> Тип("Число") Тогда
        ВызватьИсключение "Порт ras должен быть числом";
    КонецЕсли;
    Если ПортRAS <> Цел(ПортRAS) Или ПортRAS < 1 Или ПортRAS > 65535 Тогда
        ВызватьИсключение "Недопустимый порт собственного ras";
    КонецЕсли;
    ТекстовыеПараметры = Новый Массив;
    ТекстовыеПараметры.Добавить(ИмяАгента);
    ТекстовыеПараметры.Добавить(ПарольАгента);
    ТекстовыеПараметры.Добавить(ИдентификаторКластера);
    ТекстовыеПараметры.Добавить(ИмяАдминистратораКластера);
    ТекстовыеПараметры.Добавить(ПарольАдминистратораКластера);
    Для Каждого ТекстовыйПараметр Из ТекстовыеПараметры Цикл
        Если ТипЗнч(ТекстовыйПараметр) <> Тип("Строка") Тогда
            ВызватьИсключение "Учётные данные и UUID должны быть строками";
        КонецЕсли;
    КонецЦикла;
    Агент = Новый АдминистрированиеСервера("127.0.0.1", ПортRAS);
    Агент.ВыполнитьАутентификацию(ПарольАгента, ИмяАгента);
    Кластеры = Агент.ПолучитьКластеры();
    Если ПустаяСтрока(СокрЛП(ИдентификаторКластера)) Тогда
        Каталог = Новый Массив;
        Для Каждого Найденный Из Кластеры Цикл
            Если Найденный.Имя = "УчебныйКластер85" Тогда
                СтрокаКаталога = Новый Структура;
                СтрокаКаталога.Вставить("UUID", Строка(Найденный.ИдентификаторКластера));
                СтрокаКаталога.Вставить("Имя", Найденный.Имя);
                Каталог.Добавить(СтрокаКаталога);
            КонецЕсли;
        КонецЦикла;
        Возврат СериализоватьСвойСнимок(Новый Структура("УчебныеКластеры", Каталог));
    КонецЕсли;
    Кластер = Неопределено;
    Совпадений = 0;
    Для Каждого Найденный Из Кластеры Цикл
        Если НРег(Строка(Найденный.ИдентификаторКластера)) = НРег(СокрЛП(ИдентификаторКластера))
            И Найденный.Имя = "УчебныйКластер85" Тогда
            Кластер = Найденный;
            Совпадений = Совпадений + 1;
        КонецЕсли;
    КонецЦикла;
    Если Совпадений <> 1 Тогда
        ВызватьИсключение "Нужен один собственный учебный кластер с подтверждённым UUID";
    КонецЕсли;
    Кластер.ВыполнитьАутентификацию(ИмяАдминистратораКластера, ПарольАдминистратораКластера);
    Снимок = Новый Структура;
    Снимок.Вставить("UUIDКластера", Строка(Кластер.ИдентификаторКластера));
    Снимок.Вставить("ИмяКластера", Кластер.Имя);
    СвойСчетчик = Неопределено;
    СовпаденийСчетчика = 0;
    Для Каждого Счетчик Из Кластер.ПолучитьСчетчикиПотребленияРесурсов() Цикл
        Если Счетчик.Имя = "УчебныйСчетчик85" Тогда
            СвойСчетчик = Счетчик;
            СовпаденийСчетчика = СовпаденийСчетчика + 1;
        КонецЕсли;
    КонецЦикла;
    Если СовпаденийСчетчика <> 1 Тогда
        ВызватьИсключение "Заранее зарегистрируйте один свой УчебныйСчетчик85";
    КонецЕсли;
    Строки = Новый Массив;
    Показания = СвойСчетчик.ПолучитьЗначения();
    Для Каждого Значение Из Показания Цикл
        СтрокаПоказания = Новый Структура;
        СтрокаПоказания.Вставить("Время", XMLСтрока(Значение.Время));
        СтрокаПоказания.Вставить("ДлительностьВызова", Значение.ДлительностьВызова);
        СтрокаПоказания.Вставить("ДлительностьВызововСервисов", Значение.ДлительностьВызововСервисов);
        СтрокаПоказания.Вставить("ДлительностьВызововСУБД", Значение.ДлительностьВызововСУБД);
        СтрокаПоказания.Вставить("ДлительностьНакопления", Значение.ДлительностьНакопления);
        СтрокаПоказания.Вставить("КоличествоАктивныхСеансов", Значение.КоличествоАктивныхСеансов);
        СтрокаПоказания.Вставить("КоличествоВызовов", Значение.КоличествоВызовов);
        СтрокаПоказания.Вставить("КоличествоСеансов", Значение.КоличествоСеансов);
        СтрокаПоказания.Вставить("Объект", Значение.Объект);
        СтрокаПоказания.Вставить("ОбъемДанныхЗаписанныхНаДиск", Значение.ОбъемДанныхЗаписанныхНаДиск);
        СтрокаПоказания.Вставить("ОбъемДанныхПереданныхИПолученныхСУБД", Значение.ОбъемДанныхПереданныхИПолученныхСУБД);
        СтрокаПоказания.Вставить("ОбъемДанныхСчитанныхСДиска", Значение.ОбъемДанныхСчитанныхСДиска);
        СтрокаПоказания.Вставить("ПотреблениеПамяти", Значение.ПотреблениеПамяти);
        СтрокаПоказания.Вставить("ПроцессорноеВремя", Значение.ПроцессорноеВремя);
        СтрокаПоказания.Вставить("CPUСекунды", Значение.ПроцессорноеВремя / 1000);
        СтрокаПоказания.Вставить("ПамятьMiB", Значение.ПотреблениеПамяти / 1024 / 1024);
        Строки.Добавить(СтрокаПоказания);
    КонецЦикла;
    Снимок.Вставить("ИмяСчетчика", СвойСчетчик.Имя);
    Снимок.Вставить("КоличествоПоказаний", Показания.Количество());
    Снимок.Вставить("Показания", Строки);
    Возврат СериализоватьСвойСнимок(Снимок);
КонецФункции

&НаСервереБезКонтекста
Функция СериализоватьСвойСнимок(Снимок)
    Писатель = Новый ЗаписьJSON;
    Писатель.УстановитьСтроку();
    ЗаписатьJSON(Писатель, Снимок);
    Возврат Писатель.Закрыть();
КонецФункции

Разбор по шагам

  1. Проверка имени учебной конфигурации и числового порта выполняется до создания соединения. Удалённый адрес не принимается: 127.0.0.1 записан в серверном коде.

  2. У агента порядок аутентификации — пароль, имя; у кластера — имя, пароль. Два вызова имеют разные контракты и не взаимозаменяемы.

  3. Пустой UUID запускает только каталог собственных учебных кластеров. Повторный запуск выбирает один кластер по реальному UUID и точному имени, не первый элемент массива.

  4. В JSON попадают только явно перечисленные диагностические поля. Объект администрирования целиком не сериализуется; пароли и сырая ошибка аутентификации не выводятся.

  5. После любого исхода клиент очищает два поля пароля. Для следующего запуска их нужно вводить заново; остальные параметры и результат остаются на своей форме.

  6. Точный поиск собственного зарегистрированного счётчика предшествует ПолучитьЗначения. Его результат — массив объектов АдминистрированиеЗначениеСчетчикаПотребленияРесурсов.

  7. Время сериализуем XMLСтрока, а Объект сохраняем без подмены: это идентификатор экземпляра счётчика, его смысл зависит от группировки.

  8. ДлительностьВызова, длительности СУБД/сервисов и ПроцессорноеВремя документированы в миллисекундах. CPUСекунды = ПроцессорноеВремя / 1000, не CPU-процент.

  9. Память и объёмы диска/СУБД заданы в байтах. ПамятьMiB = байты / 1024 / 1024; количество сеансов и вызовов остаётся количеством.

  10. ДлительностьНакопления сохраняется как исходное число: страница не задаёт явно единицу. Пустой массив возвращается честно с количеством 0, без искусственной строки данных.

Как проверить результат

  1. КоличествоПоказаний равно длине массива Показания. При отсутствии накопленных данных возможен 0; не принимайте это за неуспешную аутентификацию.

  2. CPUСекунды и ПамятьMiB арифметически соответствуют исходным полям каждого настоящего показания.

  3. Сверьте включённые метрики предыдущим уроком, создайте свою нагрузку и повторите чтение. Точные числа и время не фиксированы.

Ожидаемый результат

Получен JSON настоящих текущих измерений собственного счётчика с корректными производными единицами.

На что обратить внимание

  1. Имя и loopback-адрес — защитные условия учебного сценария, не замена правам администратора и сетевой защите. Не переименовывайте рабочий кластер ради обхода проверки.

  2. Свойства настроек могут быть записываемыми, но этот урок их только читает. Нет Записать, Удалить, Прервать или Отключить и нет автоматического исправления конфигурации.

  3. Снимок меняется со временем. Пустая коллекция и нулевое показание имеют разные причины; проверяйте подготовку, включённые метрики и интервалы наблюдения.

  4. Расширенная серверная ошибка может содержать чувствительные сведения. Клиент показывает нейтральную причину; диагностируйте свой стенд в отладчике, не публикуя учётные данные.

  5. Платформа и ras должны соответствовать установленной версии. Чтение свойства не доказывает, что этот параметр используется текущей версией сервера.

  6. CPU-время нельзя превратить в процент без обоснованного интервала наблюдения и числа процессоров. Объём трафика в байтах также не равен скорости сети.

  7. XMLСтрока даты не даёт оснований объявлять время UTC или добавлять Z. Учитывайте время собственного сервера и его настройки.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.