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