Files
wiki/tasks/flightradar24/docs/STEP1_EXTERNAL_DATA.md
2026-04-20 10:20:02 +03:00

4.8 KiB
Raw Blame History

Шаг 1: Внешние источники данных — FR24 API + онлайн табло

Статус

🔲 Не начат

Цель

Развернуть отдельный контейнер для сбора данных из внешних источников:

  1. FR24 API — исторические и live треки (как в прототипе noisemap)
  2. Онлайн табло — расписание рейсов по аэропортам Москвы (SVO, DME, VKO, ZIA)

Данные сохранять в PostgreSQL в отдельной схеме fr24_ext — не пересекаться со схемой fr24 (RTL-SDR ingest).


Бизнес-требования

BR-1: Сбор данных FR24 API

  • Загружать треки рейсов над Московской областью через FR24 API
  • Покрытие: bbox ~54.557.0°N, 35.540.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/месяц