Архитектура проекта#
1. Архитектурная модель#
ioot-pro-cabinet реализует каркас Master Cloud Layer для платформы Green Robot/IOOT PRO и ориентирован на конфигурационный, backend-driven UI.
1.1. Логические уровни (по базовой модели green-robot)#
Field Device Layer (IOOT PRO устройства)
AT32/ESP32 блоки с обменом PDO/SDO, преобразованием и transport-частью.Local Controller Layer (локальный контроллер объекта)
Локальный исполнительный/супервизорный контур с CANopen, local broker и локальными сервисами.Tenant Cloud Layer (контур клиента)
Облако клиента: приём телеметрии, агрегирование данных, команды, конфигурации, обновления, PostgreSQL.Master Cloud Layer (контур управления парком)
Многоклиентский уровень: подписки, политикеы, глобальные аналитические и синхронные механизмы.Client Applications Layer (клиентские UI)
Веб-интерфейс с карточным модульным shell и адаптивным (mobile-first) подходом.
1.2. Что сейчас реализовано в коде#
Master Cloud Layer (каркас):
backend-go/internal/api— HTTP роутинг и базовые endpointы.backend-go/internal/api/plugins/<module>/plugin.go— plugin-style обработчики backend для каждого модуля.backend-go/internal/modules— модульный реестр (metadata + зависимости + install state).backend-go/internal/modules/catalog/<module>/definition.go— описание каждого backend-модуля в своей директории.backend-go/internal/app— загрузка конфигурации (yaml+ env).backend-go/cmd/server/main.go— точка запуска API сервера.
Client Applications Layer (каркас):
frontend-vue/src/App.vue— shell приложения и базовые карточки.frontend-vue/src/modules/<module>/manifest.js— описание frontend-модуля в своей директории.frontend-vue/src/modules/registry.js— сборка frontend-реестра модулей и порядка карточек.frontend-vue/src/styles.css— единый UI-стиль.
Инфраструктурный каркас:
docker-compose.yml— PostgreSQL + NanoMQ + backend.scripts/dev.sh,scripts/docker.sh.
1.3. Каркас данных и сервисов (желаемая логика)#
Конфигурационный/контекстный старт
backend-driven catalog (
modules/scheme) определяет доступные модули.UI выбирает
module_view,display_module,show_filters.
Модульная логика backend
API ресурсы формируют схему (
GET /api/v1/<resource>/scheme) и данные (GET /api/v1/<resource>/list).
Реактивная выдача и управление
live-потоки через WebSocket/MQTT для статусов и событий.
Master-level интеграции
ограниченный обмен служебными данными tenant<->master;
отдельные контуры подписок/политик/обновлений.
1.4. Коммуникационный слой#
HTTP REST — синхронные операции и конфигурирование.
WebSocket/MQTT — телеметрия, статусы и события.
Swagger/OpenAPI — источник истины по контрактам.
Контекстные заголовки для маршрутизации и трассировки:
X-Route-PathX-Route-ModuleX-Route-FilterX-Client-VersionX-Client-Build-Time
1.5. Разделение стеков (синхронизировано с green-robot)#
Backend: Go
Database: PostgreSQL
Message broker: NanoMQ (в составе docker-compose)
Frontend: Vue 3 (в текущем проекте; в базовой green-robot-архитектуре указан Vue 2+TypeScript как целевой стек)
1.6. Scope текущего этапа#
Закрыт каркас уровней и контрактов API.
Введен модульный runtime-реестр (
backend-go/internal/modules) с install/uninstall.Каждый модуль описывает оба контура:
frontend(dashboard block/component),backend(набор API routes),database(миграции и таблицы),permissions(role/resource/actions).
Production runtime использует shared persistence/migration layer (
postgres|sqlite) дляmodules/auth/site-policy/status, аmodules_state_pathостается только legacy import path для совместимости с прежними JSON sidecar-файлами.UI-состав дашборда синхронизируется с установленными модулями.
Введены read-only контуры модели БД и прав:
GET /api/v1/modules/database/listGET /api/v1/modules/permissions/list
Не реализованы пока:
production-grade domain services (
tenant-master sync,analytics,policy updatesкак отдельные сервисы);PWA/offline и специализированные отраслевые сценарии.
Реализован security-контур JWT + RBAC:
JWT (HMAC-SHA256) принимается через HttpOnly cookie и
Authorization: Bearer;middleware применяет role/scope гварды для master/tenant endpoint-групп;
tenant scope принудительно применяется для
industry-*,melioration-*,poultry-*,swine-*;для tenant scope включена boundary-проверка
tenant_id/target_tenant_idв query и JSON body.добавлена вычисляемая permission matrix (
/api/v1/auth/permissions/scheme|list) для UI/API операций.добавлен security-log (
/api/v1/auth/security-log/scheme|list) для событий auth/action (allow|deny).
Реализован operability/release-ready контур:
публичные probes
/health,/live,/ready;диагностический runtime snapshot по shared persistence, migrations, зависимостям и состоянию модулей;
локальный quality gate (
ci-local, smoke, release-checklist);deployment package, production runbook и release gate.
1.7. Отраслевые контуры#
Добавлен отдельный документационный каркас
docs/industriesдля изолированных отраслевых пакетов.Каждый отраслевой пакет использует общие контракты ядра, но имеет собственные:
архитектуру;
backlog задач;
KPI/alarms профили;
интеграционные адаптеры оборудования.
Первый пакет:
docs/industries/poultry(на базе источников../poultry-module).В runtime добавлен
industry dispatcherс режимами:cloud-multi— поддержка выбора отрасли;edge-single— фиксированная отрасль на инсталляцию.
Для
poultryfrontend использует единый workspace:cloud/tenant— overview dashboard с KPI summary и переходом в submodule details;edge-single— fullscreen cards-dashboard для 10» HMI с теми же KPI и быстрым переходом в submodule details;при отсутствии явного route/module-контекста
edge-singleоткрывает poultry workspace как primary fullscreen-экран.
Добавлен endpoint
GET /api/v1/app/contextдля bootstrap-контекста (deployment mode, active industry, feature flags, user scope).app/contextвозвращает runtime policy snapshot (permissions.ui/api,capabilities,guards) и используется как source-of-truth для UI/API guard-слоя (tenant/master,role,feature_flags), включая capability-флагиsidebar_menuиsidebar_menu_update.modules/schemeдополненcatalog_enrichmentи используется shell-runtime для связкиSidebar -> Content -> Infobar.Shell поддерживает отдельный UI-access ресурс
ui.sidebar.menu: доступ к burger-меню и его редактированию определяется role-based UI policy, а выход вынесен в topbar и остается доступным вне burger-контура.Порядок модулей синхронизируется между dashboard и burger-меню через общий drag-and-drop layout persistence; быстрые fullscreen-кнопки рядом с burger формируются из закрепленных модулей sidebar.
Пользовательские shell-настройки (
theme,dashboard_layout,quick_module_ids) сохраняются через backendauth/ui-preferencesс изоляцией поtenant/site/industryи shared persistence layer; локальныйlocalStorageиспользуется только как fallback-кеш в degraded/offline режиме.Shell profile вынесен в отдельный versioned runtime-контур
auth/shell-profile: доступныlist,export,import,rollbackдля снапшотовtheme/layout/quick modules/ui-accessпо ключуtenant/site/industry, backend source-of-truth хранится в shared SQL persistence.Для pilot-контура подготовлены preset-артефакты
cloud-multiиedge-single; shell acceptance smoke выделен в отдельный сценарий и включен в release/smoke pipeline reference runtime.В reference runtime теперь присутствуют pilot process-артефакты: bootstrap-package (
scripts/pilot-bootstrap.py), evidence bundle (scripts/pilot-evidence-bundle.py), rollback/restore drill (scripts/pilot-rollback-drill.py) и единый sign-off bundle (scripts/pilot-signoff.py), использующие существующие APIapp/context,modules/list,modules/site-policy/*,auth/shell-profile/*,auth/security-log/*.Для pilot-артефактов введен внешний retention storage (
scripts/pilot-artifact-retention.py) сarchive-root,index.jsonиrecord.json.Для pilot observability добавлен нормализованный summary endpoint
GET /api/v1/operability/pilot-summaryи alerting CLIscripts/pilot-observability-check.py.Для перехода
pilot -> productionдобавлен формальный gatescripts/pilot-promotion-check.py, а для multi-site эксплуатации —scripts/fleet-rollout-registry.py,scripts/incident-handover-package.pyиscripts/package-immutability-check.py.Клиент
status/streamработает в resilient-режиме: WebSocket reconnect/backoff и fallback на HTTP polling при разрыве realtime-канала.Для отрасли
meliorationреализованы API-контуры:scheme|listдляfield/irrigation-machine/irrigation-drip/soil-moisture/weather/control-mode;ingest-маршруты
machine/drip/soil/weatherиweather/telemetry.
melioration-fieldрассчитывает агрегированный водный баланс по источникам и времени (mmprimary,m3derived) с D-008 policy (station primary,service fallback).Добавлен
profile-serviceдля отраслевых нормативов (/api/v1/industry-profiles/*): YAML import/export, versioning и rollback профилей между хозяйствами.Добавлен отраслевой
industry alarm-bus(/api/v1/industry-alarms/*) и bridge вstatusдля критичных/высоких тревог с передачейcorrelation_id.В отраслевых API формализованы ключи изоляции
tenant_id / industry_code / site_idдля фильтрации и трассировки данных.В
modules/permissionsдобавлены отраслевые границы обновления прав поindustry_code(policy conflict при попытке update вне выбранной отрасли).Добавлен
modules/site-policyконтур частичной активации модулей на уровнеsiteс фильтрацией выдачи модулей/прав/DB-модели поsite_id; policy сохраняется в shared SQL persistence, а не в transient runtime store.