import logging import signal from core.config import get_settings from core.worker.consumer import ProcessingWorker from core.worker.metrics import WorkerMetrics from core.worker.observability import WorkerObservabilityServer from core.worker.stats import WorkerRuntimeStats logging.basicConfig( level=logging.INFO, format=( "%(asctime)s " "%(levelname)s " "%(name)s " "%(message)s" ), ) def main() -> None: settings = get_settings() metrics = WorkerMetrics() stats = WorkerRuntimeStats() worker = ProcessingWorker( settings=settings, metrics=metrics, stats=stats, ) observability = WorkerObservabilityServer( settings=settings, metrics=metrics, stats=stats, ) def handle_shutdown( signum, frame, ) -> None: logging.getLogger(__name__).info( "Shutdown signal received: %s", signum, ) worker.stop() signal.signal( signal.SIGINT, handle_shutdown, ) signal.signal( signal.SIGTERM, handle_shutdown, ) observability.start() try: worker.run() finally: observability.stop() if __name__ == "__main__": main()