Convert node discovery metrics from enum to gauge

Actually, the two possible states for learning_status metric are
`stopped` and `running`. So a enum type metric can be considered an
overkill that introduces confusion to exported metrics.
pull/3405/head
Manuel Montenegro 2023-11-13 13:53:51 +01:00 committed by KPrasch
parent 933a28697d
commit 9512d7b286
2 changed files with 8 additions and 14 deletions

View File

@ -2,7 +2,7 @@ from abc import ABC, abstractmethod
from typing import Dict
from eth_typing.evm import ChecksumAddress
from prometheus_client import Enum, Gauge, Info
from prometheus_client import Gauge, Info
from prometheus_client.registry import CollectorRegistry
import nucypher
@ -70,10 +70,9 @@ class UrsulaInfoMetricsCollector(BaseMetricsCollector):
def initialize(self, registry: CollectorRegistry) -> None:
self.metrics = {
"client_info": Info("client", "TACo node client info", registry=registry),
"learning_status": Enum(
"node_discovery_status",
"Learning loop status",
states=["starting", "running", "stopped"],
"discovery_status_gauge": Gauge(
"node_discovery_running",
"Node discovery loop status",
registry=registry,
),
"known_nodes_gauge": Gauge(
@ -101,11 +100,9 @@ class UrsulaInfoMetricsCollector(BaseMetricsCollector):
"operator_address": self.ursula.operator_address,
}
self.metrics["learning_status"].state(
"running" if self.ursula._learning_task.running else "stopped"
)
self.metrics["known_nodes_gauge"].set(len(self.ursula.known_nodes))
self.metrics["client_info"].info(payload)
self.metrics["discovery_status_gauge"].set(self.ursula._learning_task.running)
self.metrics["known_nodes_gauge"].set(len(self.ursula.known_nodes))
class BlockchainMetricsCollector(BaseMetricsCollector):

View File

@ -74,11 +74,8 @@ def test_ursula_info_metrics_collector(ursulas):
collector.initialize(registry=collector_registry)
collector.collect()
mode = "running" if ursula._learning_task.running else "stopped"
learning_mode = collector_registry.get_sample_value(
"node_discovery_status", labels={"node_discovery_status": f"{mode}"}
)
assert learning_mode == 1
discovery_status = collector_registry.get_sample_value("node_discovery_running")
assert discovery_status == ursula._learning_task.running
known_nodes = collector_registry.get_sample_value("known_nodes")
assert known_nodes == len(ursula.known_nodes)