feat: add _build_host_info helper for host info endpoint

Extracts host info assembly (owner, managers, hbc version/type,
last packet timestamp, threshold configs) into a testable module-level
helper, with 10 covering tests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-10 08:12:09 -04:00
parent 0426a75d8c
commit c7326da7d9
2 changed files with 169 additions and 0 deletions
+40
View File
@@ -126,6 +126,46 @@ def _mask_config_for_api(config) -> dict:
return result
def _build_host_info(host, threshold_checker=None) -> dict:
"""Assemble the info payload for GET /api/0/hosts/{hostname}/info."""
hbc_version = None
hbc_type = None
latest_os = host.get_latest_plugin_data("os_info")
if latest_os:
_, os_data = latest_os
hbc_version = os_data.get("hbc_version")
hbc_type = os_data.get("hbc_type")
last_packet = None
if host.connections:
last_packet = max(conn.lastbeat for conn in host.connections.values())
thresholds = None
if threshold_checker is not None:
raw = threshold_checker.get_thresholds_for_host(host.name)
thresholds = sorted(
[
{
"metric": tc.metric_path,
"warning": tc.warning,
"critical": tc.critical,
"operator": tc.operator.value,
}
for tc in raw.values()
],
key=lambda x: x["metric"],
)
return {
"owner": getattr(host, "owner", None),
"managers": list(getattr(host, "managers", [])),
"hbc_version": hbc_version,
"hbc_type": hbc_type,
"last_packet": last_packet,
"thresholds": thresholds,
}
async def start(
host: str,
port: int,