Добавление прокси + пересмена интерфейса
Some checks failed
CI / Lint (ruff + mypy) (push) Failing after 37s
CI / Run tests (push) Has been skipped
CI / Docker build test (push) Successful in 18s

This commit is contained in:
2026-03-31 14:24:50 +07:00
parent ea4a6fbe38
commit e811b259fc
11 changed files with 436 additions and 92 deletions

View File

@@ -4,8 +4,8 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger
from apscheduler.triggers.interval import IntervalTrigger
from glitchup_bot.config import settings
from glitchup_bot.services.digest_builder import build_digest
from glitchup_bot.services.runtime_settings import get_runtime_settings
from glitchup_bot.services.sync_service import sync_issues
from glitchup_bot.services.telegram_sender import send_digest_message
@@ -17,7 +17,7 @@ scheduler: AsyncIOScheduler | None = None
async def weekly_digest_job() -> None:
logger.info("Running weekly digest job")
try:
await send_digest_message(await build_digest(refresh=True))
await send_digest_message(await build_digest(refresh=False))
logger.info("Weekly digest sent successfully")
except Exception:
logger.exception("Failed to send weekly digest")
@@ -37,42 +37,53 @@ async def sync_job() -> None:
logger.exception("Scheduled issue sync failed")
def setup_scheduler() -> AsyncIOScheduler:
async def setup_scheduler() -> AsyncIOScheduler:
global scheduler
if scheduler is not None and scheduler.running:
return scheduler
runtime = await get_runtime_settings()
scheduler = AsyncIOScheduler()
scheduler.add_job(
sync_job,
IntervalTrigger(minutes=settings.sync_interval_minutes),
id="issue_sync",
replace_existing=True,
)
if runtime.sync_enabled:
scheduler.add_job(
sync_job,
IntervalTrigger(minutes=runtime.sync_interval_minutes),
id="issue_sync",
replace_existing=True,
)
scheduler.add_job(
weekly_digest_job,
CronTrigger(
day_of_week=settings.digest_cron_day,
hour=settings.digest_cron_hour,
minute=settings.digest_cron_minute,
timezone=settings.digest_timezone,
day_of_week=runtime.digest_cron_day,
hour=runtime.digest_cron_hour,
minute=runtime.digest_cron_minute,
timezone=runtime.digest_timezone,
),
id="weekly_digest",
replace_existing=True,
)
scheduler.start()
logger.info(
"Scheduler started: sync every %s min, digest at %s %02d:%02d %s",
settings.sync_interval_minutes,
settings.digest_cron_day,
settings.digest_cron_hour,
settings.digest_cron_minute,
settings.digest_timezone,
"Scheduler started: sync %s, digest at %s %02d:%02d %s",
(
f"every {runtime.sync_interval_minutes} min"
if runtime.sync_enabled
else "disabled"
),
runtime.digest_cron_day,
runtime.digest_cron_hour,
runtime.digest_cron_minute,
runtime.digest_timezone,
)
return scheduler
async def reload_scheduler() -> AsyncIOScheduler:
await shutdown_scheduler()
return await setup_scheduler()
async def shutdown_scheduler() -> None:
global scheduler