feat: show suffix-matched metric coverage in host info threshold table
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,12 +11,13 @@ class _FakeConn:
|
||||
|
||||
class _FakeHost:
|
||||
def __init__(self, name="myhost", owner=None, managers=None,
|
||||
connections=None, os_data=None):
|
||||
connections=None, os_data=None, plugin_data=None):
|
||||
self.name = name
|
||||
self.owner = owner
|
||||
self.managers = managers or []
|
||||
self.connections = connections or {}
|
||||
self._os_data = os_data
|
||||
self.plugin_data = plugin_data or {}
|
||||
|
||||
def get_latest_plugin_data(self, plugin_name):
|
||||
if plugin_name == "os_info" and self._os_data is not None:
|
||||
@@ -127,3 +128,47 @@ def test_build_host_info_nagios_operator_serialized():
|
||||
host = _FakeHost()
|
||||
result = _build_host_info(host, threshold_checker=checker)
|
||||
assert result["thresholds"][0]["operator"] == "nagios"
|
||||
|
||||
|
||||
def test_build_host_info_covers_suffix_matched_metrics():
|
||||
"""memory_monitor.percent threshold covers swap_percent via suffix match."""
|
||||
from hbd.server.threshold import ThresholdConfig
|
||||
tc_pct = ThresholdConfig("memory_monitor.percent", warning=85.0, critical=95.0)
|
||||
checker = MagicMock()
|
||||
checker.get_thresholds_for_host.return_value = {"memory_monitor.percent": tc_pct}
|
||||
|
||||
host = _FakeHost(
|
||||
connections={},
|
||||
os_data=None,
|
||||
)
|
||||
# Simulate plugin_data with both percent and swap_percent fields
|
||||
host.plugin_data = {
|
||||
"memory_monitor": [(1234567890.0, {
|
||||
"percent": 80.0,
|
||||
"swap_percent": 25.0,
|
||||
"available_mb": 2000,
|
||||
})]
|
||||
}
|
||||
|
||||
result = _build_host_info(host, threshold_checker=checker)
|
||||
assert result["thresholds"] is not None
|
||||
t = result["thresholds"][0]
|
||||
assert t["metric"] == "memory_monitor.percent"
|
||||
assert t["covers"] == ["memory_monitor.swap_percent"]
|
||||
|
||||
|
||||
def test_build_host_info_covers_empty_when_exact_matches_only():
|
||||
"""No covers when all plugin fields match their threshold exactly."""
|
||||
from hbd.server.threshold import ThresholdConfig
|
||||
tc_pct = ThresholdConfig("memory_monitor.percent", warning=85.0, critical=95.0)
|
||||
checker = MagicMock()
|
||||
checker.get_thresholds_for_host.return_value = {"memory_monitor.percent": tc_pct}
|
||||
|
||||
host = _FakeHost()
|
||||
host.plugin_data = {
|
||||
"memory_monitor": [(1234567890.0, {"percent": 80.0})]
|
||||
}
|
||||
|
||||
result = _build_host_info(host, threshold_checker=checker)
|
||||
t = result["thresholds"][0]
|
||||
assert t["covers"] == []
|
||||
|
||||
Reference in New Issue
Block a user