Получение списка и состояний подключений
Пользовательские сценарии
Стартовое состояние – пользователь находится в конструкторе дашбордов
Роль – Аналитик
Действие: Пользователь нажимает на кнопку "В диспетчер данных"
Результат:
- Открыт диспетчер данных на вкладке "Скрипт загрузки".
- Список подключений пустой.
- Каждые 10 секунд появляется сообщение:
Роль – Разработчик/Администратор
Действие: Пользователь нажимает на кнопку "В диспетчер данных"
Результат:
- Открыт диспетчер данных на вкладке "Скрипт загрузки".
- В списке подключений отображаются доступные пользователю источники (права доступа для этих источников у этого пользователя "Управление" или "Использование").
- Виден текущий статус подключений:
- "Доступен" – источник обнаружен и может быть использован. Визуально определяется по отсутствию дополнительных значков на источнике.
- "Сломан" – источник был создан, однако впоследствии возникла ошибка, препятствующая его использованию. Визуально определяется красной подсветкой названия источника и дополнительной иконкой с восклицательным знаком.
- "Занят" – источник доступен, но в текущий момент времени происходит загрузка данных, поэтому до конца загрузки его нельзя использовать. Визуально определяется "лоадером" на источнике.
- Виден тип источников:
- Файл – рядом с названием источника будет значок "страница"
- БД – рядом с названием источника будет значок "база данных"
- API – рядом с названием источника будет значок "облако"
Необходимые изменения
Проблема: Некорректное отображение в интерфейсе "сломанных" источников.
Даже если источник доступен, может возникнуть ошибка, препятствующая его использованию. В таком случае статус последней загрузке будет "aborted", а не 'success'.
Решение: Считать "сломанными" не только те источники, у которых "isValid" = False, но и те, у которых "status" = "aborted"
Схема потока данных
Техническое описание
* коннектор = источник
Запрос на получение списка коннекторов (отправляется на сервис Nest.js, в примере ссылка на стенд dev4):
GET https://fastbord-back-dev4.fb-dev.winsolutions.ru/api/v1/sources/list/{projectId}, где projectId – id проекта, для которого запрашиваются источники
Последовательность выполнения запроса (на стороне Nest.js):
- Регистрация запроса в контроллере (GET 'list/:projectId?'), проверка авторизации, соответствия роли пользователя (админ или разработчик) – подтверждает доступ для получения списка
- Получение списка доступных коннекторов, на основе userId из базы данных postgres
- Подписка на каналы rabbitMQ по заданным топикам для каждого источника
- На основе projectId из базы данных запрашиваются страницы скрипта загрузки
- Выполняется проверка, если коннектор когда-либо использовался в скрипте загрузки, в объект ответа добавляется поле "lastLoading" с информацией о последней загрузке коннектора в проект
Ответ содержит массив, состоящий из объектов вида:
{
"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)
2 Comments
"lastLoading" появляется и у источником с "isValid" = "True" – надо описать кейсы, в которых появляются эти данные
Что такое "selected", "loaded", "progress" и другие объекты – тоже надо дописать
Коментарий
https://book.winsolutions.ru/link/636#bkmrk-%D0%9D%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D1%8B%D0%B5-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8