Оценка наблюдений¶
Статус наблюдения отражает, удался ли приём. Он выставляется тремя путями: автоматически при загрузке результатов, автоматически при их отсутствии и вручную при вычитке.
Шкала¶
Числовое значение |
Статус |
Как появляется |
|---|---|---|
|
good |
Автоматически при получении кадров или вручную |
|
unknown |
Значение по умолчанию, наблюдение не оценивалось |
|
failed |
Автоматически, если артефактов нет вовсе |
отрицательные |
bad |
Вручную при вычитке |
Отдельно хранится waterfall_status — результат ручной вычитки водопада. Именно он
отличает оценку человека от автоматической: NULL означает, что водопад никто не смотрел.
Автоматический «failed»¶
find_and_rate_failed_observations (каждые 15 минут) находит наблюдения, у которых
одновременно:
нет водопада (
waterfall == "");нет аудио (
payload == "");нет демодулированных данных;
прошло больше
OBS_NO_RESULTS_IGNORE_TIMEс момента окончания;наблюдение не архивировано.
Всем таким проставляется -1000. Массовое появление «failed» обычно означает, что
станции не загружают результаты, а не что приём не удался — см. Диагностика неисправностей.
Оценка при загрузке¶
rate_observation(observation_id, action, action_value) вызывается при событиях —
загрузке кадра, установке статуса водопада и т. п. — и возвращает результат во всех
формах сразу: числом, именем бейджа и отображаемым названием.
Ключевое правило: приём одного кадра для аналоговых режимов (CW, FM) не считается успехом — эти режимы исключаются из автоматического «good».
Баг завышенных оценок и его исправление¶
Предупреждение
До исправления в rate_observation ветка data_upload сравнивала ForeignKey
downlink_mode со списком строк. Такое сравнение всегда истинно, поэтому любое
наблюдение, получившее хотя бы один кадр, оценивалось как «good» (100) — включая CW и FM,
которые проверка как раз должна была исключать. Вся статистика успешности сети,
построенная на этих данных, завышена.
Точно откатить последствия нельзя: значение 100, записанное багом, в самом поле
неотличимо от 100, поставленного человеком при вычитке. Поэтому команда
recalculate_observation_ratings намеренно консервативна и трогает только то, на что
никто не претендовал вручную. Наблюдение сбрасывается, если выполнены все условия:
status == 100;есть демодулированные данные (то есть ошибочная ветка действительно отработала);
режим передачи вниз — CW или FM;
waterfall_statusпуст — водопад никто не вычитывал.
Такие наблюдения возвращаются в 0 («unknown»), а не в «bad»: наблюдение никогда не
оценивали, и объявить его неудачным — та же ошибка, только зеркальная.
По умолчанию команда работает в режиме предпросмотра, запись — по флагу --apply:
docker compose run --rm web django-admin recalculate_observation_ratings
docker compose run --rm web django-admin recalculate_observation_ratings --apply
Влияние на аналитику¶
Оценка проставляется позже самого наблюдения, поэтому суточные метрики пересобираются не за один прошедший день, а за окно в 30 дней — см. Аналитика.