{"id":20019734,"url":"https://github.com/arkuznetsov/hirac","last_synced_at":"2025-05-04T23:32:08.538Z","repository":{"id":38342713,"uuid":"213568854","full_name":"arkuznetsov/hirac","owner":"arkuznetsov","description":"REST API для получения информации о кластере сервера 1С и управления объектами кластера","archived":false,"fork":false,"pushed_at":"2022-12-19T06:23:34.000Z","size":329,"stargazers_count":45,"open_issues_count":6,"forks_count":15,"subscribers_count":5,"default_branch":"develop","last_synced_at":"2025-04-08T14:12:21.865Z","etag":null,"topics":["1c","1c-enterprise","bsl","hacktoberfest","mssql","onescript","onescript-web","oscript","oscript-web","rac","ras","rest","rest-api"],"latest_commit_sha":null,"homepage":"","language":"1C Enterprise","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arkuznetsov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-08T06:50:51.000Z","updated_at":"2025-02-08T10:06:09.000Z","dependencies_parsed_at":"2023-01-29T20:46:05.263Z","dependency_job_id":null,"html_url":"https://github.com/arkuznetsov/hirac","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2Fhirac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2Fhirac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2Fhirac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2Fhirac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arkuznetsov","download_url":"https://codeload.github.com/arkuznetsov/hirac/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252414480,"owners_count":21744111,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["1c","1c-enterprise","bsl","hacktoberfest","mssql","onescript","onescript-web","oscript","oscript-web","rac","ras","rest","rest-api"],"created_at":"2024-11-13T08:28:34.590Z","updated_at":"2025-05-04T23:32:08.138Z","avatar_url":"https://github.com/arkuznetsov.png","language":"1C Enterprise","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![GitHub release](https://img.shields.io/github/release/ArKuznetsov/hirac.svg?style=flat-square)](https://github.com/ArKuznetsov/hirac/releases)\r\n[![GitHub license](https://img.shields.io/github/license/ArKuznetsov/hirac.svg?style=flat-square)](https://github.com/ArKuznetsov/hirac/blob/develop/LICENSE)\r\n[![GitHub Releases](https://img.shields.io/github/downloads/ArKuznetsov/hirac/latest/total?style=flat-square)](https://github.com/ArKuznetsov/hirac/releases)\r\n[![GitHub All Releases](https://img.shields.io/github/downloads/ArKuznetsov/hirac/total?style=flat-square)](https://github.com/ArKuznetsov/hirac/releases)\r\n\r\n[![Build Status](https://img.shields.io/github/workflow/status/ArKuznetsov/hirac/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%20%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0)](https://github.com/arkuznetsov/hirac/actions/)\r\n[![Quality Gate](https://open.checkbsl.org/api/project_badges/measure?project=hirac\u0026metric=alert_status)](https://open.checkbsl.org/dashboard/index/hirac)\r\n[![Coverage](https://open.checkbsl.org/api/project_badges/measure?project=hirac\u0026metric=coverage)](https://open.checkbsl.org/dashboard/index/hirac)\r\n[![Tech debt](https://open.checkbsl.org/api/project_badges/measure?project=hirac\u0026metric=sqale_index)](https://open.checkbsl.org/dashboard/index/hirac)\r\n\r\n\u003ca href=\"https://checkbsl.org\"\u003e\u003cimg alt=\"Checked by Silver Bulleters SonarQube BSL plugin\" src=\"https://web-files.do.bit-erp.ru/sonar/b_t.png\" align=\"right\" style=\"width:400px\"/\u003e\u003c/a\u003e\r\n\r\n# HTTP interface for RAC (HiRAC)\r\n\r\nREST API для получения информации о кластере сервера 1С и управления объектами кластера.\r\n\r\n## Требования\r\n\r\nТребуются следующие библиотеки и инструменты:\r\n- [OneScript.Web](https://github.com/EvilBeaver/OneScript.Web) - MVC фреймворк для разработки веб-сайтов с использованием [OneScript](https://github.com/EvilBeaver/OneScript)\r\n- [irac](https://github.com/oscript-library/irac) - если установлен [OneScript](https://github.com/EvilBeaver/OneScript) устанавливается командой `opm install -l`\r\n- [cpdb](https://github.com/oscript-library/cpdb) - если установлен [OneScript](https://github.com/EvilBeaver/OneScript) устанавливается командой `opm install -l`\r\n- [1C RAC](https://releases.1c.ru/project/Platform83) - утилита RAC из состава платформы 1С:Предприятие 8.3\r\n\r\n## Запуск\r\n\r\nПерейти в подкаталог src и запустить OneScript.Web:\r\n\r\n```bat\r\ncd \u003cпуть к hirac\u003e\\src\r\n\u003cпуть к OneScript.Web\u003e\\OneScript.WebHost.exe\r\n```\r\n\r\nЗапуск будет выполнен на 5005 порту. Изменить порт можно в файле настроек [appsettings.json](./src/appsettings.json)\r\n\r\n## Настройки MS SQL Server для получения информации о базах и таблицах\r\n\r\n### Создание имени для входа (Login)\r\n---\r\n\r\nНа сервере MS SQL, где расположены базы 1С создать имя для входа **\"_1Cmonitor\"** (имя может быть любым) с ролью \"Public\" и дополнительными правами:\r\n * `Connect SQL`,\r\n * `Connect Any Database`,\r\n * `View any database`,\r\n * `View server state`.\r\n\r\nУказать способ аутентификации: `SQL Server authentification`.\r\n\r\n### Добавление прав на чтение данных баз 1С\r\n---\r\n\r\nДля кажой базы 1С, для которой требуется получать информацию об использовании и таблицах создать пользователя **\"_1Cmonitor\"** (имя может быть любым) и связать его с именем для входа **\"_1Cmonitor\"**. В свойствах базы назначить этому пользователю право `SELECT`.\r\n\r\n#### **Или использовать скрипт для назначения прав для всех баз 1С, зарегистрированных на сервере:**\r\n\r\nИмя для входа и пользователя можно изменить в переменной `@monitorUserName` (при необходимости поправить длину имени в определении).\r\n\r\n```sql\r\nDECLARE @monitorUserName NVARCHAR(10);\r\nSET @monitorUserName = '_1Cmonitor';\r\n\r\nDECLARE @command NVARCHAR(1000);\r\nSELECT @command = '\r\nDECLARE @is1cbase BIT;\r\nSELECT @is1cbase = COUNT(Tables.name) FROM ?.sys.tables AS Tables WHERE Tables.name = ''v8users''\r\n\r\nIF (@is1cbase = 1)\r\nBEGIN\r\n\tUSE ?\r\n\tDECLARE @hasMonitorUser BIT;\r\n\tSELECT @hasMonitorUser = COUNT(Principals.name) FROM ?.sys.database_principals AS Principals WHERE Principals.name = ''' + @monitorUserName + '''\r\n\r\n\tIF (@hasMonitorUser = 0)\r\n\tBEGIN\r\n\t\tCREATE USER [' + @monitorUserName + '] FOR LOGIN [' + @monitorUserName + '] WITH DEFAULT_SCHEMA=[dbo]\r\n\tEND\r\n\r\n\tGRANT SELECT ON DATABASE::[?] TO [' + @monitorUserName + '];\r\nEND\r\n'\r\n\r\nEXEC sp_MSforeachdb @command\r\n```\r\n\r\n## Конфигурация HiRAC (`./src/config/racsettings.json`)\r\n\r\n  - **ras** - параметры сервера администрирования RAS\r\n    - **\u003cимя сервера администрирования\u003e** - параметры конкретного сервера администрирования RAS (`__default` для значений по умолчанию)\r\n      - **admin_name** - имя администратора агента кластера\r\n      - **admin_pwd** - пароль администратора агента кластера\r\n      - **ras** - адрес сервера администрирования RAS\r\n      - **rac** - версия утилиты администрирования RAC\r\n      - **reserves** - резервируемый сервер администрирования\r\n  - **cluster** -  параметры кластеров 1С\r\n    - **\u003cимя кластера:порт\u003e** - параметры кластера (rmngr) по указанному адресу:порту (`__default` для значений по умолчанию)\r\n      - **selectedInfobasesOnly** - true - получать информацию только о перечисленных информационных базах\r\n      - **admin_name** - имя администратора кластера\r\n      - **admin_pwd** - пароль администратора кластера\r\n        - **infobase** - параметры информационных баз в кластере\r\n          - **\u003cИмя ИБ\u003e** - параметры информационной базы (`__default` для значений по умолчанию)\r\n            - **admin_name** - имя администратора ИБ\r\n            - **admin_pwd** - пароль администратора ИБ\r\n            - **dbms_type** - тип СУБД (в настоящий момент только \"MSSQLServer\")\r\n            - **dbms_server** - адрес сервера СУБД\r\n            - **dbms_user** - имя пользователя для получения информации от СУБД\r\n            - **dbms_pwd** - пароль пользователя для получения информации от СУБД\r\n            - **dbms_base** - имя базы данных в СУБД\r\n            - **dbms_dbstruct_lifetime** - период актуальности структуры хранеения базы данных\r\n            - **dbms_db_lifetime** - период актуальности информации о базе данных в СУБД\r\n            - **dbms_tables_lifetime** - период актуальности информации о таблицах в СУБД\r\n  - **useCommands** - true - включена возможность выполнения команд управления кластером; false -возможность отключена\r\n  - **dbms_dbstruct_cache** - каталог для хранения кэша структуры данных баз СУБД\r\n  - **selectedClustersOnly** - true - получать информацию только о перечисленных кластерах\r\n  - **connectionPoolSize** - число одновременных подключений к сервису администрирования\r\n  - **reconnectAtempts** - количество попыток инициализации кластера 1С\r\n  - **reconnectInterval** - задержка перед повторным подключением (мсек.) умножается на номер попытки подключения\r\n  - **connectionWait** - время ожидания свободного подключения (мсек.), после которого будет сообщено об ошибке подключения\r\n  - **connectionLockInterval** - максимальное время блокировки подключения (мсек.), после которого подключение будет принудительно освобождено\r\n  - **logQueryDuration**- true - будет выполняться логирование времени выполнения запросов в файл\r\n  - **QueryDurationLogFilename** - путь к файлу лога замеров времени\r\n\r\n## Регистрация в качестве службы\r\n\r\nВ командный файл [reg_os_web_as_service.cmd](./reg_os_web_as_service.cmd) регистрации HiRAC в качестве сервиса Windows. Запуск:\r\n\r\n```bat\r\nreg_os_web_as_service.cmd \u003cпуть к OneScript.Web\u003e\\OneScript.WebHost.exe \u003cадрес\u003e:\u003cпорт\u003e \u003cпуть к hirac\u003e\\src\r\n\r\n```\r\n\r\n## Варианты запросов\r\n\r\n  - **\u003cтип объектов\u003e/list** - список объектов\r\n  - **\u003cтип объектов\u003e/\u003cпуть к объекту\u003e** - содержимое объекта по указанному пути\r\n  - **\u003cтип объектов\u003e/\u003cпуть к объекту\u003e/\u003cсвойство\u003e** - значение свойства \u003cсвойство\u003e объекта по указанному пути\r\n  - **counter/list** - описания доступных счетчиков\r\n  - **counter/\u003cтип объектов\u003e/list** - описания доступных счетчиков для \u003cтип объектов\u003e\r\n  - **counter/\u003cтип объектов\u003e/\u003cсчетчик\u003e** - значения счетчика \u003cсчетчик\u003e для \u003cтип объектов\u003e\r\n\r\n### Используемые имена объектов (`\u003cтип объектов\u003e`)\r\n\r\n  - **cluster** - информация о кластерах\r\n  - **server** - информация о рабочих серверах\r\n  - **process** - информация о рабочих процессах\r\n  - **infobase** - информация об информационных базах\r\n  - **session** - информация о сеансах\r\n  - **connection** - информация о соединениях\r\n\r\n### Используемые типы объектов (`\u003cпуть к объекту\u003e`)\r\n\r\n  - **cluster** - cluster/\u003cадрес сервера\u003e/\u003cпорт сервера\u003e или cluster/\u003cидентификатор\u003e\r\n  - **server** - server/\u003cадрес сервера\u003e/\u003cпорт сервера\u003e или server/\u003cидентификатор\u003e\r\n  - **process** - process/\u003cадрес сервера\u003e/\u003cпорт процесса\u003e или process/\u003cидентификатор\u003e\r\n  - **infobase** - infobase/\u003cимя информационной базы\u003e или infobase/\u003cидентификатор\u003e\r\n  - **session** - session/\u003cимя информационной базы\u003e/\u003cномер сеанса\u003e или session/\u003cидентификатор\u003e\r\n  - **connection** - connection/\u003cимя информационной базы\u003e/\u003cномер сеанса\u003e или connection/\u003cидентификатор\u003e\r\n\r\n## Доступные поля запросов\r\n\r\n### Доступные поля запроса списка (`\u003cимя объекта\u003e/list`)\r\n\r\n  - **field** - имя поля запрашиваемого объекта, которое попадет в результат (`field=_all` - попадут все поля)\r\n  - **filter_\u003cполе объекта\u003e_\u003cоперация сравнения\u003e** - условие (фильтр) по значению поля\r\n  - **order** - сортировка по значениям полей\r\n  - **top** - отбор указанного количества первых результатов с учетом порядка сортировки `order`\r\n\r\n### Доступные поля запроса счетчиков (`counter/\u003cимя объекта\u003e`)\r\n\r\n  - **filter_\u003cполе объекта\u003e_\u003cоперация сравнения\u003e** - условие (фильтр) по значению поля\r\n  - **dim** - имя измерения счетчика по которым выполняется свертка значения счетчика (`dim=_all` - попадут все измерения счетчика)\r\n  - **top** - отбор указанного количества первых значений счетчика с максимальным значением\r\n  - **aggregate** - агрегатная функция свертки значений счетчика\r\n  - **format** - формат вывода результата\r\n\r\n### Доступные операции сравнения фильтров\r\n\r\n  - **eq** - равно (может не указываться), для строк выполняется без учета регистра\r\n  - **neq** - не равно, для строк выполняется без учета регистра\r\n  - **gt** - больше\r\n  - **gte** - больше или равно\r\n  - **lt** - меньше\r\n  - **lte** - меньше или равно\r\n  - **sw** - начинается с\r\n  - **ew** - заканчивается на\r\n  - **cnt** - содержит\r\n  - **mre** - соответствует регулярному выражению\r\n### Доступные агрегатные функции свертки значений счетчиков\r\n\r\n  - **count** - количество значений счетчика\r\n  - **distinct** - количество **различных** значений счетчика\r\n  - **sum** - сумма значений счетчика\r\n  - **min** - минимальное значение счетчика\r\n  - **max** - максимальное значение счетчика\r\n  - **avg** - среднее значение счетчика\r\n\r\n### Доступные форматы\r\n\r\n  - **json** - (по умолчанию) JSON-текст собственной структуры\r\n  - **prometheus** - формат Prometheus\r\n  - **plain** - плоский текстовый формат без указания значений измерений\r\n\r\n## Примеры запросов:\r\n\r\n### Получение списка кластеров\r\n\r\n```\r\n\r\nhttp://localhost:5005/cluster/list\r\n\r\n```\r\n\r\n## Серверы\r\n\r\n### Получение списка серверов\r\n\r\n```\r\n\r\nhttp://localhost:5005/server/list\r\n\r\n```\r\n\r\n## Информационные базы\r\n\r\n### Получение списка ИБ\r\n\r\n```\r\n\r\nhttp://localhost:5005/infobase/list\r\n\r\n```\r\n\r\n## Сеансы\r\n\r\n### Получение списка сеансов\r\n\r\n```\r\n\r\nhttp://localhost:5005/session/list\r\n\r\n```\r\n## Счетчики\r\n\r\n### Получение списка счетчиков\r\n\r\n\r\n```\r\n\r\nhttp://localhost:5005/counter/list\r\n\r\n```\r\n\r\n### Получение всех счетчиков сеансов\r\n\r\n#### Развернуто по всем измерениям\r\n\r\n```\r\n\r\nhttp://localhost:5005/counter/session\r\n\r\nили\r\n\r\nhttp://localhost:5005/counter/session?dim=_all\r\n\r\n```\r\n\r\nВ формате Prometheus\r\n\r\n```\r\n\r\nhttp://localhost:5005/counter/session?format=prometheus\r\n\r\n```\r\n\r\n#### Свернуто по всем измерениям\r\n\r\nАгрегатная функция по умолчанию (`count`)\r\n\r\n```\r\n\r\nhttp://localhost:5005/counter/session?dim=_no\r\n\r\n```\r\n\r\nАгрегатная функция СУММА (`sum`)\r\n\r\n```\r\n\r\nhttp://localhost:5005/counter/session?dim=_no\u0026aggregate=sum\r\n\r\n```\r\n\r\n### Получение конкретного счетчика сеансов\r\n\r\n#### Развернуто по всем измерениям\r\n\r\n```\r\n\r\nhttp://localhost:5005/counter/session/count?dim=_all\r\n\r\n```\r\n\r\n#### С отбором по типу клиента\r\n\r\n```\r\n\r\nhttp://localhost:5005/counter/session/count?filter_app_id=Designer\r\n\r\n```\r\n\r\n#### Свернуто по хосту и ИБ\r\n\r\nАгрегатная функция СУММА (`sum`)\r\n\r\n```\r\n\r\nhttp://localhost:5005/counter/session/count?dim=host\u0026dim=infobase\u0026aggregate=sum\r\n\r\n```\r\n\r\n## Запуск в docker\r\n\r\n### Сборка образа с hirac\r\n\r\n1. Так как для работы приложения необходима консольная утилита `rac`. а ее распространение ограниченно лицензией 1С, то для сборки образа нам необходима актуальная учетная запись на https://users.v8.1c.ru/. В момент сборки будет скачан необходимый нам дистрибутив платформы.\r\n\r\nДля этого необходимо создать файл переменных `.env` в корне репозитария, по примеру `env.example` и заполнить его правильными значениями\r\n\r\n```\r\n\r\nONEC_USERNAME=\u003cПОЛЬЗОВАТЕЛЬ_USERS.1C.V8.RU\u003e\r\nONEC_PASSWORD=\u003cПАРОЛЬ_ОТ_USERS.1C.V8.RU\u003e\r\nONEC_VERSION=8.3.14.1993\r\nOSCRIPT_VERSION=1.5.0\r\n\r\n```\r\n\r\n2. Запустить скрипт сборки образов. При необходимости первым параметром можно указать тег собираемого образа. Тег по умолчанию - `oscript/hirac:latest`\r\n\r\n```\r\n\r\nbash build_images.sh\r\n\r\n```\r\n\r\n### Запуск контейнера hirac\r\n\r\nПример конфигурационного файла hirac лежит в каталоге src/config/racsettings.json, он же применяется по умолчанию при запуске контейнера.\r\nПри необходимости использовать свои параметры необходимо переопределить конфигурационный файл, через подключеннный volume:\r\n\r\n```\r\n\r\ndocker run -d -p 5000:5000 -v $(pwd)/src/config/racsettings.json:/app/config/racsettings.json demoncat/hirac:latest\r\n\r\n```\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farkuznetsov%2Fhirac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farkuznetsov%2Fhirac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farkuznetsov%2Fhirac/lists"}