5.9 KiB
5.9 KiB
Фаза 2, Шаг 3: Перенос и доработка визуала noisemap на VM-FR24
Статус
🔲 Не начат (зависит от Шага 2)
Цель
Перенести прототип noisemap (сейчас работает на mva154) на VM-FR24, адаптировать его для работы с новой витриной данных fr24_mart и доработать UI под новые возможности.
Бизнес-требования
BR-1: Перенос прототипа
- Прототип noisemap переносится с mva154 на VM-FR24
- Работает как отдельный контейнер в том же docker-compose стеке
- Доступен по тому же пути
/noisemap/через nginx reverse proxy
BR-2: Адаптация под витрину данных
- Источник данных:
fr24_martвместо CSV/JSON файлов - Слой плотности пролётов — из
fr24_mart.noise_grid - Треки рейсов — из
fr24_mart.track_points_unified - Информация о рейсе — из
fr24_mart.flights_unified - Слайдер по дням — работает с реальными датами из БД
BR-3: Новые возможности UI
- Фильтр по источнику данных: RTL-SDR / FR24 API / все
- Индикатор покрытия: % рейсов с треком для выбранного дня
- Попап рейса: показывать авиакомпанию, маршрут, тип ВС, источник данных
- Live режим: автообновление карты каждые 60 сек (данные из RTL-SDR)
BR-4: Шумовая карта
- Слой шума строится из
fr24_mart.noise_grid - Цветовая шкала: зелёный (тихо) → жёлтый → красный (шумно)
- Легенда с единицами (условные единицы шума)
- Возможность переключения между "плотность пролётов" и "уровень шума"
Технические требования
Контейнер fr24-noisemap
- Flask + OpenLayers (как в прототипе)
- Подключение к PostgreSQL (fr24_mart схема)
- Порт: 5556 (как в прототипе на mva154)
- Nginx proxy:
/noisemap/→fr24-noisemap:5556
API endpoints (новые/изменённые)
GET /api/dates — список дат с данными
GET /api/density?date= — шумовая сетка за дату (из noise_grid)
GET /api/flights?date= — список рейсов за дату (из flights_unified)
GET /api/track/<flight_id> — трек рейса (из track_points_unified)
GET /api/live — live борты (из fr24.track_points, последние 60 мин)
GET /api/coverage?date= — метрики покрытия источников
Nginx конфигурация
- Добавить location
/noisemap/в существующий nginx на VM-FR24 - Или развернуть nginx как отдельный контейнер если его нет
ТЗ для Dev-агента
Файлы для создания/изменения
tasks/flightradar24/noisemap/
Dockerfile
app.py # Flask приложение (адаптация прототипа)
requirements.txt
static/
index.html # UI (адаптация прототипа)
app.js # логика карты
style.css
tasks/flightradar24/compose/docker-compose.yml # добавить сервис noisemap + nginx
tasks/flightradar24/compose/nginx.conf # конфигурация nginx
Что взять из прототипа
tasks/flightradar24/prototype/app.py— базовая структура Flasktasks/flightradar24/prototype/static/— UI компонентыtasks/flightradar24/prototype/docs/NOISE_MODEL.md— модель шума
Тест-кейсы
TC-1: Базовая работоспособность
- Контейнер стартует без ошибок
- Карта открывается по
/noisemap/ - Слайдер по дням работает
TC-2: Данные из витрины
- Слой плотности загружается из
fr24_mart.noise_grid - Треки рейсов отображаются из
fr24_mart.track_points_unified - Попап рейса показывает авиакомпанию и маршрут
TC-3: Фильтры
- Фильтр по источнику (RTL-SDR / FR24 / все) работает
- Индикатор покрытия обновляется при смене даты
TC-4: Live режим
- Live борты обновляются каждые 60 сек
- При отсутствии RTL-SDR данных — graceful degradation
TC-5: Производительность
- Загрузка слоя плотности < 2 сек
- Загрузка треков за день < 3 сек
TC-6: Перенос с mva154
- Старый прототип на mva154 продолжает работать (не ломаем)
- Новый инстанс на VM-FR24 работает независимо
Зависимости
- Шаг 2 (витрина fr24_mart должна быть заполнена)
- Прототип noisemap (tasks/flightradar24/prototype/)
- Nginx на VM-FR24 (или новый контейнер)
Риски
- Прототип использует OpenLayers — нужно проверить совместимость с новым API
- Модель шума в прототипе заточена под FR24 данные — нужна адаптация под RTL-SDR