soniks_client.jobs

Задания планировщика и работа с файлами наблюдений.

Регистрация заданий

Регистрация постоянных заданий планировщика.

soniks_client.jobs.register_observation_jobs(scheduler)[исходный код]

Зарегистрировать периодическую сверку расписания с порталом.

Параметры:

scheduler (BaseScheduler)

Тип результата:

None

soniks_client.jobs.register_resending_jobs(scheduler)[исходный код]

Зарегистрировать периодическую повторную отправку из incomplete.

Параметры:

scheduler (BaseScheduler)

Тип результата:

None

soniks_client.jobs.register_sat_data_jobs(scheduler)[исходный код]

Зарегистрировать периодическое обновление определений спутников.

Без next_run_time: на старте bundle уже синхронизирован из main().

Параметры:

scheduler (BaseScheduler)

Тип результата:

None

Синхронизация расписания

Сверка заданий портала с состоянием планировщика, см. Архитектуру.

Сверка расписания портала с состоянием планировщика.

Идентификатор задания на портале совпадает с идентификатором задания в планировщике — на этом строится добавление, обновление и удаление.

soniks_client.jobs.sync.sync_observation_jobs(scheduler)[исходный код]

Свести расписание портала с состоянием планировщика.

Задания делятся на добавляемые, обновляемые и удаляемые; отменённый на портале проход исчезает и у станции.

Параметры:

scheduler (BaseScheduler)

Тип результата:

None

Выполнение наблюдения

Задание наблюдения: полный жизненный цикл одного прохода.

soniks_client.jobs.observation.execute_observation(*, job_id, tle, start, end, frequency, mode, baud, norad_cat_id=None, scheduler)[исходный код]

Провести один проход целиком.

Последовательность: подготовка, запуск наблюдателя файловой системы (кадры уходят на портал во время прохода), satnogs-pre, приём, satnogs-post, постобработка и постановка задания на выгрузку.

Ошибки наблюдения логируются и гасятся — планировщик продолжает работу.

Параметры:
  • job_id (str)

  • tle (dict[str, str])

  • start (datetime)

  • end (datetime)

  • frequency (int)

  • mode (str)

  • baud (int)

  • norad_cat_id (int | None)

  • scheduler (BaseScheduler)

Тип результата:

None

Наблюдатель файловой системы

Отправка декодированных кадров пачками прямо во время прохода.

Наблюдатель файловой системы: отправка декодированных кадров во время прохода.

class soniks_client.jobs.file_surveillance.CreateFileHandler(observation_id, prefix, send_callback, scheduler, batch_delay)[исходный код]

Базовые классы: FileSystemEventHandler

Наблюдатель за появлением декодированных кадров в директории наблюдения.

Кадры копятся в течение OBSERVATION__BATCH_DELAY и уходят одной пачкой, не дожидаясь конца прохода.

Файл берётся в работу по on_closed (запись завершена) и по on_created (файл только появился). Второе нужно для наблюдателей, не отдающих IN_CLOSE_WRITE; чтобы не выгрузить кадр обрезанным, перед отправкой размер файла сверяется с тем, что был на момент постановки в очередь.

Параметры:
  • observation_id (str)

  • prefix (str)

  • send_callback (Callable[[list[Path], str], None])

  • scheduler (BaseScheduler)

  • batch_delay (float)

on_created(event)[исходный код]

Взять в работу появившийся файл.

Параметры:

event (FileSystemEvent)

Тип результата:

None

on_closed(event)[исходный код]

Взять в работу файл, запись в который завершена.

Параметры:

event (FileSystemEvent)

Тип результата:

None

send_batch(force=False)[исходный код]

Отправить накопленную пачку кадров.

Параметры:

force (bool) – Проход окончен, файлы дописаны — отправлять не сверяя размер.

Тип результата:

None

Отправка данных

См. также Загрузку данных.

Выгрузка файлов наблюдения и раскладка их по директориям по итогу отправки.

soniks_client.jobs.sending_data.send_data_during_observation(file_paths, observation_id)[исходный код]

Выгрузить пачку декодированных кадров, появившихся во время прохода.

По итогу отправки файл удаляется, переезжает в complete либо в incomplete для повторной попытки.

Параметры:
  • file_paths (list[Path])

  • observation_id (str)

Тип результата:

None

soniks_client.jobs.sending_data.send_data_after_observation(observation_id)[исходный код]

Выгрузить аудио, водопад и оставшиеся кадры после прохода.

Параметры:

observation_id (str)

Тип результата:

None

soniks_client.jobs.sending_data.send_observation_data_again(observation_dir_path)[исходный код]

Повторно выгрузить файлы наблюдения из директории incomplete.

Директория закрывается, только если ушли все файлы. Одну и ту же директорию одновременно обходит не больше одного задания.

Параметры:

observation_dir_path (Path)

Тип результата:

None

Повторная отправка наблюдений, осевших в директории incomplete.

soniks_client.jobs.resending.resending_jobs(scheduler)[исходный код]

Поставить задание повторной отправки на каждое наблюдение в incomplete.

Параметры:

scheduler (BaseScheduler)

Тип результата:

None

Работа с файлами

Сбор путей файлов наблюдения, сгруппированных по префиксу выгрузки.

soniks_client.jobs.file_manager.file_paths.get_paths_observation_files(observation_id)[исходный код]

Собрать пути непустых файлов наблюдения, сгруппировав их по префиксу.

Результат:

Директория наблюдения и словарь «префикс — список путей».

Параметры:

observation_id (str)

Тип результата:

tuple[Path, dict[str, list[Path]]]

Чтение файлов наблюдения в структуру для выгрузки на портал.

soniks_client.jobs.file_manager.read_files.add_payload_to_sending_data(file_path)[исходный код]

Прочитать аудиозапись прохода для выгрузки.

Параметры:

file_path (Path)

Тип результата:

dict[str, bytes]

soniks_client.jobs.file_manager.read_files.add_waterfall_to_sending_data(file_path)[исходный код]

Прочитать изображение водопада для выгрузки.

Параметры:

file_path (Path)

Тип результата:

dict[str, bytes]

soniks_client.jobs.file_manager.read_files.add_metadata_to_sending_data(file_path)[исходный код]

Прочитать метаданные наблюдения для выгрузки.

Читается байтами, а не текстом: обрезанный файл (кончилось место) уедет на портал как есть, а не упадёт с UnicodeDecodeError мимо очереди.

Параметры:

file_path (Path)

Тип результата:

dict[str, bytes]

soniks_client.jobs.file_manager.read_files.add_demoddata_to_sending_data(file_path)[исходный код]

Прочитать декодированный кадр для выгрузки.

Из JSON берётся поле pdu в base64; если разобрать не удалось, файл отправляется как есть.

Параметры:

file_path (Path)

Тип результата:

dict[str, bytes]

Перемещение и удаление файлов и директорий наблюдения после выгрузки.

soniks_client.jobs.file_manager.move_file.delete_observation_directory(directory_path)[исходный код]

Удалить директорию наблюдения со всем содержимым.

Параметры:

directory_path (Path)

Тип результата:

None

soniks_client.jobs.file_manager.move_file.delete_data_file(file_path)[исходный код]

Удалить файл декодированных данных.

Параметры:

file_path (Path)

Тип результата:

None

soniks_client.jobs.file_manager.move_file.delete_data_files(file_paths)[исходный код]

Удалить несколько файлов декодированных данных.

Параметры:

file_paths (list[Path])

Тип результата:

None

soniks_client.jobs.file_manager.move_file.move_observation_directory_to_complete_directory(directory_path)[исходный код]

Перенести директорию наблюдения в complete.

Параметры:

directory_path (Path)

Тип результата:

None

soniks_client.jobs.file_manager.move_file.move_data_file_to_complete_directory(file_path)[исходный код]

Перенести выгруженный файл в complete.

Параметры:

file_path (Path)

Тип результата:

None

soniks_client.jobs.file_manager.move_file.move_file_to_incomplete_directory(file_path)[исходный код]

Перенести невыгруженный файл в incomplete для повторной попытки.

Результат:

True, если файл лёг в incomplete. False означает, что файл выпал из очереди повторов: вызывающий не должен закрывать директорию наблюдения, иначе единственная копия данных будет удалена.

Параметры:

file_path (Path)

Тип результата:

bool