Skip to content

Распилить планировщик #31

@viribus-issue-bot

Description

@viribus-issue-bot

Issue open by Roman Dyakov via telegram message.

#рефакторинг №2

https://apscheduler.readthedocs.io/en/3.x/userguide.html

  • Создать новый объкет щедулера как BlockingScheduler(), импортнуть его в cli и запустить вместо текущего класса щедулера (так как щедулер блокирующий, после вызова start() весь остальной поток остановится и следующие функции выполнены не будут, это нормально). Сделать это лучше где-то в папке worker в отдельном файле.

  • Настроить SQLAlchemyJobStore для хранения тасок, которые нужно запускать. Используй metadata, тогда новая таблица сгенерируется в алембике. Используй engine, тогда будешь использовать то же подключение, что и нужно для обычной работы (зачем их плодить, правда?). Импортни щедулер в файле конфигурации алембика, чтобы тот почувствовал какую миграцию нужно сделать. https://apscheduler.readthedocs.io/en/3.x/modules/jobstores/sqlalchemy.html

  • Создай джобу, которая будет раз в минуту проверять обновления. Лучше создать ее где-то в отдельном файле, который будет внутри папки worker. Эта джоба должна будет проверять отличие запланированных фетчеров и активных. Эту функцию можно импортнуть в тот файл, где создан щедулер, и подключить через add_job. Похоже на fastapi и его роутеры, правда?)

    • Соответственно нужно будет еще 2 функции на создание и удаление этих фетчеров из списка запланированных тасок. Пока фетчер пусть будет пустой функцией в отдельном файле.
  • Создай функцию fetch, которая узнает что за тип фэтча ей нужно сделать и вызывает функцию типа фэтча. Кажется, для этого нужно будет сходить в БД или переписать функцию для щедулинга так, чтобы изначально планировала нужный вид фетча.

    • Функция фетча должна создавать новую запись в БД метрик, эту логику можно оставить прямо в функции фетч, не вынося отдельно.
    • Функция фетча должна отправлять алерт. Эту логику лучше вынести в отдельную функцию.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions