Skip to content

Commit 485e38f

Browse files
committed
Add metrics tracking for ogr API calls per namespace and service type
1 parent 43fea6c commit 485e38f

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

packit_service/celery_config.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@
5454
"schedule": 10800.0,
5555
"options": {"queue": "long-running", "time_limit": 3600},
5656
},
57+
"push-ogr-namespace-metrics": {
58+
"task": "packit_service.worker.tasks.push_ogr_namespace_metrics",
59+
"schedule": 300.0,
60+
"options": {"queue": "short-running"},
61+
},
5762
}
5863

5964
# http://mher.github.io/flower/prometheus-integration.html#set-up-your-celery-application

packit_service/worker/monitoring.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import logging
55
import os
66

7-
from prometheus_client import CollectorRegistry, Counter, Histogram, push_to_gateway
7+
from prometheus_client import CollectorRegistry, Counter, Gauge, Histogram, push_to_gateway
88

99
logger = logging.getLogger(__name__)
1010

@@ -265,6 +265,13 @@ def __init__(self):
265265
buckets=(5, 15, 20, 25, 30, 40, 60, float("inf")),
266266
)
267267

268+
self.ogr_namespace_requests = Gauge(
269+
"ogr_namespace_requests_total",
270+
"Total number of ogr API requests per namespace and service type in the last 5 minutes",
271+
["namespace", "service_type"],
272+
registry=self.registry,
273+
)
274+
268275
def push(self):
269276
if not (self.pushgateway_address and self.worker_name):
270277
logger.debug("Pushgateway address or worker name not defined.")

packit_service/worker/tasks.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from copr.v3 import CoprException
1414
from ogr import __version__ as ogr_version
1515
from ogr.exceptions import OgrException
16+
from ogr.metrics import get_metrics_tracker
1617
from packit import __version__ as packit_version
1718
from packit.exceptions import PackitException
1819
from sqlalchemy import __version__ as sqlal_version
@@ -99,6 +100,7 @@
99100
update_vm_image_build,
100101
)
101102
from packit_service.worker.jobs import SteveJobs
103+
from packit_service.worker.monitoring import Pushgateway
102104
from packit_service.worker.result import TaskResults
103105

104106
logger = logging.getLogger(__name__)
@@ -940,3 +942,37 @@ def get_usage_statistics() -> None:
940942
logger.debug(f"Getting usage data from datetime_from {day}.")
941943
get_usage_data(datetime_from=day)
942944
logger.debug("Got usage data.")
945+
946+
947+
@celery_app.task
948+
def push_ogr_namespace_metrics() -> None:
949+
"""
950+
Collect ogr namespace request metrics and push them to pushgateway.
951+
952+
This task queries the ogr metrics tracker for request counts per namespace
953+
and service type, then updates the Prometheus metrics and pushes them.
954+
After pushing, the counters are reset for the next collection period.
955+
"""
956+
logger.debug("Collecting ogr namespace request metrics.")
957+
958+
try:
959+
metrics_tracker = get_metrics_tracker()
960+
counts = metrics_tracker.get_all_counts()
961+
962+
pushgateway = Pushgateway()
963+
964+
for (service_type, namespace), count in counts.items():
965+
pushgateway.ogr_namespace_requests.labels(
966+
namespace=namespace,
967+
service_type=service_type,
968+
).set(count)
969+
970+
pushgateway.push()
971+
972+
metrics_tracker.reset()
973+
974+
logger.info(
975+
f"Pushed ogr namespace metrics: {len(counts)} namespace/service combinations",
976+
)
977+
except Exception as e:
978+
logger.error(f"Failed to push ogr namespace metrics: {e}", exc_info=True)

0 commit comments

Comments
 (0)