1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
from __future__ import annotations
from collections.abc import Iterator
from typing import TYPE_CHECKING
from distributed.http.prometheus import PrometheusCollector
from distributed.stealing import WorkStealing
if TYPE_CHECKING:
from prometheus_client.core import CounterMetricFamily
class WorkStealingMetricCollector(PrometheusCollector):
def __init__(self, server):
super().__init__(server)
self.subsystem = "stealing"
def collect(self) -> Iterator[CounterMetricFamily]:
from prometheus_client.core import CounterMetricFamily
try:
stealing: WorkStealing = self.server.extensions["stealing"]
except KeyError:
return
stealing_request_count_total = CounterMetricFamily(
self.build_name("request_count_total"),
"Total number of stealing requests per cost multiplier.",
labels=["cost_multiplier"],
)
stealing_request_cost_total = CounterMetricFamily(
self.build_name("request_cost_total"),
"Total cost of stealing requests per cost multiplier.",
labels=["cost_multiplier"],
)
for level, multiplier in enumerate(stealing.cost_multipliers):
stealing_request_count_total.add_metric(
[str(multiplier)], stealing.metrics["request_count_total"][level]
)
stealing_request_cost_total.add_metric(
[str(multiplier)], stealing.metrics["request_cost_total"][level]
)
yield stealing_request_count_total
yield stealing_request_cost_total
|