Наблюдения

Observation — центральная сущность портала. Одно наблюдение связывает станцию, спутник, передатчик, набор TLE и автора, и покрывает временное окно одного пролёта.

Жизненный цикл

  1. Планирование. Наблюдение создаётся вручную или автоматически; рассчитывается окно start…end по актуальному TLE. См. Планирование наблюдений.

  2. Выдача заданий. Клиент станции запрашивает /api/jobs/ при старте и получает свои будущие наблюдения с частотами и параметрами приёма; изменения расписания портал публикует ему по MQTT.

  3. Приём. Клиент наводит антенну, запускает флоуграф, записывает аудио и водопад.

  4. Загрузка результатов. Аудио (payload) и водопад (waterfall) уходят в /api/observations/, демодулированные кадры — в /api/demoddata/.

  5. Оценка. Наблюдению проставляется статус — автоматически или человеком при вычитке. См. Оценка наблюдений.

  6. Постобработка. Декодирование данных, обновление статистики передатчиков, опционально — упаковка и архивация аудио.

Статусы

Строковые статусы наблюдения:

Статус

Значение

unknown

Не оценено

good

Приём успешен

bad

Приём неудачен

failed

Артефактов нет вовсе

Внутренне статус хранится числом: 100 — good, -1000 — failed, 0 — unknown. Отдельно ведётся waterfall_status — результат ручной вычитки водопада; именно он отличает оценку человека от автоматической.

Артефакты

Поле

Содержимое

payload

Аудиозапись пролёта

waterfall

Изображение-водопад (спектрограмма)

demoddata

Связанные записи DemodData — демодулированные кадры

Каждый вид артефактов независимо кладётся локально или в S3 — флаги USE_S3_STORAGE_FOR_AUDIO, USE_S3_STORAGE_FOR_WATERFALL, USE_S3_STORAGE_FOR_DATA.

Длительность аудио сверяется с длительностью окна с допуском OBS_AUDIO_DURATION_TOLERANCE.

Демодулированные данные

DemodData — кадры, полученные из наблюдения; связаны со спутником и станцией. Обрабатываются задачами:

  • decode_current_frame — декодирование конкретного кадра;

  • decode_recent_data — ежедневное декодирование свежих данных;

  • decode_all_data, decode_all_nondecoded_data — массовое и повторное декодирование.

Экспорт наборов кадров идёт через export_frames → export_frames_batch → export_frames_finalize; результат хранится в ExportedFramesetProxy (ExportedFrameset) и удаляется задачей remove_old_exported_framesets по истечении EXPORTED_FRAMESET_TIME_TO_LIVE.

Архивация аудио

Опциональный конвейер для экономии места:

  1. zip_audio_files (каждые 15 минут) пакует аудио по AUDIO_FILES_PER_ZIP файлов в архив с префиксом ZIP_FILE_PREFIX.

  2. archive_audio_zip_files (раз в час) выгружает архивы, по ZIP_FILES_PER_ITEM в элемент коллекции ARCHIVE_COLLECTION.

  3. При включённых REMOVE_ARCHIVED_AUDIO_FILES / REMOVE_ARCHIVED_ZIP_FILE исходники удаляются.

Наблюдения моложе ARCHIVE_SKIP_TIME (48 ч) не архивируются. Обе задачи регистрируются только при выключенном USE_S3_STORAGE_FOR_AUDIO.

Просмотр

HTML-представления разложены по доменам в network/base/views/: observation.py — списки и карточки наблюдений, gallery.py — галерея снимков, statistics.py — сводная статистика.

Карточка наблюдения и её копия в проверке (includes/observation_detail.html) берут из observation_stages_context() строку панели «Этапы приёма» — первый этап с ошибкой из client_metadata.stages. Вкладка «Метаданные» над сырым деревом показывает таблицу этапов с частями декодера; станция со старым клиентом этого блока не шлёт, и страница выглядит как раньше.

Программный доступ — /api/observations/, /api/demoddata/, см. Обзор эндпоинтов.