Files
wiki/tasks/flightradar24/docs/PHASE2_STEP3_NOISEMAP_MIGRATION.md
2026-04-20 11:40:01 +03:00

124 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Фаза 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` — базовая структура Flask
- `tasks/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