from __future__ import annotations
from unittest.mock import MagicMock
from modelexpress.metrics import (
ENV_ENABLED,
MetricsCollector,
push_metrics_if_enabled,
)
_RECORDERS = [
("record_selection", ("random", "w1")),
("record_attempt", ("random", "success")),
("record_metadata_failure", ("random",)),
("observe_candidates", ("random", "listed", 2)),
("observe_selection_seconds", ("random", 0.001)),
("observe_transfer_seconds", ("random", "success", 1.0)),
]
def test_recorders_are_noop_when_disabled(monkeypatch):
monkeypatch.delenv(ENV_ENABLED, raising=False)
m = MetricsCollector()
for name, args in _RECORDERS:
assert getattr(m, name)(*args) is None
assert m._ready is False
assert m._init_attempted is True
assert not hasattr(m, "selections")
assert m._server_started is False
def test_recorders_never_raise_into_load_path(monkeypatch):
m = MetricsCollector()
m._ready = True
m._init_attempted = True
boom = MagicMock()
boom.labels.side_effect = RuntimeError("collector exploded")
m.selections = boom
m.attempts = boom
m.metadata_failures = boom
m.candidates = boom
m.selection_seconds = boom
m.transfer_seconds = boom
for name, args in _RECORDERS:
getattr(m, name)(*args)
def test_push_is_noop_when_disabled(monkeypatch):
monkeypatch.delenv(ENV_ENABLED, raising=False)
push_metrics_if_enabled()