import os from prometheus_client import Counter, start_http_server _METRICS_STARTED = False NS = os.getenv("METRICS_NS", "servicestask") SERVICE_NAME = os.getenv("SERVICE_NAME", "db-service") QUEUE_ENQUEUED = Counter( f"{NS}_queue_enqueued_total", "Enqueued tasks", labelnames=("service","queue","type") ) QUEUE_DUPLICATE = Counter( f"{NS}_queue_duplicate_skipped_total", "Duplicate skipped", labelnames=("service","queue","type") ) QUEUE_DONE = Counter( f"{NS}_queue_done_total", "Done tasks", labelnames=("service","queue","type") ) QUEUE_FAILED = Counter( f"{NS}_queue_failed_total", "Failed tasks", labelnames=("service","queue","type") ) QUEUE_RETRY = Counter( f"{NS}_queue_retry_total", "Retry attempts", labelnames=("service","queue","type") ) def start_server(): global _METRICS_STARTED if _METRICS_STARTED: return port = int(os.getenv("METRICS_PORT", "8000")) start_http_server(port) _METRICS_STARTED = True def observe(status: str, queue: str, type_: str): labels = (SERVICE_NAME, queue, type_ or "unknown") if status == "enqueued": QUEUE_ENQUEUED.labels(*labels).inc() elif status == "duplicate_skipped": QUEUE_DUPLICATE.labels(*labels).inc() elif status == "done": QUEUE_DONE.labels(*labels).inc() elif status == "failed": QUEUE_FAILED.labels(*labels).inc() elif status == "retry": QUEUE_RETRY.labels(*labels).inc()