hub.oscript.io
hub.oscript.io

v8rasпакет

Нативный клиент сервера администрирования кластера 1С (RAS) на чистом OneScript: бинарный протокол напрямую, без rac и без платформы, с автоопределением версии

автор: Egor Ivanovскачиваний: 14репозиторий: github.com/Segate-ekb/v8ras

Пакет лежит в основном пуле хаба, а 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.