Доменная модель¶
Все модели предметной области — в network/base/models.py, метрики аналитики —
в network/analytics/models.py, пользователь — в network/users/models.py.
Связи¶
User ──┬── Station ──┬── Antenna ── FrequencyRange
│ ├── StationStat
│ ├── StationStatusLog
│ ├── StationSchedule
│ └── StationScheduleSec
│
└── Observation ── DemodData
│
├── Station
├── Satellite ──┬── Transmitter ── Mode
│ │ └── TransmitterStats
│ ├── SatelliteStatusLog
│ ├── SatelliteSubscription ── User
│ ├── Telemetry
│ ├── Tle ── LatestTleSet
│ ├── Operator
│ └── Network
└── Tle
Launch ── SatelliteLaunch ── Satellite
NetworkSchedule (одиночная запись)
ExportedFrameset
Основные сущности¶
StationНаземная станция. Владелец, координаты (
lat,lng,alt),horizon, флагиis_availableиtesting,violator_scheduling,target_utilization. Конфигурация с портала —desired_config(плоский JSON, поля изnetwork/base/station_config.py),config_generationи разовые команды станцииcommands; что станция сообщила о себе —reported_status(слияние по ключам:modes,config,sdr,calibration,connection,agent). Состояние (online / testing / unavailable / offline / never) не хранится — оно выводится изlast_seenи двух флагов. Подробно — Наземные станции.ReleaseChannelДве строки,
canaryиstable, с digest образа клиента (толькоимя@sha256:…, тег валидатор не пропустит). Станция следует каналуrelease_channel; применяет образ агент станции, не портал, и отчитывается ключомagentвreported_status.Antenna,AntennaType,FrequencyRangeАнтенное хозяйство станции. Диапазоны сопоставляются с частотами передатчиков при планировании.
StationStat,StationStatusLogАгрегаты по станции и история смены состояний. Строка журнала — три булевых (
is_connected,is_available,testing), то есть снимок того же, из чего состояние выводится.StationSchedule,StationScheduleSec,NetworkScheduleПараметры автопланирования: флаг
active, список спутников и JSON с ограничениями. Первые две — one-to-one со станцией, третья одна на всю сеть.SatelliteАппарат:
sat_id,norad_cat_id,source(Admin/CelesTrak), связи сOperatorиNetwork. Хранимыйstatus— словарь satnogs-db (in orbit/future/re-entered/launch failed), потому что оттуда его приноситfetch_data; наружу в v1 идёт довоенныйalive/deadчерезstatus_badge.associated_satellite— самоссылка на аппарат, в который этот слит: выборки по спутнику ходят по всей группе (Satellite.associated_satellite_ids()).reception_statusиreception_evidence— подтверждён ли приём аппарата и чем; заполняются импортом, наружу пока не отдаются.SatelliteStatusLogИстория автоматических смен статуса спутника: старый и новый статус, сработавшее правило (
spacetrack decay/tle silence), время. Ручные правки сюда не пишутся — они есть в истории объекта в админке. Наличие строки заодно запрещает автоматике повторно переводить аппарат, которого человек вернул в орбиту — см. Спутники и передатчики.SatelliteSubscriptionПодписка пользователя на кадры спутника: пара
user+satellite, уникальная. По ней ACL брокера пускаетsubscriber-<id>читатьsatellites/<sat_id>/frames, и только пока у пользователя есть станция в сети. Пароль подписчика —User.subscription_key, отдельный от API-токена. См. Спутники и передатчики, раздел «Подписка на данные».Transmitter,Mode,TransmitterStatsПередатчик с частотами вверх/вниз, режимом, типом (
Transmitter/Transceiver/Transponder), статусом (active/inactive/invalid) и статусом координации IARU.params— JSON с параметрами режима в том виде, в каком их отдаёт источник; портал их не разбирает, а переносит в снимок наблюдения и дальше в/api/jobs/. Исключение — режимLoRa: схему проверяетTransmitter.clean(), а форма админки рисует поля TinyGS (SF, полоса, CR, sync word…) и собирает из нихparamsповерх прежних ключей. Пустойparamsу LoRa — «не настроен»: запись сохраняется (иначе у неё нельзя сменить даже статус), но ни один путь планирования её не берёт.TelemetryДекодеры телеметрии спутника.
Tle,LatestTleSetНаборы орбитальных элементов.
Tle— по записи на источник и загрузку,LatestTleSet— указатель на выбранный набор. См. Орбитальные данные (TLE).ObservationНаблюдение. Ссылается на станцию, спутник, передатчик,
Tleи автора; хранит окноstart…end,status,waterfall_status, файлыpayloadиwaterfall. Плюс снимок передатчика и станции на момент планирования —transmitter_mode,transmitter_baud,transmitter_frequency_low/_high/_drift,transmitter_status,transmitter_parameters,station_lat/_lng/_altи остальные поля с теми же префиксами. Снимок снимается вObservation.save()при создании; читать данные о наблюдении нужно из него, а не по FK, иначе правка справочника задним числом перепишет историю. У наблюдений, которые ещё не начались,refresh_future_observation_snapshots()обновляет снимок поpost_saveпередатчика — но только для станции, чьи антенны держат новую частоту. См. Наблюдения.DemodDataДемодулированные кадры наблюдения, связаны со спутником и станцией.
ExportedFramesetВыгрузка набора кадров, живёт
EXPORTED_FRAMESET_TIME_TO_LIVE.Launch,SatelliteLaunchЗапуск — носитель, площадка, оператор, орбита, статус и снимок Launch Library 2 в
ll2;is_trackedотделяет запуски сети от мирового календаря — и аппарат в его составе (тип миссии, статус). См. Запуски.Operator,NetworkОператор аппарата и сеть, к которой он отнесён.
Аналитика¶
NetworkDailyMetric — один срез по сети на дату; StationDailyMetric — срез на пару
«станция × дата». Состав полей — в Аналитика.
Соглашения¶
Существующие миграции в
network/*/migrations/не редактируются — только новые черезmakemigrations.Пользовательские строки в моделях оборачиваются в
gettext_lazy(_("...")).Числовые справочники статусов вынесены в константы модуля:
OBSERVATION_STATUSES,STATION_STATUSES,SATELLITE_STATUS,TRANSMITTER_STATUS,TRANSMITTER_TYPE,SATELLITE_SOURCE,IARU_COORDINATION_STATUS,STATION_VIOLATOR_SCHEDULING_CHOICES.Частоты валидируются в границах
MIN_FREQ(0 Гц) …MAX_FREQ(40 ГГц).ModifiedArrayField—ArrayFieldс формой в виде набора чекбоксов; используется там, где нужно множественное значение из фиксированного списка.