feat(publishing): implement immediate raw ingestion, per-target Redis queues, and configurable post intervals & sleep windows

This commit is contained in:
mamad
2026-08-27 22:21:29 +03:30
parent e66ed361c3
commit 7e5e679917
8 changed files with 288 additions and 116 deletions
+8 -7
View File
@@ -9,7 +9,6 @@ from db.repository import Repository
from core.metrics import start_metrics_server
from core.llm import LLMClient
from core.queue import RedisQueue
from services.queue_consumer import QueueConsumerService
from services.ai_processor import AIProcessor
from services.collector import CollectorService
from services.admin_bot import AdminBotService
@@ -26,7 +25,7 @@ logging.basicConfig(
logger = logging.getLogger("copykar.main")
async def main():
logger.info("Starting Copykar System with Persian Target Rewriting & Review Pipeline...")
logger.info("Starting Copykar System with Immediate Admin Review & Paced Target Queues...")
# 1. Start Prometheus metrics server
metrics_port = int(os.getenv("METRICS_PORT", "8000"))
@@ -44,15 +43,17 @@ async def main():
# 3. Create Services
ai_processor = AIProcessor(repo=repo, llm=llm)
admin_bot = AdminBotService(repo=repo, ai_processor=ai_processor)
collector = CollectorService(repo=repo, queue=redis_queue, on_post_received=admin_bot.send_raw_review_post)
admin_bot = AdminBotService(repo=repo, ai_processor=ai_processor, queue=redis_queue)
collector = CollectorService(repo=repo, on_post_received=admin_bot.send_raw_review_post)
admin_bot.set_collector(collector)
queue_consumer = QueueConsumerService(queue=redis_queue, on_post_popped=admin_bot.send_raw_review_post)
# Publisher handles per-target delivery queues, intervals, and sleep windows
publisher = PublisherService(repo=repo, queue=redis_queue, client=collector.client)
# 4. Start all services
await admin_bot.start()
await collector.start(notify_fn=admin_bot.notify_admins)
await queue_consumer.start()
await publisher.start()
logger.info("All Copykar services are active and running.")
@@ -73,7 +74,7 @@ async def main():
finally:
logger.info("Shutting down Copykar services...")
await collector.stop()
await queue_consumer.stop()
await publisher.stop()
await admin_bot.stop()
await redis_queue.close()
await close_db_pool()