feat(widgets): Overview verdict, pending monitors' age, fullest filesystems first (#5810)
- Overview: a verdict line when something is wrong ('1 alert firing, 1
monitor down.'); its picker description now says what it lists (alerts,
monitors down, anomalies). Host figures have their home in Hosts.
Comments no longer name the Status page that was folded into Monitors.
- Monitors widget: a monitor not checked yet says when it was added.
- Host page: filesystems fullest first, by the worse of space and inodes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -77,6 +77,9 @@ async def test_the_overview_labels_its_counts_and_lists_what_is_wrong(app):
|
||||
assert '<span class="badge badge-crit">Down</span>' in page and "2h ago" in page
|
||||
assert page.index("nas disk full") < page.index("ssh-nas") # alerts, then monitors
|
||||
assert ">pending<" not in page # a zero pending count is not shown
|
||||
# #5810: a verdict says what is wrong before the list says where.
|
||||
assert '<div class="w-verdict tone-crit">1 alert firing, 1 monitor down.</div>' in page
|
||||
assert page.index("1 alert firing, 1 monitor down.") < page.index("nas disk full")
|
||||
assert not hex_colours(page), hex_colours(page)
|
||||
|
||||
|
||||
|
||||
@@ -181,3 +181,14 @@ async def test_the_widget_says_when_all_is_well(app):
|
||||
up = {**_row(_mon("web", mid="m1"), "up", _check()), "uptime": {"24h": 100.0}}
|
||||
page = await _widget(app, [], [up])
|
||||
assert "All 1 monitor up." in page and "tone-ok" in page
|
||||
|
||||
|
||||
async def test_a_pending_monitor_says_when_it_was_added(app):
|
||||
"""#5810: a monitor not yet checked says how long it has waited."""
|
||||
m = _mon("new-api", mid="m7")
|
||||
m.created_at = datetime.now(timezone.utc) - timedelta(minutes=6)
|
||||
pending = {**_row(m, "pending", None), "uptime": {}}
|
||||
page = await _widget(app, [pending], [], counts={"up": 0, "degraded": 0, "down": 0,
|
||||
"pending": 1, "paused": 0})
|
||||
page = " ".join(page.split())
|
||||
assert "not checked yet · added <time" in page and "6m ago" in page
|
||||
|
||||
@@ -167,3 +167,17 @@ def test_the_page_lists_unwired_sensors_apart_hottest_first():
|
||||
assert list(real) == ["Package id 0", "Composite", "CPUTIN", "gone"]
|
||||
assert list(unwired) == ["SYSTIN", "AUXTIN0", "PCH_CHIP_TEMP"]
|
||||
assert unwired["SYSTIN"] == (115.0, "reads a value no wired sensor gives")
|
||||
|
||||
|
||||
def test_the_host_page_lists_filesystems_fullest_first():
|
||||
"""#5810: by the worse of space and inodes, so a full /var/lib/docker
|
||||
doesn't sort after /boot; ties by name."""
|
||||
from plugins.host_agent.routes import _split_host_metrics
|
||||
latest = {"h": {"cpu_pct": 1.0},
|
||||
"h:/": {"disk_used_pct": 40.0, "inodes_used_pct": 5.0},
|
||||
"h:/boot": {"disk_used_pct": 30.0},
|
||||
"h:/var/lib/docker": {"disk_used_pct": 91.0},
|
||||
"h:/srv": {"disk_used_pct": 20.0, "inodes_used_pct": 97.0},
|
||||
"h:/data": {"disk_used_pct": 30.0}}
|
||||
*_, mounts = _split_host_metrics("h", latest)
|
||||
assert list(mounts) == ["/srv", "/var/lib/docker", "/", "/boot", "/data"]
|
||||
|
||||
Reference in New Issue
Block a user