Отношения с апстримом¶
Портал СОНИКС — out-of-tree форк SatNOGS Network от Libre Space Foundation. Апстрим не отслеживается автоматически: изменения переносятся вручную и только при необходимости.
Что унаследовано¶
Доменная модель:
Station,Observation,Satellite,Transmitter,DemodData,Tleи их связи.Схема планирования наблюдений и структура заданий для клиента.
Формат REST API и большая часть имён полей.
Служебные скрипты
bin/djangoctl.shиsoniks.sh.CONTRIBUTING.md— руководство Libre Space Foundation, включая Developer’s Certificate of Origin.Лицензия AGPL-3.0.
Следы апстрима в именах остались там, где их переименование сломало бы контракт с
клиентами станций: префикс zip-архивов satnogs-observations. Поля satnogs_*
станции удалены 2026-09-10 — их никто не читал; конфигурация станции теперь
в desired_config.
Апстрим — это два репозитория, а не один¶
Главное, что нужно знать, прежде чем что-то сравнивать или переносить: после точки
расхождения (2021) satnogs-network удалил у себя модели Satellite,
Transmitter, Tle и Mode. Теперь он ходит за каталогом в SatNOGS DB по HTTP
(network/base/db_api.py, network/base/cache.py у них) и денормализует нужное прямо
в Observation.
СОНИКС пошёл в обратную сторону — впитал модели satnogs-db внутрь network.base. Из
этого следует три вещи:
Сравнивать нужно СОНИКС с объединением
satnogs-network+satnogs-db. То, чего «нет» у нас относительно network, часто есть у нас из db.db_api.py/cache.pyпереносить бессмысленно: у нас эти таблицы локальные.Денормализация
Observationу апстрима вынужденная — FK ставить не на что. У нас снимок наблюдения (transmitter_*,station_*вObservation) сделан сознательно, ради неизменности истории. Мотивы разные, результат нужен один и тот же.
Каталог у нас ведут администраторы, а не сообщество: workflow предложений satnogs-db
(SatelliteEntry / TransmitterEntry с рецензентом) и мультиветтинг наблюдений
(ArtifactVetting, истина большинством голосов) сознательно не переносятся.
Что добавлено в СОНИКС¶
Область |
Отличие |
|---|---|
Аналитика |
Приложение |
Источники TLE |
Клиент Space-Track, приоритет источников с окном свежести ( |
Публикация TLE |
|
Запуски |
|
Расчёт пролётов |
Переход на |
Авторизация |
OIDC через Keycloak ( |
Оценка |
Исправление завышенных оценок и команда |
Инфраструктура |
Свой пайплайн GitLab CI с ssh-деплоем на стенд и прод. См. CI/CD и деплой |
Локализация |
Русский интерфейс наравне с английским |
Сеть |
Прокси только для |
Версионирование API |
|
Загрузка артефактов |
Идемпотентность по SHA-256: повтор теми же байтами — подтверждение приёма, другими — перезапись оборвавшейся загрузки |
Пакеты данных |
|
Тесты |
85+ тестов API против трёх у апстрима; jest с jsdom для фронтенда |
Интеграция с сетью SatNOGS¶
Форк не разрывает связь с апстримом, а потребляет его данные:
fetch_data(раз в час) тянет спутники и передатчики из SatNOGS DB (DB_API_ENDPOINT);parse_data_from_satnogs(ежедневно, только в проде) забирает кадры SatNOGS Network за прошедшие сутки (NETWORK_API_ENDPOINT);https://db.satnogs.org/api/tle/?format=3le— один из источников TLE, с наименьшим приоритетом.
Перенос изменений из апстрима¶
Прямого слияния веток нет. Практика такая:
Оценить, затрагивает ли изменение апстрима код, который в СОНИКС уже разошёлся (планирование, TLE, оценка наблюдений — разошлись сильнее всего).
Переносить точечным патчем, а не слиянием.
Прогнать тесты расчётных модулей — они и написаны как страховка от расхождений:
test_pass_predictions.py,test_prediction_windows.py,test_tle_priority.py,test_scheduling_migration.py.
Merge-request’ы по самому СОНИКС отправляются в GitLab-репозиторий проекта, а не в апстрим.