50 lines
1.4 KiB
Python
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()
|