from prometheus_client import Counter, Gauge, start_http_server from logger_handler import setup_logger import asyncio logger = setup_logger(__name__) MSG_PUBLISHED = Counter( "rmq_messages_published_total", "Total number of messages successfully published to RabbitMQ" ) MSG_FAILED = Counter( "rmq_messages_failed_total", "Total number of messages sent to the dead-letter queue" ) MSG_RETRY = Counter( "rmq_messages_retry_total", "Total number of messages retried via retry queue", ["queue_name", "uuid", "retry_count"] ) QUEUE_MESSAGES = Gauge( "rmq_queue_messages", "Current number of messages pending in the queue", ["queue_name"] ) def start_metrics_server(port: int = 9000): start_http_server(port) logger.info(f"Prometheus metrics exposed at http://0.0.0.0:{port}/metrics") async def update_queue_gauge(channel, queue_name: str): """Periodically update queue depth""" queue = await channel.declare_queue(queue_name, passive=True) while True: info = await queue.declare() QUEUE_MESSAGES.labels(queue_name=queue_name).set(info.message_count) await asyncio.sleep(10)