Files
The_DisExcel_project/daemon_run.py

67 lines
1.8 KiB
Python

import asyncio
import os
import sys
from src.daemons.registry import DAEMONS
from src.logging.logger import LogWriter
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
writer = LogWriter()
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)
writer_task = asyncio.create_task(writer.log_writer())
try:
if len(sys.argv) < 2:
print("Usage: python run_daemon.py <daemon_name> | --all")
sys.exit(1)
arg = sys.argv[1]
if arg == "--all":
await run_enabled_from_config()
else:
await run_one(arg)
finally:
writer_task.cancel()
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print('Interrupted')
try:
sys.exit(0)
except SystemExit:
os._exit(0)