import asyncio import os import sys from src.daemons.registry import DAEMONS from src.messaging.rabbitmq_client import rabbitmq_client from src.messaging.topology_setup import apply_topology from src.models.configs_read.daemons_json import daemons_config from src.models.rabbitmq_models.email import email_topology async def run_one(daemon_name: str) -> None: daemon_cls = DAEMONS.get(daemon_name) if daemon_cls is None: print(f"Unknown daemon: {daemon_name}. Available: {list(DAEMONS.keys())}") sys.exit(1) daemon = daemon_cls() await daemon.run() async def run_enabled_from_config() -> None: daemons = [] for name in daemons_config.daemons: name = name.strip() if name not in DAEMONS: print(f"Warning: unknown daemon '{name}' in config, skipping") continue daemons.append(DAEMONS[name]()) if not daemons: print("No enabled daemons found in config") sys.exit(1) await asyncio.gather(*(d.run() for d in daemons)) async def main() -> None: channel = await rabbitmq_client.get_channel() await apply_topology(channel, email_topology) if len(sys.argv) < 2: print("Usage: python run_daemon.py | --all") sys.exit(1) arg = sys.argv[1] if arg == "--all": await run_enabled_from_config() else: await run_one(arg) if __name__ == "__main__": try: asyncio.run(main()) except KeyboardInterrupt: print('Interrupted') try: sys.exit(0) except SystemExit: os._exit(0)