Нативный клиент сервера администрирования кластера 1С (RAS) на чистом OneScript: бинарный протокол напрямую, без rac и без платформы, с автоопределением версии
Пакет лежит в основном пуле хаба, а opm знает этот хаб по умолчанию: короткой формы достаточно.
opm install v8rasСкачанный файл ставится командой opm install -f <файл> — сеть для этого уже не нужна.
Описание
v8ras
Нативный клиент сервера администрирования кластера 1С:Предприятие (RAS) на
чистом OneScript. Говорит с RAS напрямую по бинарному протоколу поверх TCP:
без вызова rac, без установленной платформы, кроссплатформенно. Версия
протокола определяется автоматически при подключении.
Библиотека задумана как сателлит сбора метрик кластера: сеансы, соединения, рабочие процессы, память, вызовы, лицензии — для последующего экспорта (например, в OpenTelemetry).
Клиент = Новый КлиентКластераRAS("app-srv", 1545);
Клиент.Подключить();
Для Каждого Кластер Из Клиент.Кластеры() Цикл
Клиент.АутентифицироватьКластер(Кластер.Ид, "Админ", "");
Сеансы = Клиент.Сеансы(Кластер.Ид);
Сообщить(Кластер.Имя + ": сеансов " + Сеансы.Количество());
КонецЦикла;
Клиент.Отключить();
Почему нативно, а не через rac
rac — бинарь платформы: его версия жёстко связана с версией сервера, он есть
не везде, а на подвисшем ras зависает без таймаута. Прямой разговор по
протоколу RAS убирает зависимость от платформы на машине сателлита и даёт
управляемый сетевой ввод-вывод.
Автоопределение версии
При открытии административной конечной точки клиент запрашивает последнюю
известную библиотеке версию сервиса. Сервер поддерживает диапазон версий вниз
от своей, поэтому запрос работает и против более нового сервера. Если сервер
версию не принял, он присылает список поддерживаемых — клиент берёт высшую
общую. Если общих версий нет (сервер новее всего, что знает библиотека), клиент
падает с понятной ошибкой: какую версию просили, что поддерживает сервер, что
знает библиотека. Это сигнал обновить v8ras под новую версию платформы.
Состав
Два слоя: транспорт бинарного протокола (ничего не знает о кластере) и сервис-специфика RAS поверх него.
| Что | Где | Назначение |
|---|---|---|
КлиентКластераRAS |
src/Классы |
публичный API: подключение, аутентификация, чтение и управление |
| транспорт SWP | src/swp |
кодек значений, кадрирование, рукопожатие, обмен с конечной точкой, обход сущностей по описанию — переиспользуемо для любого сервиса 1С |
| коды сообщений и схемы сущностей RAS | src/internal |
описания полей кластера в порядке протокола; сверены с v8platform/protos |
Транспорт отделён от бизнес-логики: src/swp оперирует байтами и описаниями
сущностей (ОписаниеСущностиSWP), а какие сущности и команды бывают — задаёт
src/internal. Один и тот же код читает ответы и пишет запросы: поле описывается
один раз (тип, версия появления), и этого хватает обоим направлениям.
Весь код слоёв протокола компилируется в режиме #native.
Возможности
Реализовано: подключение и рукопожатие с автоопределением версии, аутентификация агента и кластера. Чтение: кластеры, сеансы (память, вызовы, длительности, процессорное время), соединения, лицензии (серия, занято/всего), рабочие процессы (память, соединения, производительность, средние длительности), рабочие серверы (лимиты памяти и соединений), менеджеры кластера, блокировки (кластера, базы, соединения, сеанса), информационные базы (краткий и полный список). Управление базами: создание, обновление, удаление, блокировка и разблокировка начала сеансов. Операционные действия: завершение сеанса, разрыв соединения. Администраторы кластера и агента: список, регистрация, удаление; аутентификация базы. Топология: регистрация и снятие кластеров и рабочих серверов.
Не реализовано (бинарный протокол не задаёт тело запроса в открытой спецификации): прерывание текущего серверного вызова, требования назначения функциональности, профили безопасности и лимиты ресурсов.
Производительность
Разбор линеен по числу сущностей. Замер на одном ядре (подключение, рукопожатие и чтение ответа целиком):
| Сеансов | Время чтения и разбора |
|---|---|
| 100 | ~10 мс |
| 1500 | ~110 мс |
| 5000 | ~390 мс |
Ответ на 1500 сеансов — около 0,7 МБ; читается из сокета одним-двумя вызовами и разбирается за один проход без промежуточных копий. Для опроса кластера раз в 15–30 секунд запас многократный.
Требования
OneScript 2.2.1+. Внешних зависимостей времени выполнения нет — только стандартная библиотека (TCP и работа с двоичными данными).
Тесты
oneunit execute
Кодек проверяется по эталонным байтам протокола, кадрирование — по петле на реальном TCP-сокете, рукопожатие и разбор сущностей — на сокете-сценарии с заготовленными ответами сервера. Проверка против живого RAS с сервером 1С выполняется в CI (workflow e2e, при наличии секретов стенда).
Лицензия
MIT.