Состояние коннектора
Техническое описание
* коннектор = источник
Запрос на получение списка коннекторов (отправляется на сервис 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
}
Если источник «сломан», данные невозможно получить, поле 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"loaded": 0,
"progress"progress": 0
В момент открытия проекта, происходит подключение к сокет сервису loader, который будет уведомлять пользователя о процессе загрузки источника, добавлении новых источников и т.д.
К каждому проекту создается своё сокет подключение. Сама подписка на коннектор происходит через брокер rabbitMQ и описана ранее. Сокет соединение необходимо для отправки информации после получения данных из GO сервиса (и не только).
Таким образом интерактивное обновление источников обеспечивается за счет:
- подключения к сокетам конкретного проекта (Nest.js)
- подписки пользователя на каналы брокера (rabbitMQ) по топикам на каждый интересующий коннектор
- отправки информации обратно клиенту через подключенный сокет, при получении события из брокера (rabbitMQ)