README.md

Описание BlueTraktor-api v0.1.2

api для системы BlueTraktor - решение, которое позволит:
✅ работать с УСЕПИ
✅ подключаться к неограниченному кол-ву серверов
✅ видеть данные в realtime через dashboard
✅ автовосстановление при утере важных для работы компонентов


примечания последнего обновления:

1) доработаны ошибки по восстановлению контейнеров (можете стопать все конетйнеры, они восстанавливаются) 2) отпраляет в мктт шаблоны 3) не работает получение информации об устройстве 4) не считает формулы 5) не обновляет устройтсва и все зависимое при изменении патерна 6) виджеты показывают актуальное значение


Оглавление

  1. Требования к системе
  2. Сборка
  3. Запуск
  4. Быстрый старт
  5. ToDo
  6. Swagger
  7. Разметка
  8. Интеграция

Требования к системе:

версия набора инструкций для 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"
    }
]
Конвейеры
0 успешных
0 с ошибкой