Test server

This commit is contained in:
Anatoly Antonov 2026-07-04 04:18:36 +09:00
parent 43c120df4c
commit 1e2a276126
3 changed files with 317 additions and 6 deletions

View file

@ -47,6 +47,46 @@ python3 test_server.py --speedup 200 --start 5900 # сразу перед ра
Эмулирует полный профиль полёта (подъём 5 м/с → разрыв на 30 км → спуск) в
точном формате пакетов бэкенда. Подключаться на `ws://localhost:8765/`.
## Демо бок-о-бок с leaflet_svelte (через Django, как в проде)
```bash
scripts/demo-stack.sh # Django :8000 + leaflet :5173 + дэшборд :5174 + станция
scripts/demo-stack.sh restart-flight # полёт заново: рестарт станции + чистка истории в БД
scripts/demo-stack.sh stop
```
Станция летит по `mock_prediction.json` из корня репозиториев (реальный
предикт) со случайным дрейфом до ±5 км. Каждый запуск/`restart-flight`
начинает полёт с нуля; после него нажми «Отключиться/Подключиться» в обоих
окнах, чтобы сбросить старые графики. Темп: `SPEEDUP=60 scripts/demo-stack.sh`.
Скрипт также поднимает **фейковый predictor на :8080** (захардкоженный адрес
`TawhiriClient` в Django), который отдаёт тот же `mock_prediction.json`
поэтому «Рассчитать» в leaflet возвращает ровно ту траекторию, по которой
летит станция. Порядок для оверлея прогноза в слежении: `/predict`
«Рассчитать» → перейти на «Слежение» **кликом в навбаре** (результат прогноза
живёт в памяти SPA и не переживает перезагрузку страницы) → выбрать рабочую
область в «Сравнении с прогнозом». Если на :8080 уже работает настоящий
predictor — скрипт его не трогает и прогнозы идут через него.
График отклонений сопоставляет точки по времени: при ускоренном полёте
(speedup > 1) времена телеметрии и прогноза расходятся — для честного
сравнения ставь дату запуска в форме «сейчас» и `SPEEDUP=1`.
Скрипт (адаптация leaflet_svelte/scripts/run-stack.sh под новые пути) сам
создаёт спутник и токен, запускает `test_server.py --push` как наземную
станцию и печатает UUID спутника. Дальше:
- **leaflet**: http://localhost:5173/track → логин demo/demo → вставить UUID →
«Подключиться»;
- **дэшборд**: http://localhost:5174/ → адрес
`ws://localhost:8000/api/ws/satellite/<UUID>/telemetry/` → «Подключиться»
(адрес запоминается в localStorage; история за прошедший полёт подтянется
по REST автоматически).
Оба окна читают один и тот же поток из Django. Если фронты уже запущены
руками — скрипт их не трогает, просто вставь UUID в оба окна.
## Пре-флайт аудит форматов
```bash