62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
"""worker-prescreen entrypoint: connects to RabbitMQ and runs the prescreen consumer."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import signal
|
|
|
|
from src.contract_check.core.config import get_settings
|
|
from src.contract_check.core.logging import bind_context, configure_logging, get_logger
|
|
from src.contract_check.core.metrics import start_metrics_server
|
|
from src.contract_check.core.sentry import init_sentry
|
|
from src.contract_check.core.telemetry import setup_telemetry, shutdown_telemetry
|
|
from src.contract_check.worker_prescreen.consumer import PrescreenConsumer
|
|
|
|
log = get_logger(__name__)
|
|
|
|
|
|
async def main() -> None:
|
|
settings = get_settings()
|
|
configure_logging(
|
|
settings.log_level,
|
|
json_output=settings.json_logs,
|
|
service="worker-prescreen",
|
|
env=settings.env,
|
|
)
|
|
bind_context(service="worker-prescreen", env=settings.env)
|
|
init_sentry("worker-prescreen")
|
|
setup_telemetry("worker-prescreen")
|
|
|
|
start_metrics_server(9104)
|
|
|
|
consumer = PrescreenConsumer(
|
|
url=settings.rabbitmq_url,
|
|
origin="worker-prescreen",
|
|
prefetch=1,
|
|
max_attempts=settings.mq_max_attempts,
|
|
retry_base_ms=settings.mq_retry_base_ms,
|
|
)
|
|
await consumer.connect()
|
|
|
|
loop = asyncio.get_running_loop()
|
|
stop_event = asyncio.Event()
|
|
|
|
for sig in (signal.SIGINT, signal.SIGTERM):
|
|
loop.add_signal_handler(sig, stop_event.set)
|
|
|
|
consumer_task = asyncio.create_task(consumer.run())
|
|
stop_task = asyncio.create_task(stop_event.wait())
|
|
|
|
log.info("worker_prescreen_started", prefetch=1)
|
|
try:
|
|
await asyncio.wait(
|
|
{consumer_task, stop_task},
|
|
return_when=asyncio.FIRST_COMPLETED,
|
|
)
|
|
finally:
|
|
await consumer.stop()
|
|
shutdown_telemetry()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|