fix: auto-start all 10 worker loops on app startup

This commit is contained in:
Your Name
2026-07-22 16:12:00 +05:00
parent 80c8d04f5b
commit 254c506815
+32 -1
View File
@@ -27,7 +27,16 @@ from .db import fetch_int_setting, fetch_setting, get_pool
from .security import hash_password, new_token, token_hash, verify_password from .security import hash_password, new_token, token_hash, verify_password
from .text_utils import build_publication_text, normalize_hash_tag, parse_categories from .text_utils import build_publication_text, normalize_hash_tag, parse_categories
from .vk_api import VKAPIClient, normalize_vk_source from .vk_api import VKAPIClient, normalize_vk_source
from .workers.ai_qualifier import normalize_model, response_usage from .workers.ai_qualifier import AIQualifierWorker, normalize_model, response_usage
from .workers.ai_writer import AIWriterWorker
from .workers.daily_report import DailyReportWorker
from .workers.max_poster import MAXPoster
from .workers.parser import VKParserWorker
from .workers.site_poster import SitePoster
from .workers.tg_poster import TelegramPoster
from .workers.tg_reactor import TelegramReactor
from .workers.vk_poster import VKPoster
from .workers.vk_storage_uploader import TelegramStorageUploader
COOKIE_NAME = "vk_parser_admin" COOKIE_NAME = "vk_parser_admin"
VK_OAUTH_VERIFIER_COOKIE = "vk_oauth_verifier" VK_OAUTH_VERIFIER_COOKIE = "vk_oauth_verifier"
@@ -1652,10 +1661,32 @@ def prepare_audit_row(row: Any) -> dict[str, Any]:
return item return item
async def start_worker_task(worker: Any, name: str) -> None:
try:
logger.info("Starting background worker task: {}", name)
await worker.run_loop()
except Exception as exc:
logger.exception("Background worker task {} stopped unexpectedly: {}", name, exc)
@app.on_event("startup") @app.on_event("startup")
async def startup() -> None: async def startup() -> None:
await bootstrap_admin() await bootstrap_admin()
await prune_audit_log() await prune_audit_log()
workers = [
("ai-qualifier", AIQualifierWorker()),
("ai-writer", AIWriterWorker()),
("daily-report", DailyReportWorker()),
("max-poster", MAXPoster()),
("vk-parser", VKParserWorker()),
("site-poster", SitePoster()),
("tg-poster", TelegramPoster()),
("tg-reactor", TelegramReactor()),
("vk-poster", VKPoster()),
("vk-storage-uploader", TelegramStorageUploader()),
]
for name, worker in workers:
asyncio.create_task(start_worker_task(worker, name))
@app.get("/health") @app.get("/health")