SCADA Mobile — система оперативного оповещения сотрудников крупного молочного предприятия о простоях и ЧП на производственных линиях.
Когда линия или оборудование останавливается, сотрудники в других цехах часто не понимают причину (закончились заготовки/материалы, оператор отвлёкся, узел стоит) — и «эффект домино» останавливает упаковку, палетирование и отгрузку. Приложение быстро доносит всем заинтересованным сотрудникам, что произошло, где и почему участок стоит.
Общий пайплайн: событие на оборудовании → считывание через PrintSrv → backend на Spring агрегирует и нормализует событие → рассылка уведомлений → отображение в веб-клиенте.
- Главная панель — список цехов с состоянием (норма/проблема) и количеством аппаратов и линий.
- Автоматы цеха — карточки автоматов с данными текущей партии и значками активных уведомлений.
- Карточка автомата — вкладки «Партия», «Устройства», «Очередь», «Журнал»: текущая партия (описание, EAN, номер, даты выработки/годности), состояние периферии, очередь команд, история ошибок.
- Уведомления — вызов ответственных сотрудников прямо с карточки автомата; входящие уведомления от других сотрудников с вибрацией на устройстве.
- Админ-панель — управление сотрудниками (роли, табельные номера, привязка автоматов) и автоматами.
- PWA — веб-клиент устанавливается на устройство и доставляет уведомления через Service Worker, без отдельного нативного приложения.
- backend — Spring Boot 4 / Java 21: REST + WebSocket API, JWT-аутентификация, API админ-панели, health-check, интеграция с PrintSrv, Flyway-миграции, PostgreSQL.
- frontend — React + TypeScript + Vite (PWA), админка на React Admin.
- Docker — docker-compose сценарии для prod-запуска уже в репозитории; в планах оркестрация (Kubernetes) во внутренней сети компании.
- Базовые части работают: backend, веб-клиент (PWA), админ-панель, уведомления.
- TWA/Android. Нативная оболочка (Bubblewrap) выведена из репозитория: ключевая потребность (уведомления на устройствах с вибрацией) закрывается веб-клиентом в Chrome через Service Worker, а для полноценного TWA в корпоративной сети требуется строгий HTTPS, что организационно сложно. Остаётся потенциальной опцией на будущее.
- Планируется миграция на Kafka. Прямой TCP-опрос PrintServer заменяется чтением из Kafka — опрос берёт на себя отдельный Gateway. См. ТЗ_миграция_на_Kafka.md и ТЗ_Gateway_Якимовец.md.
Перед выкаткой к реальным пользователям система прогнана на изолированном
стенде (k6 + Prometheus/Grafana, команды make load-*, подробности и
воспроизведение — load-tests/README.md). Коротко,
что проверяли и что получилось:
- Сутки под нагрузкой (100 одновременных пользователей, 24 часа): 680 806 HTTP-запросов и 255 949 WebSocket-сессий — ноль ошибок, утечки памяти нет (heap «пилой» 65–90 МБ из 512 МБ), сессии после остановки закрываются до нуля, CPU 32 % на 4 ядрах.
- Всплеск «начало смены» (0→500 подключений за 10 секунд): все 500 сессий установлены без ошибок; подключения встают в очередь до ~7 с (CPU-bound, кратковременно) — для разового события смены приемлемо.
- Ступенчатый рост до 300 пользователей: 300/300, ноль ошибок, handshake за миллисекунды. Критерий «≥ 300 сессий» подтверждён.
- Отказ части оборудования (3 из 14 инстансов PrintSrv недоступны): backend работает, ошибок нет.
Итог: система готова к выкатке в проверенном диапазоне (до ~500 одновременных сессий на 4 ядрах с запасом). Единственные замечания: самый медленный эндпоинт — login (BCrypt, p95 288 мс — осознанная цена хеширования), и на проде стоит включить percentile-гистограммы метрик. Полный отчёт с цифрами и рекомендациями: load-tests/REPORT.md.
- Java 21+
- Node.js 20+ и npm
- Docker Desktop (только для prod режима)
- Запустите backend:
make back-run. - В другом терминале установите зависимости frontend (один раз):
make front-install. - Запустите frontend:
make front-dev. - Откройте в браузере:
- Frontend: http://localhost:5500
- Backend health: http://localhost:8080/api/v1.0.0/health/live
- Swagger UI (dev): http://localhost:8080/swagger-ui.html
Запуск: make docker-prod-up. Остановка: make docker-prod-down.
Подробно про Docker, prod-профиль и env-файлы: RUN_PROJECT_DOCKER.md.
Полный список шорткатов: make help (см. MAKEFILE.md).
Чтобы не дублировать информацию, детализация разнесена по отдельным файлам:
- STRUCTURE.md — архитектура проекта и технологический стек;
- PROJECT_DIAGRAM.md — визуальные схемы системы;
- API_REFERENCE.md — контракт REST и WebSocket;
- FRONTEND_API.md — краткий обзор фронтенд-использования API;
- FRONTEND_DATA_SOURCES.md — откуда backend берёт данные для фронтенда;
- FRONTEND_ARCHITECTURE.md — архитектура frontend;
- NOTIFICATIONS_ARCHITECTURE.md — логика уведомлений;
- api_mapping.md — разделение транспортов и маппинг;
- BACKEND_ARCHITECTURE.md — фактическая архитектура backend;
- BACKEND_COMPONENT_DIAGRAM.md — компонентная диаграмма backend;
- BACKEND_DATA_FLOW.md — поток данных в backend;
- AUTH_FLOW.md — аутентификация и авторизация;
- ALERT_LIFECYCLE.md — жизненный цикл алерта;
- SECURITY.md — политика безопасности и JWT;
- TEST_ACCOUNTS.md — тестовые аккаунты и данные для проверок;
- MAKEFILE.md — команды разработки и запуска;
- load-tests/REPORT.md — итоги нагрузочного тестирования (прогоны, цифры, выводы);
- frontend/README.md — детали веб-клиента и фронтенд-команд.
















