Skip to main content

Получение списка и состояний подключений

Пользовательские сценарии

Стартовое состояние – пользователь находится в конструкторе дашбордов

Роль – Аналитик

Действие: Пользователь нажимает на кнопку "В диспетчер данных" image.png

Результат:

  • Открыт диспетчер данных на вкладке "Скрипт загрузки".
  • Список подключений пустой.
  • Каждые 10 секунд появляется сообщение:

image.png

Роль – Разработчик/Администратор

Действие: Пользователь нажимает на кнопку "В диспетчер данных" image.png

Результат:

  • Открыт диспетчер данных на вкладке "Скрипт загрузки".
  • В списке подключений отображаются доступные пользователю источники (права доступа для этих источников у этого пользователя "Управление" или "Использование").
  • Виден текущий статус подключений:
    • "Доступен" – источник обнаружен и может быть использован. Визуально определяется по отсутствию дополнительных значков на источнике. 
    • "Сломан" – источник был создан, однако впоследствии возникла ошибка, препятствующая его использованию. Визуально определяется красной подсветкой названия источника и дополнительной иконкой с восклицательным знаком. 
    • "Занят" – источник доступен, но в текущий момент времени происходит загрузка данных, поэтому до конца загрузки его нельзя использовать. Визуально определяется "лоадером" на источнике.
  • Виден тип источников:
    • Файл – рядом с названием источника будет значок "страница" 
    • БД – рядом с названием источника будет значок "база данных"
    • API – рядом с названием источника будет значок "облако"

Необходимые изменения

Проблема: Некорректное отображение в интерфейсе "сломанных" источников.

Даже если источник доступен, может возникнуть ошибка, препятствующая его использованию. В таком случае статус последней загрузке будет "aborted", а не 'success'.

Решение: Считать "сломанными" не только те источники, у которых "isValid" = False, но и те, у которых "status" = "aborted"

Схема потока данных

image.png

Список коннекторов.png

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

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

Запрос на получение списка коннекторов (отправляется на сервис 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
}

где:

  • id – идентификатор проекта
  • isValid – статус проекта (булево поле, показывает, доступен ли коннектор). 
  • createdAt – дата/время создания подключения
  • updatedAt – дата/время последнего изменения подключения
  • name – название подключения
  • selected - источник выбран (существует в скрипте загрузки) или уже используется в проекте

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 не существует"
}

где

  • id - идентификатор сущности логирующей записи
  • projectId - идентификатор проекта
  • sourceIf - идентификатор источника
  • status - статус импорта (enum - 'success', 'aborted', 'pending', 'active)
  • loaded - количество строк из источника, которое было импортировано
  • progress - процент выполнения загрузки источника в проект
  • message - сообщение об ошибке

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

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

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

 

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

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

 

image.png