Дополнительные инструменты
Доступ к Витринам данных НСУД через Proxy API в Datamart Studio доступен только для учетных записей с ролью «proxy-api» и привязанным к соответствующим организациям.
Datamart Studio предоставляет возможность проксировать через себя запросы к инсталляциям приложений Витрин данных. При помощи этого возможно делать SQL+ запросы в ProStore, загружать csv-файлы через модуль «Rest-uploader», выполнять прочие операции, не имея прямого доступа к серверам с инсталляциями приложений.
Чтобы функционал Proxy API стал доступен для использования, Datamart Studio должна быть связана с инструментами аутентификации Сервиса IAM («Сервис IAM (услуга 1.13)»), метод аутентификации Keycloak. В нём определяются пользователи и их роли в Datamart Studio.
Для примера ниже используется утилита curl, по правилам безопасности предполагается вызов утилиты из сертифицированной версии ОС. В продуктивном окружении Пользователь должен использовать любую http-утилиту, сертифицированную ФСТЭК или соответствующую требованиям безопасности, установленным для эксплуатации Компонента.
Сначала необходимо пройти авторизацию, чтобы получить токен. Получить токен можно запросом, например в ПО сURL (Client URL):
Пример запроса для получения токенаcurl -X POST \ 'http://\<ip-studio\>:8088/api/v1/auth_system' \ - d "username=<\username>" \ - d "password=<\password>" \ - d "organization_ogrn=<\organization_ogrn>\" \ - d "datamart_mnemonic=<\datamart_mnemonic>\"
где:
- <ip-studio> — ip-адрес Datamart Studio;
- <username> — имя пользователя IAM;
- <password> — пароль пользователя IAM;
- <organization_ogrn> — ОГРН Организации, в рамках которой развёрнута Витрина;
- <datamart_mnemonic> — мнемоника целевой Витрины.
Важно обратить внимание на протокол запроса. Если он будет некорректным (например, http вместо https), то ответ сервера будет содержать ошибку с кодом «500» - Internal Server Error.
Пример успешного ответа Datamart Studio на запрос токена:
{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI5NGRuNzhOeVF2TjBhRG3NMcUdkc0tTOTNlTWxjNkRwRjZ5V1NXSUo4In0.eyJleHAiOjE2OTMzMTg0NzIsImlhdCI6MTY5MzMxNDg3MiwianRpIjoiYTJkNTQ5NDktZWYwZC00MzA1LWI5OTAtMDIxMTAyZDkzODU2IiwiaXNzIjoiaHR0cHM6Ly9rYy5kYXRhbWFydC5ydS9yZWFsbXMvc3R1ZGlvLWRldiIsInN1YiI6IjE1NjdkYWI3LTc1OTAtNGM0Zi1iNWNhLWYzMmFkOTU1NThjYyIsInR5cCI6IkJlYXJlciIsImF6cCI6InN0dWRpbyIsInNlc3Npb25fc3RhdGUiOiJlMGE0MjJlZC1hNDQxLTQzY2MtYTAxMS01MzNiY2RiNTc5OGQiLCJhY3IiOiIxIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbInN1cGVyYWRtaW4iLCJhZG1pbiJdfSwic2NvcGUiOiJvcGVuaWQgZW1haWwiLCJzaWQiOiJlMGE0MjJlZC1hNDQxLTQzY2MtYTAxMS01MzNiY2RiNTc5OGQiLCJ1cG4iOiJhZG1pbiIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJhZGRyZXNzIjp7fSwibmFtZSI6ImFkbWluIGFkbWluIiwiZ3JvdXBzIjpbInN1cGVyYWRtaW4iLCJhZG1pbiJdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImdpdmVuX25hbWUiOiJhZG1pbiIsIm9yZ2FuaXphdGlvbl9vZ3JuIjpbIjExMTIyMjMzMzQ0NCIsIjExMTEiXSwiZmFtaWx5X25hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5AYWRtaW4uYWRtaW4ifQ.BC3sREXC3nf2LNvBX8SiHKouVGqJVfUBokVJa-B-9YW0zLhnNTs7mGZVOnC-kM-5mWE6bz8du0lvxQqiGpi3HRlAv1eedcGMTf_2TmjhohAaz--zSCdLC5NSmI79r54XYTLORiWKXj5T_AY8efFwWnWgUJ1LEkd5BTQyGSTvaoJkMv7xextA_isx_WoReHC5_-3GznNtcf_hOd2J1CfMHUFjhqMRSxMkIQDPHnspgU6WUz9IeVA1VWKh1GcggqYDtrruigQcl4_f7XeJQKJ49NNVdhjHtywUVbTpEDKYh4FsgAbf3vIPYUVwGWFW0Qm7LgUCpB8UvMQfb4UYZMF4UA", "expires_in": 3600, "refresh_expires_in": 3600, "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJmYmMzOWNmNi1kZTRkLTQ2YWEtYTAwZi1iZGU3ZmFkNTJmNTgifQ.eyJleHAiOjE2OTMzMTg0NzIsImlhdCI6MTY5MzMxNDg3MiwianRpIjoiYWIxN2M0MzQtZGI4Yi00N2QwLTkyM2YtMTFiYmM3NzBiNmE4IiwiaXNzIjoiaHR0cHM6Ly9rYy5kYXRhbWFydC5ydS9yZWFsbXMvc3R1ZGlvLWRldiIsImF1ZCI6Imh0dHBzOi8va2MuZGF0YW1hcnQucnUvcmVhbG1zL3N0dWRpby1kZXYiLCJzdWIiOiIxNTY3ZGFiNy03NTkwLTRjNGYtYjVjYS1mMzJhZDk1NTU4Y2MiLCJ0eXAiOiJSZWZyZXNoIiwiYXpwIjoic3R1ZGlvIiwic2Vzc2lvbl9zdGF0ZSI6ImUwYTQyMmVkLWE0NDEtNDNjYy1hMDExLTUzM2JjZGI1Nzk4ZCIsInNjb3BlIjoib3BlbmlkIGVtYWlsIiwic2lkIjoiZTBhNDIyZWQtYTQ0MS00M2NjLWEwMTEtNTMzYmNkYjU3OThkIn0.SI6Tb6CJ5HIHwzETOyJZ-2nTLibGNq7JEQwW07fY-2M", "token_type": "Bearer", "id_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI5NGRuNzhOeVF2TjBhRGtvX3NMcUdkc0tTOTNlTWxjNkRwRjZ5V1NXSUo4In0.eyJleHAiOjE2OTMzMTg0NzIsImlhdCI6MTY5MzMxNDg3MiwiYXV0aF90aW1lIjowLCJqdGkiOiI5NDM1ZDE3NS00MzE2LTQyN2QtODlkYi1lYTJkOWJlZjJmNWIiLCJpc3MiOiJodHRwczovL2tjLmRhdGFtYXJ0LnJ1L3JlYWxtcy9zdHVkaW8tZGV2IiwiYXVkIjoic3R1ZGlvIiwic3ViIjoiMTU2N2RhYjctNzU5MC00YzRmLWI1Y2EtZjMyYWQ5NTU1OGNjIiwidHlwIjoiSUQiLCJhenAiOiJzdHVkaW8iLCJzZXNzaW9uX3N0YXRlIjoiZTBhNDIyZWQtYTQ0MS00M2NjLWEwMTEtNTMzYmNkYjU3OThkIiwiYXRfaGFzaCI6Ik9UZzZoUFQtWjhhWHR1Yjl1VV91LWciLCJhY3IiOiIxIiwic2lkIjoiZTBhNDIyZWQtYTQ0MS00M2NjLWEwMTEtNTMzYmNkYjU3OThkIiwidXBuIjoiYWRtaW4iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiYWRkcmVzcyI6e30sIm5hbWUiOiJhZG1pbiBhZG1pbiIsImdyb3VwcyI6WyJzdXBlcmFkbWluIiwiYWRtaW4iXSwicHJlZmVycmVkX3VzZXJuYW1lIjoiYWRtaW4iLCJnaXZlbl9uYW1lIjoiYWRtaW4iLCJvcmdhbml6YXRpb25fb2dybiI6WyIxMTEyMjIzMzM0NDQiLCIxMTExIl0sImZhbWlseV9uYW1lIjoiYWRtaW4iLCJlbWFpbCI6ImFkbWluQGFkbWluLmFkbWluIn0.K372NBffA3xtsxyM3hixr5GF1ouHNdr8DFMBYnGQ-t-REbYcwOymvs-D-HYEsmaUhkCWjKSeLM9taLmAPloSt2hb8xN_VG4s-gc_yvGs_aHkUehTqddjGMislPyAlydzCaDVxQ5Px-TplsDzIAwm5P0V23LDU3qwnVxVR7P3Dbxi5YB84_38zjClNrDWt9YOxnPMCzDT4fnBjGXkDcQZoHo5jsbFP_K5ymugsYEumKIZyekbY_l_A-XkRcTM6SMTRhKLAvQ3lq2YguLm2LFF3e-PrGsaEymeS-Peuff5qJw5Vf9r3_nD3APCivVc0Kunl8miRpr3lsZgSAp-xi3Jow", "not-before-policy": 0, "session_state": "e0a422ed-a441-43cc-a011-533bcdb5798d", "scope": "openid email" }
С полученным токеном послать запрос для подключения к API инсталляции приложения типового ПО Витрины НСУД для выбранной организации:
curl -X < method > 'http://< ip- studio>:8088/api/v1/secure/< organization_ogrn >/< datamart_mnemonic >/< installation_name>/< installation_id >/< request_path >' \ -H "Authorization: Bearer < access_token " \ -H "< headers >" \ -d "< data >"
где:
- <ip-studio> — ip-адрес Datamart Studio;
- <organization_ogrn> — ОГРН Организации, в рамках которой развёрнута Витрина;
- <datamart_mnemonic> — мнемоника целевой Витрины;
- <installation_name> — имя инсталляции в целевой Витрине;
- <installation_id> — идентификатор инсталляции (присутствует в её названии);
- <request_path> — URI оригинального API инсталляции;
- <access_token> — токен proxy API;
- <headers> — заголовки запроса;
- <data> — данные запроса.
Пример Proxy API запросов в ProStore
Пример запроса на REST API ProStore (без Proxy API):
curl -X 'POST' \ 'http://ip-query- execution:9090/api/v1/datamarts/query?format=json' \ -H 'Content-Type: application/json' \ -d '{"query": "check_versions()"}'
где <ip-query-execution> — ip-адрес инсталляции Prostore.
Аналогичный запрос через Proxy API Datamart Studio будет выглядеть так:
curl -X POST \ 'http://` ip- studio `:8088/api/v1/secure/<organization_ogrn>/<datamart_mnemonic>/ installation_name `/<installation_id>/api/v1/datamarts/query?format=json' \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{"query": "check_versions()"}'
где:
- <ip-studio> — ip-адрес Datamart Studio;
- <organization_ogrn> — ОГРН Организации, в рамках которой развёрнута Витрина;
- <datamart_mnemonic> — мнемоника целевой Витрины;
- <installation_name>— имя инсталляции в целевой Витрине;
- <installation_id> — идентификатор инсталляции (присутствует в её названии);
- <access_token> — токен proxy API.
Пример успешного ответа Datamart Studio на запрос выше:
{ "result": [ { "component_name": "query-execution-core", "version": "6.4.0" }, { "component_name": "ADP: adp instance", "version": "PostgreSQL 13.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit" }, { "component_name": "ADP: kafka-postgres connector reader", "version": "0.6.1" }, { "component_name": "ADP: kafka-postgres connector writer", "version": "0.6.1" }, { "component_name": "status-monitor", "version": "6.4.0" }, { "component_name": "rest-api", "version": "1.0.2" } ], "metadata": [ { "name": "component_name", "type": "VARCHAR", "size": null, "nullable": false }, { "name": "version", "type": "VARCHAR", "size": null, "nullable": false } ], "rows": 6, "queryId": null, "statistics": { "elapsedTotalMs": 13, "elapsedDbMs": 2 } }
Таким образом, запрос для проксирования через Datamart Studio на создание Датамарта может выглядеть так:
curl -X POST \ 'http:// \<ip- studio>\:8088/api/v1/secure/\<organization_ogrn\>/\<datamart_mnemonic\>/ \<installation_name\>/\<installation_id\>/api/v1/datamarts/query?format=json' \ -H "Authorization: Bearer \<access_token\>" \ -H "Content-Type: application/json" \ -d '{"query": "create database \<dtm_name>\;"}'
где:
- <ip-studio> — ip-адрес Datamart Studio;
- <organization_ogrn> — ОГРН Организации, в рамках которой развёрнута Витрина;
- <datamart_mnemonic> — мнемоника целевой Витрины;
- <installation_name> — имя инсталляции в целевой Витрине;
- <installation_id> — идентификатор инсталляции (присутствует в её названии);
- <access_token> — токен proxy API;
- <dtm_name> — название датамарта.
Пример успешного ответа Datamart Studio на запрос выше:
{ "result": [], "metadata": [], "rows": 0, "queryId": null, "statistics": { "elapsedTotalMs": 66, "elapsedDbMs": 6 } }
Запрос для проксирования через Datamart Studio на создание таблицы (в примере указана тестовая таблица test_db.testapi с полным DDL) может выглядеть так:
curl -X POST \ 'http://<ip- studio>:8088/api/v1/secure/<organization_ogrn>/ <datamart_mnemonic>/ \<installation_name\>/\<installation_id\>/api/v1/datamarts/query?format=json' \ -H "Authorization: Bearer \<access_token\>" \ -H "Content-Type: application/json" \ -d '{"query": "create table test_db.testapi (id BIGINT not null, message VARCHAR not null, primary key (id)) distributed by (id);"}'
где:
-<ip-studio> — ip-адрес Datamart Studio;
- <organization_ogrn> — ОГРН Организации, в рамках которой развёрнута Витрина;
- <datamart_mnemonic> — мнемоника целевой Витрины;
- <installation_name> — имя инсталляции в целевой Витрине;
- <installation_id> — идентификатор инсталляции (присутствует в её названии);
- <access_token> — токен proxy API.
Пример корректного ответа Datamart Studio на запрос выше:
"result": [], "metadata": [], "rows": 0, "queryId": null, "statistics": { "elapsedTotalMs": 201, "elapsedDbMs": 99 }
Пример запроса на загрузку в модуль «Rest-uploader» (без Proxy API):
curl -X POST \ 'http://` ip-rest- uploader `:8181/v2/datamarts/`dtm_name`/tables/`table_name`/upload' \ -H "Content-Type: text/csv" \ -d "@` filename.csv `"
где:
- <ip-rest-uploader> — ip-адрес инсталляции rest-uploader;
- <dtm_name> — название датамарта с целевой таблицей;
- <table_name> — название целевой таблицы;
- <filename.csv> — название csv-файла с данными.
В таком случае запрос для проксирования через Datamart Studio будет выглядеть так:
curl -X POST \ 'http://`ip- studio`:8088/api/v1/secure/`organization_ogrn`/`datamart_mnemonic`/` installation_name`/`installation_id`/v2/datamarts/`dtm_name`/tables/ `table_name`/upload' \ -H "Authorization: Bearer `access_token`" \ -H "Content-Type: text/csv" \ -d "@`filename.csv`"
где:
- <ip-studio> — ip-адрес Datamart Studio;
- <organization_ogrn> — ОГРН Организации, в рамках которой развёрнута Витрина;
- <datamart_mnemonic> — мнемоника целевой Витрины;
- <installation_name> — имя инсталляции в целевой Витрине;
- <installation_id> — идентификатор инсталляции (присутствует в её названии);
- <dtm_name> — название датамарта с целевой таблицей;
- <table_name> — название целевой таблицы;
- <access_token> — токен proxy API;
- <filename.csv> — название csv-файла с данными.
Пример успешного ответа Datamart Studio на запрос выше содержит «status_id»:
389ea964-fa26-475f-993b-af5fb357d368.Запрос на просмотр статуса в модуль «Rest-uploader» может выглядеть так:
curl 'http:// ip-rest-uploader :8181/v2/requests/status_id/status'где:
-
<ip-rest-uploader> — ip-адрес инсталляции rest-uploader;
-
<status_id> — status_id, выданный в ответ на запрос загрузки данных.В таком случае запрос для проксирования через Datamart Studio будет выглядеть так:
curl -X GET \ 'http://\<ip- studio\>:8088/api/v1/secure/\<organization_ogrn\>/\<datamart_mnemonic\>/ \<installation_name\>/\<installation_id\>/v2/requests/\<status_id`/status\>\ -H "Authorization: Bearer \<access_token\>"
где:
- <ip-studio> — ip-адрес Datamart Studio;
- <organization_ogrn> — ОГРН Организации, в рамках которой развёрнута Витрина;
- <datamart_mnemonic> — мнемоника целевой Витрины;
- <installation_name> — имя инсталляции в целевой Витрине;
- <installation_id> — идентификатор инсталляции (присутствует в её названии);
- <access_token> — токен proxy API;
- <status_id> — status_id, выданный в ответ на запрос загрузки данных.
Пример успешного ответа Datamart Studio на запрос выше:
{ "code": 3, "description": "Успешно обработан", "errorMessage": null }
Проверка healthcheck
Проверка healthcheck для Datamart Studio по адресу:
localhost:8088/api/v1/healthcheck
Ответом выводится в формате JSON и содержит статус Datamart Studio, окружения, БД и прохождения миграций последнего обновления.
Пример{ "code":200, "status": { "database":"OK", "migrations":"OK", "data_migrations":"OK" }, "info": { "env":"production", "root":"/app", "booted_at":"2023-08-18T16:52:05+00:00" } }
Лог конфигурации Витрины в виде инструкции по установке
По каждой Витрине данных автоматически собирается лог конфигурации в котором приводится следующая информация:
- общая информация по Витрине;
- предварительные условия установки;
- список ЦОД и серверов, на которых разворачивается Витрина;
- список компонентов для установки;
- список кластеров для установки;
- команды по настройке компонентов Витрины и связям интерфейсов.
Получить данную информацию можно в меню управления Витрины в разделе «Лог конфигурации».

Увеличить