diff --git a/tasks/flightradar24/PROJECT.md b/tasks/flightradar24/PROJECT.md index 6c25204..e66013e 100644 --- a/tasks/flightradar24/PROJECT.md +++ b/tasks/flightradar24/PROJECT.md @@ -90,19 +90,31 @@ - основной переходной источник после исчерпания FR24-only подхода ## 6. Бэклог -### Для FR24 / noisemap части -- [ ] Пополнить кредиты FR24, если потребуется добор исторических дней -- [ ] Улучшить модель шума v2 -- [ ] Ночной штраф Lden -- [ ] Оптимизировать расчёт плотности -- [ ] Экспорт зон в GeoJSON/KML -### Для RTL-SDR ingest-контура -- [ ] Описать схему БД и индексы -- [ ] Описать контейнеры и compose-файл -- [ ] Описать мониторинг и healthchecks -- [ ] Описать backup/restore -- [ ] Определить контракт между ingest и noisemap UI +### ✅ Выполнено (апрель 2026) +- [x] RTL-SDR ingest контур (capture + preprocess + api + monitoring + backup) +- [x] PostgreSQL/PostGIS схема fr24 +- [x] Leaflet карта с треками и фильтром периода +- [x] Мониторинг дашборд +- [x] Батчевая запись, фильтр onground, кеш скорости с TTL +- [x] Callsign из MSG1 + +### 🔜 Шаг 1: Внешние источники данных +- [ ] Контейнер `fr24-external` с FR24 API + Яндекс.Расписания +- [ ] Схема `fr24_ext` в PostgreSQL +- [ ] ТЗ: `docs/STEP1_EXTERNAL_DATA.md` + +### 🔜 Шаг 2: Витрина данных +- [ ] Объединение RTL-SDR + FR24 API + табло в схему `fr24_mart` +- [ ] Шумовая сетка noise_grid +- [ ] Метрики покрытия источников +- [ ] ТЗ: `docs/STEP2_DATA_MART.md` + +### 🔜 Шаг 3: Перенос noisemap на VM-FR24 +- [ ] Адаптация прототипа под fr24_mart +- [ ] Live режим из RTL-SDR +- [ ] Фильтр по источнику данных +- [ ] ТЗ: `docs/STEP3_NOISEMAP_MIGRATION.md` ## 7. Документация - `tasks/flightradar24/README.md` — обзор проекта diff --git a/tasks/flightradar24/docs/STEP3_NOISEMAP_MIGRATION.md b/tasks/flightradar24/docs/STEP3_NOISEMAP_MIGRATION.md new file mode 100644 index 0000000..b4e824d --- /dev/null +++ b/tasks/flightradar24/docs/STEP3_NOISEMAP_MIGRATION.md @@ -0,0 +1,123 @@ +# Шаг 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/ — трек рейса (из 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