From fb3c6ca77f5074d0d7cf12cc881d376b6e686611 Mon Sep 17 00:00:00 2001 From: Andrew Pimenov Date: Sun, 9 Aug 2026 16:10:45 +0300 Subject: [PATCH] optimize overall_verdict by combining severity iterations --- src/netsleuth/interpret.py | 13 +++---------- tests/test_interpret.py | 9 +-------- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/src/netsleuth/interpret.py b/src/netsleuth/interpret.py index f987358..06e1441 100644 --- a/src/netsleuth/interpret.py +++ b/src/netsleuth/interpret.py @@ -1,6 +1,5 @@ from __future__ import annotations -from typing import Iterable from netsleuth.config import Band, BufferbloatBands, Thresholds, VpnBands from netsleuth.models import ( @@ -21,14 +20,6 @@ from netsleuth.netinfo import is_tunnel_iface, mtu_anomaly _SEVERITY_ORDER = {"ok": 0, "info": 1, "warn": 2, "crit": 3} -def worst(severities: Iterable[str]) -> str: - best = "ok" - for severity in severities: - if _SEVERITY_ORDER[severity] > _SEVERITY_ORDER[best]: - best = severity - return best - - def severity_for(value: float | None, band: Band, higher_is_worse: bool = True) -> str: if value is None: return "info" @@ -349,10 +340,12 @@ _SCORE_PENALTY = {"ok": 0, "info": 3, "warn": 10, "crit": 25} def overall_verdict(findings: list[Finding]) -> tuple[str, int, str]: score = 100 + status = "ok" for f in findings: score -= _SCORE_PENALTY[f.severity] + if _SEVERITY_ORDER[f.severity] > _SEVERITY_ORDER[status]: + status = f.severity score = max(0, score) - status = worst(f.severity for f in findings) if status in ("ok", "info"): return "ok", score, "No problems found on this connection." headline = [f.title for f in findings if f.severity == status] diff --git a/tests/test_interpret.py b/tests/test_interpret.py index eaf65af..fd3e9f8 100644 --- a/tests/test_interpret.py +++ b/tests/test_interpret.py @@ -4,7 +4,7 @@ import pytest from netsleuth.config import Band, Thresholds from netsleuth.models import PingResult, TraceHop, TraceResult -from netsleuth.interpret import latency_findings, path_findings, severity_for, worst +from netsleuth.interpret import latency_findings, path_findings, severity_for @pytest.fixture() @@ -33,13 +33,6 @@ def test_severity_can_be_inverted_for_metrics_where_higher_is_better(): assert severity_for(5.0, band, higher_is_worse=False) == "crit" -def test_worst_picks_the_highest_severity(): - assert worst(["ok", "info", "warn"]) == "warn" - assert worst(["ok", "crit", "warn"]) == "crit" - assert worst([]) == "ok" - assert worst(["ok", "ok"]) == "ok" - - def ping(**kw) -> PingResult: base = dict( label="cloudflare-dns",