Архитектура¶
Портал — монолит на Django 5.2 LTS. Код разложен по четырём приложениям в каталоге
network/.
Приложения¶
network.base¶
Ядро. Содержит почти всю предметную логику:
Файл / каталог |
Содержимое |
|---|---|
|
Все модели предметной области |
|
HTML-представления, разбитые по доменам |
|
Формы |
|
Настройка админки |
|
Задачи Celery |
|
Оценка наблюдений |
|
Расчёт окон наблюдений |
|
Автопланирование |
|
Планирование наблюдений новых запусков |
|
Общие примитивы геометрии пролёта |
|
Расчёт орбитальных параметров |
|
Разбор TLE и отбор победителя по источникам |
|
Клиент Space-Track |
|
Статистика |
|
Выгрузка в InfluxDB |
|
Права на планирование и публикацию |
|
Инфраструктурное |
|
Management-команды |
network.api¶
REST API на DRF. Обращается к моделям network.base через сериализаторы и ViewSet’ы;
схема генерируется drf-spectacular. См. REST API.
network.users¶
Кастомная модель пользователя и профиль. От неё зависят Station.owner,
Observation.author и права.
network.analytics¶
Суточные метрики: собственные модели, запросы, задачи, HTML- и API-представления, своя management-команда. См. Аналитика.
Разбиение представлений¶
HTML-представления сознательно разложены по доменам, а не свалены в один views.py:
network/base/views/
├── generic.py общие страницы
├── observation.py наблюдения
├── station.py станции
├── satellite.py спутники
├── transmitter.py передатчики
├── scheduling.py ручное планирование
├── auto_scheduling.py настройки автопланирования
├── launch.py запуски
├── decay.py сошедшие с орбиты
├── gallery.py галерея снимков
└── statistics.py сводная статистика
Правило: HTML-представления идут в network/base/views/<домен>.py, эндпоинты API —
в network/api/views.py классами DRF.
Маршруты верхнего уровня¶
network/urls.py:
Префикс |
Что |
|---|---|
|
Основные страницы ( |
|
Админка Django |
|
Профили |
|
django-allauth |
|
REST API |
|
mozilla-django-oidc |
|
Дашборд аналитики |
|
Переключение языка и JS-каталог переводов |
При DEBUG дополнительно подключаются Django Debug Toolbar (/__debug__/) и раздача
/media/.
Примечание
Схема OpenAPI не отдаётся приложением: маршрутов Swagger/ReDoc нет, схема генерируется
офлайн командой ./manage.py spectacular в CI и публикуется вместе с документацией.
Асинхронная часть¶
Celery с Redis в качестве брокера и backend’а результатов. Приложение — network/celery.py,
там же собирается расписание периодических задач. Полный список — Задачи Celery.
Внешние зависимости¶
Направление |
Через что |
|---|---|
SatNOGS DB |
HTTP, |
SatNOGS Network |
HTTP, |
Space-Track |
|
CelesTrak |
HTTP, прямые URL |
S3 |
|
InfluxDB |
|
Keycloak |
|
Mapbox |
SDK и токен |
Слои и потоки данных¶
Клиент станции ──► /api/jobs/ ──────────────► Observation (запланировано)
│
└── приём ──► /api/observations/ (аудио, водопад)
/api/demoddata/ (кадры)
│
▼
rate_observation ──► статус наблюдения
│
▼
decode_*, process_audio, zip/archive
│
▼
generate_daily_metrics ──► аналитика
Планирование идёт встречным потоком: fetch_tle → LatestTleSet →
predict_available_observation_windows → create_new_observation → задания для клиента.