Задачи Celery¶
Задачи объявлены в network/base/tasks.py, network/base/rating_tasks.py и
network/analytics/tasks.py. Расписание собирается в network/celery.py.
Примечание
Каждая периодическая задача обёрнута в тонкую задачу-обёртку в network/celery.py.
Это обход известной проблемы Celery:
shared_task не регистрируются в планировщике beat напрямую.
Расписание¶
Задача |
Периодичность |
|---|---|
|
каждые 30 мин |
|
каждый час |
|
каждые 4 часа |
|
каждый час |
|
|
|
каждые 15 мин |
|
каждые 15 мин (crontab |
|
каждые 5 минут (crontab |
|
каждый час |
|
каждые 12 часов (crontab |
|
раз в сутки |
|
каждые 15 мин |
|
ежедневно в 05:00 UTC |
|
ежедневно в 06:00 UTC |
|
ежедневно в 03:00 UTC |
|
ежедневно в 04:00 UTC |
|
каждые 2 часа |
|
в 00:30, 08:30 и 16:30 UTC |
|
каждые 5 минут (crontab |
|
каждые 15 мин |
|
ежедневно в 00:30 UTC |
|
ежедневно в 00:00 UTC, только при заданном |
|
ежедневно в 02:20 UTC |
|
ежедневно в 02:50 UTC |
|
ежедневно в 01:00 UTC, только при |
|
каждые 15 мин, только при |
|
каждый час, только при |
Условно регистрируемые задачи — частая причина «задача не выполняется»: см. Диагностика неисправностей.
Задачи по областям¶
Орбитальные данные¶
Задача |
Что делает |
|---|---|
|
Загрузка TLE из всех источников и пересчёт |
|
Пересчёт окон будущих наблюдений по свежим TLE |
|
Пересчёт орбитальных параметров спутников |
|
Перевод подтверждённо сошедших аппаратов в статус |
|
Экспорт наборов TLE |
|
Объекты одного запуска из CelesTrak по номеру COSPAR: у запуска без аппаратов заводит их, у запуска с составом проставляет настоящие номера NORAD по имени. TLE не пишет |
|
То же для всех отслеживаемых запусков ( |
|
Состав и TLE запусков из предстартовых файлов SupGP CelesTrak, см. Запуски |
|
Сближения спутников портала из CelesTrak SOCRATES, см. Сближения |
Каталог¶
Задача |
Что делает |
|---|---|
|
Спутники и передатчики из SatNOGS DB |
|
Ручной запуск обновления из SatNOGS DB |
|
Каталог стенда из API sonik.space с перезаписью; не запускается при |
|
Обход наблюдений SatNOGS Network за прошедшие UTC-сутки: по задаче |
|
Кадры одного наблюдения SatNOGS Network: пропускает уже сохранённые, остальные скачивает, сохраняет и сразу декодирует; при сетевой ошибке повторяется |
|
Поиск объектов, которых нет в базе |
|
Пересчёт статистики передатчиков |
|
Паспортные данные наноспутников с nanosats.eu |
|
Масса, описания и фото из Wikidata и Wikimedia Commons |
|
Календарь запусков из Launch Library 2 — по бюджету 15 запросов в час, живое окно пуска первым (см. Запуски) |
|
Момент и станция первого сигнала для аппаратов отслеживаемых запусков — один раз, без пересчёта |
Импорт паспортных данных¶
Обе задачи ходят на чужие серверы, поэтому обе идут срезами: за прогон обрабатывается полсотни записей, а место остановки запоминается в кеше. Полный обход nanosats.eu занимает около полутора месяцев — примерно с той же частотой обновляется и сам сайт, а всплеска нагрузки не возникает никогда. Потерянный кеш просто начинает обход заново: все записи идемпотентны.
Обе задачи уважают locked_fields (см. Спутники и передатчики) и пишут только те
колонки, которые администратор может заморозить. Соединение с каталогом — только
по номеру NORAD: страница без него пропускается, потому что совпадение по имени
рано или поздно припишет данные не тому аппарату.
Фотографии берутся только из Wikimedia Commons. С nanosats.eu снимки не
скачиваются: их robots.txt запрещает каталог с рисунками, а сайт сам сообщает,
что права на фотографии ему не принадлежат. Оттуда сохраняются только ссылки
Photo sources как провенанс. У файла Commons проверяется, что он лежит под
/wikipedia/commons/ — иллюстрация статьи может быть локальной загрузкой
en.wikipedia под fair use, и публиковать её нельзя.
Планирование¶
Задача |
Что делает |
|---|---|
|
Автопланирование по сети на заданный горизонт |
|
По основному расписанию станции |
|
По дополнительному расписанию станции |
|
По общесетевому расписанию |
|
Планирование наблюдений нового запуска |
Наблюдения и данные¶
Задача |
Что делает |
|---|---|
|
Обработка загруженного аудио |
|
Упаковка аудио в архивы |
|
Выгрузка архивов в хранилище |
|
Удаление устаревших наблюдений |
|
Декодирование одного кадра |
|
Декодирование кадров за неделю, оставшихся без расшифровки. В расписании нет: до |
|
Массовое и повторное декодирование |
|
Экспорт наборов кадров |
|
Удаление устаревших выгрузок |
Станции¶
Задача |
Что делает |
|---|---|
|
Запись в журнал станций, ушедших со связи |
|
Уведомление о станциях без результатов |
|
Пересчёт статистики станций |
Оценка и аналитика¶
Задача |
Что делает |
|---|---|
|
Проставление |
|
Оценка наблюдения по событию |
|
Пересчёт сводных счётчиков сети для главной и страницы статистики: страницы только читают кэш, полный проход по кадрам идёт в воркере |
|
Суточные метрики за окно в 30 дней |
|
Историческое наполнение метрик |
Резервные копии¶
Задача |
Описание |
|---|---|
|
|
Последний запуск¶
Сигналы task_prerun, task_postrun и task_failure в network/celery.py пишут
в кеш запись task-run:<имя задачи> без срока жизни: начало, конец, длительность,
состояние и текст ошибки. Хранится только последний запуск. Сигналы срабатывают
для обёртки из network/celery.py, а не для shared_task внутри неё — по этому
имени страница «Система» (см. Эксплуатация) и сопоставляет записи с
расписанием beat. Время следующего запуска там — оценка
schedule.remaining_estimate() от последнего старта: beat ведёт собственный
отсчёт в shelve контейнера celery-beat, и после его пересоздания оценка и
факт расходятся на один интервал.
Запуск вручную¶
make djshell
from network.base.tasks import fetch_tle
fetch_tle.delay() # в очередь
fetch_tle() # синхронно, в текущем процессе
Часть задач продублирована management-командами — см. Management-команды. Задачи из расписания можно поставить в очередь со страницы «Система» кнопкой «Запустить» — с теми же аргументами, что у beat.