4.8 KiB
4.8 KiB
Фаза 2, Шаг 1: Внешние источники данных — FR24 API + онлайн табло
Статус
🔲 Не начат
Цель
Развернуть отдельный контейнер для сбора данных из внешних источников:
- FR24 API — исторические и live треки (как в прототипе noisemap)
- Онлайн табло — расписание рейсов по аэропортам Москвы (SVO, DME, VKO, ZIA)
Данные сохранять в PostgreSQL в отдельной схеме fr24_ext — не пересекаться со схемой fr24 (RTL-SDR ingest).
Бизнес-требования
BR-1: Сбор данных FR24 API
- Загружать треки рейсов над Московской областью через FR24 API
- Покрытие: bbox ~54.5–57.0°N, 35.5–40.5°E (Московская область)
- Исторические данные: последние 7 дней (при наличии кредитов)
- Live данные: обновление каждые 5 минут
- Хранить: icao24, callsign, координаты трека, высота, скорость, время
BR-2: Сбор данных онлайн табло
- Аэропорты: SVO (Шереметьево), DME (Домодедово), VKO (Внуково), ZIA (Жуковский)
- Данные: номер рейса, авиакомпания, направление, время вылета/прилёта, статус
- Источник: Яндекс.Расписания API или открытые табло аэропортов
- Обновление: каждые 15 минут
- Хранить историю за 30 дней
BR-3: Хранение
- Схема
fr24_extв существующей PostgreSQL БД - Не влиять на схему
fr24(RTL-SDR данные) - Retention: треки FR24 — 30 дней, табло — 30 дней
Технические требования
Контейнер fr24-external
- Python 3.11-slim
- Отдельный сервис в docker-compose.yml
- Переменные окружения: FR24_API_KEY, YANDEX_RASP_API_KEY
- Два независимых воркера: fr24_worker и rasp_worker
- Логирование в /var/log/fr24/external.log
Схема БД fr24_ext
-- Рейсы из FR24 API
fr24_ext.flights_ext (
flight_ext_id, source, fr24_id, icao24, callsign,
origin_iata, destination_iata, aircraft_type,
fetched_at, flight_date
)
-- Треки из FR24 API
fr24_ext.track_points_ext (
point_id, flight_ext_id, observed_at,
lat, lon, altitude_ft, speed_kt, heading_deg
)
-- Табло аэропортов
fr24_ext.schedule (
schedule_id, airport_iata, direction,
flight_number, airline_iata, aircraft_type,
scheduled_at, estimated_at, actual_at,
status, fetched_at
)
ТЗ для Dev-агента
Файлы для создания
tasks/flightradar24/ingest/external/
Dockerfile
main.py # точка входа, запускает оба воркера
fr24_worker.py # загрузка из FR24 API
rasp_worker.py # загрузка из Яндекс.Расписания
requirements.txt
tasks/flightradar24/db/init/003_schema_ext.sql # DDL схемы fr24_ext
Обновить
tasks/flightradar24/compose/docker-compose.yml— добавить сервисexternal
Тест-кейсы
TC-1: FR24 API подключение
- Контейнер стартует без ошибок
- FR24 API возвращает данные для bbox Москвы
- Треки сохраняются в
fr24_ext.track_points_ext
TC-2: Табло аэропортов
- Данные по SVO загружаются корректно
- Статусы рейсов обновляются при повторном запросе
- Дубликаты не создаются (upsert по flight_number + scheduled_at)
TC-3: Изоляция схем
- Запросы к
fr24_extне влияют наfr24 - При падении external контейнера остальные работают
TC-4: Retention
- Данные старше 30 дней удаляются автоматически
Зависимости
- Существующая PostgreSQL (fr24-postgres)
- FR24_API_KEY в ~/.openclaw/.env
- YANDEX_RASP_API_KEY в ~/.openclaw/.env (или альтернативный источник табло)
Оценка объёма
- ~500 рейсов/день над Москвой из FR24
- ~800 записей/день в табло (4 аэропорта × ~200 рейсов)
- Объём БД: ~50 MB/месяц