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

5.9 KiB
Raw Blame History

Фаза 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