Дополнительные инструменты

Использование Proxy API

Доступ к Витринам данных НСУД через 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

    }

Пример Proxy API запросов в модуль «Rest-Uploader»

Пример запроса на загрузку в модуль «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
}

Datamart Studio API

Проверка 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"
   }
}

Лог конфигурации Витрины в виде инструкции по установке

По каждой Витрине данных автоматически собирается лог конфигурации в котором приводится следующая информация:
  • общая информация по Витрине;
  • предварительные условия установки;
  • список ЦОД и серверов, на которых разворачивается Витрина;
  • список компонентов для установки;
  • список кластеров для установки;
  • команды по настройке компонентов Витрины и связям интерфейсов.
Получить данную информацию можно в меню управления Витрины в разделе «Лог конфигурации».
Инструкция по установке и настройке Витрины данных «Лог конфигурации»

Увеличить

Предыдущий раздел
Работа с параметром
Следующий раздел
ПОДД СМЭВ
Была ли страница полезной?