production-evyos-systems-an.../ServicesTask/app/core/metrics.py

50 lines
1.4 KiB
Python

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()