Описание BlueTraktor-api v0.1.2
api для системы BlueTraktor - решение, которое позволит:
✅ работать с УСЕПИ
✅ подключаться к неограниченному кол-ву серверов
✅ видеть данные в realtime через dashboard
✅ автовосстановление при утере важных для работы компонентов
примечания последнего обновления:
1) доработаны ошибки по восстановлению контейнеров (можете стопать все конетйнеры, они восстанавливаются) 2) отпраляет в мктт шаблоны 3) не работает получение информации об устройстве 4) не считает формулы 5) не обновляет устройтсва и все зависимое при изменении патерна 6) виджеты показывают актуальное значение
Оглавление
Требования к системе:
версия набора инструкций для ARM v8.2
Ram - 4Gb++ (optima 8Gb-16Gb)
OS - Linux (Deb/Ubuntu)/macOS sonoma
Сборка:
docker build -t bluetraktor-api .
Запуск:
docker run --privileged --restart always \
-p 8080:8080 -p 8000:8000 \
--name bluetraktor-api \
-v /var/run/docker.sock:/var/run/docker.sock \
bluetraktor-api
–network bluetraktor-network
-v /sys:/host/sys -v /proc/sys:/host/proc/sys ???
–network bluetraktor-network
Быстрый старт:
выполните из папки проекта
./quick_launch/run_bluetraktor-api.sh
! проверьте права
chmod +x ./quick_launch/run_bluetraktor-api.sh
ToDo
- Запуск в докере, общение между контейнерами
- Автоподставление ip к ссылке при получении иконок
- Изменить условия добавления в бд значений и способ хранения данных
- Как под капотом работает ifconfig и тп
- desanitize на имя коллекций и бд
- Избавления от ошибок при самой-самой первой компиляции модулей
- Вынести ETL отдельно
- Авто получение ip главного хоста из докера (пока только из запроса)
- Сделать нормальный swagger
- Изменить везде lock()
- Изменить все impl и распределить функции не прикрепленные ни к чему (не utils)
- Миграция с mutex на rwlock
- Изменить структуру ConnectionResult для пересоздания ETL из-за проблемы динамического присвоения адресов контейнеров
- ???? Сверение ETL при перезагрузке с redis для поддтверждения адреса, куда отдает данные
- Если бд ассетов выключена и приходится запускать - пересоздать для него ETL
- Если оишбка подключения к бд ассетов - начать сверку с redis
- Подтверждение поднятия реплики
- при изменении девайсес перезапус сервера (изменено на сверение со структурой)
- Создание в своей сети докера ? целесообразно ? будет ли сменяться ip при пересоздании и в случае принудительной остановки ? (исправлено динамическим внутренним окружением)
- Автообновление недостоющих компонентов (удален контейнер)
- в случае удаления редис восстанавливать все ( усепи, серверс )
- в случае удаление усепи восстановить ссерверс внутренний в нем
- переделать роутинг
- получение icons замена адресса
- полностью переделать етл (получение первых настроек, добавить impl внутри для переподключений к usepi и redis по аналогии апи тк изначальное окружение не трогать!!!!!!!!!!!!! слишком медленно)
- выполнение внутри функции по детекту контейнера не должны останавливать!! вывести в другой поток
- добавить функцию реконнект для сервера! типа на стрелочку
- Сверка на дубликат сервера
-
переименовать на bluetraktor-api все
-
определять https или http при иконках
- изменить так сокет чтобы если вдруг переключение по вкладкам было то все что собирается для отправки стопарилось и не выполнялось
- в etl устранить ошибку если нельзя разобрать payload!
- увеличить максимальный размер получаемого из mqtt и максимально долго держать соединение
- етл вылетает конекшн клосед бай пир
- добавить реконнект в случае обрыва соединения и диздетекта дестрой контейнера
- при изменении девайсес перезапуск сервера?
- Запрос на скорость обработки и передачи данных в дб ( > 3-5 сек + нагрузка % ?), пересоздание уже нескольких ETL на слушанье разных топиков (разграничение по проценту нагрузки)
- Проверить можно ли менять имя хоста из контейнера ( сделать )
- Изменение модели device при изменении шаблона pattern
- Разграничение по комнатам пользователей в socket на системную комнату и комнату обновления
- Ограничение oplog у repl до 10% от выделенного объема
- Ограничение кол-ва логов до 50
- Снижение нагрузки на апи в dashboard ( ускорить в 2,5х )
- Избавление от лишних не обоснованных параллельных вычислений на этапе усепи
- Избавление от лишних не обоснованных параллельных вычислений на этапе обработки новых пришедших запросов
- Избавление от лишних не обоснованных параллельных вычислений на этапе етл
- Избавление от лишних не обоснованных параллельных вычислений на этапе дашборда
- ASM вставки отредактировать ( на фильтрации и чтении файлов )
- Написать собственные запросы к mongoDB и redis для ускорения работы с бд за счет исключения библиотеки
Swagger
http://***/
для flamegraph
Build the Docker image:
docker build -t bluetraktor-api_flamegraph .
Run the Docker container:
docker run --privileged --restart always \
-p 8080:8080 -p 8000:8000 \
--name bluetraktor-api_flamegraph \
-v /var/run/docker.sock:/var/run/docker.sock \
bluetraktor-api_flamegraph
Copy:
docker cp /Users/exdet/Desktop/rust/bluetraktor-api bluetraktor-api_flamegraph:/home/
in path blue_tractor_api
cargo flamegraph
svg to local machine
docker cp blue_tractor_api_flamegraph:/home/blue_tractor_api/flamegraph.svg /Users/exdet/Desktop/
Разметка
cargo fmt графы: https://mermaid.js.org/intro/
форматы: https://github.com/GnuriaN/format-README/blob/master/README.md#Оглавление
docker save -o /Users/exdet/Desktop/rust/bluetraktor-api/quick_launch/bluetraktor-api.tar bluetraktor-api
docker save -o /Users/exdet/Desktop/rust/bluetraktor-api/quick_launch/bluetraktor-etl.tar bluetraktor-etl //20 параметров 1 год ~300мб
scp -r /Users/exdet/Desktop/rust/bluetraktor-api.zip server@192.168.1.56:/home/server scp -r /Users/exdet/Desktop/rust/bluetraktor-api.zip root@94.198.219.51:/root/
scp bluetraktor-api.tar root@94.198.219.51:/root/
Интеграция
USEPI/…/прибор/измерение=payload
payload:
[
{
"@id":"timestamp",
"@type":"value",
"name":"timestamp",
"value":"1723031196673"
},
{
"@id":"Код ответа",
"@type":"value",
"name":"Код ответа",
"value":"Success. No Command-Specific Errors"
},
{
"@id":"Статус устройства",
"@type":"value",
"name":"Статус устройства",
"value":"Device Malfunction,More Status Available"
},
{
"@id":"Код выбора сигнала тревоги",
"@type":"value",
"name":"Код выбора сигнала тревоги",
"value":"Low"
},
{
"@id":"Передаточная функция",
"@type":"value",
"name":"Передаточная функция",
"value":"Linear"
},
{
"@id":"Единицы измерения пределов PV",
"@type":"value",
"name":"Единицы измерения пределов PV",
"value":"MPa"
},
{
"@id":"Верхний диапазон PV",
"@type":"value",
"name":"Верхний диапазон PV",
"value":"0.05000000074505806"},
{
"@id":"Нижний диапазон PV",
"@type":"value",
"name":"Нижний диапазон PV",
"value":"0"
},
{
"@id":"Демпфирование PV (секунды)",
"@type":"value",
"name":"Демпфирование PV (секунды)",
"value":"2"
},
{
"@id":"Защита от записи",
"@type":"value",
"name":"Защита от записи",
"value":"No"
}
]