Skip to main content

Состояние коннектора

Техническое описание

* коннектор = источник

Запрос на получение списка коннекторов (отправляется на сервис Nest.js, в примере ссылка на стенд dev4):

  GET https://fastbord-back-dev4.fb-dev.winsolutions.ru/api/v1/sources/list/{projectId}где projectId id проекта, для которого запрашиваются источники

 

Последовательность выполнения запроса (на стороне Nest.js):

  1. Регистрация запроса в контроллере (GET 'list/:projectId?'), проверка авторизации, соответствия роли пользователя (админ или разработчик) – подтверждает доступ для получения списка
  2. Получение списка доступных коннекторов, на основе userId из базы данных postgres
  3. Подписка на каналы rabbitMQ по заданным топикам для каждого источника
  4. На основе projectId из базы данных запрашиваются страницы скрипта загрузки
  5. Выполняется проверка, если коннектор когда-либо использовался в скрипте загрузки, в объект ответа добавляется поле "lastLoading" с информацией о последней загрузке коннектора в проект

image.png

Ответ содержит массив, состоящий из объектов вида:

{
    "id": "d11e1bf4-8021-4fa0-ae91-c6b5066d5949",
    "isValid": true,
    "createdAt": "2023-10-04T23:49:27.953Z",
    "updatedAt": "2024-05-20T04:13:58.332Z",
    "name": "rasnikov-pg-test",
    "driver": "postgres",
    "type": "database",
    "selected": false
}

            Если источник «сломан», данные невозможно получить, поле isValid будет false, а также будет добавлено поле "lastLoading" содержащее информацию последней попытки загрузки данных в источник вида:

{
    "id": "28d1f145-506d-4df8-9ed8-ba78cb75626e",
    "projectId": null,
    "sourceId": "c2b6dec6-8830-45a7-bff2-9190ef702725",
    "status": "aborted",
    "started": "2024-07-17T14:30:12.006Z",
    "loaded": 0,
    "progress": 0,
    "message": "Error: Файл /upload/testromans.qvd не существует"
}

 

Если источник находится в состоянии загрузки и/или «сломан», дополнительно будут прикрепляться поля progress и loaded:

{
  "loaded": 0,
  "progress": 0
}

В момент открытия проекта, происходит подключение к сокет сервису loader, который будет уведомлять пользователя о процессе загрузки источника, добавлении новых источников и т.д.

К каждому проекту создается своё сокет подключение. Сама подписка на коннектор происходит через брокер rabbitMQ и описана ранее. Сокет соединение необходимо для отправки информации после получения данных из GO сервиса (и не только).

 

Таким образом интерактивное обновление источников обеспечивается за счет:

  • подключения к сокетам конкретного проекта (Nest.js)
  • подписки пользователя на каналы брокера (rabbitMQ) по топикам на каждый интересующий коннектор
  • отправки информации обратно клиенту через подключенный сокет, при получении события из брокера (rabbitMQ)

 

image.png

image.png