Banner: Einzahl, wo eines gemeint ist

"1 Clients online" liest man jeden Tag einmal zu oft.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-03 12:48:35 +02:00
co-authored by Claude Opus 5
parent 05885bfff1
commit d31173fa5e
+16 -4
View File
@@ -63,6 +63,11 @@ DASHBOARD_COUNT_SQL = """
""" """
def _zahl(anzahl: int, singular: str, plural: str) -> str:
"""Zahl mit passendem Wort. "1 Clients" liest man jeden Tag einmal zu oft."""
return f"{BOLD}{anzahl}{RESET} {singular if anzahl == 1 else plural}"
def _oeffnen(root: Path) -> sqlite3.Connection: def _oeffnen(root: Path) -> sqlite3.Connection:
pfad = root / "data" / "app.db" pfad = root / "data" / "app.db"
conn = sqlite3.connect(f"file:{pfad.as_posix()}?mode=ro", uri=True, timeout=1.0) conn = sqlite3.connect(f"file:{pfad.as_posix()}?mode=ro", uri=True, timeout=1.0)
@@ -74,12 +79,15 @@ def _flotte(conn: sqlite3.Connection) -> str:
row = conn.execute(DASHBOARD_COUNT_SQL).fetchone() row = conn.execute(DASHBOARD_COUNT_SQL).fetchone()
online = int(row["online"] or 0) online = int(row["online"] or 0)
offline = int(row["offline"] or 0) offline = int(row["offline"] or 0)
teile = [f"{BOLD}{online}{RESET} Clients online", f"{BOLD}{offline}{RESET} nicht erreichbar"] teile = [
_zahl(online, "Client online", "Clients online"),
f"{BOLD}{offline}{RESET} nicht erreichbar",
]
# Nur nennen, wenn es sie gibt: eine Null bei "startet neu" ist keine # Nur nennen, wenn es sie gibt: eine Null bei "startet neu" ist keine
# Auskunft, sondern Fuellmaterial. # Auskunft, sondern Fuellmaterial.
restarting = int(row["restarting"] or 0) restarting = int(row["restarting"] or 0)
if restarting: if restarting:
teile.append(f"{BOLD}{restarting}{RESET} startet neu") teile.append(_zahl(restarting, "startet neu", "starten neu"))
unbekannt = int(row["unknown"] or 0) unbekannt = int(row["unknown"] or 0)
if unbekannt: if unbekannt:
teile.append(f"{DIM}{unbekannt} ohne Pruefung{RESET}") teile.append(f"{DIM}{unbekannt} ohne Pruefung{RESET}")
@@ -116,7 +124,7 @@ def _dhcp() -> str:
except ValueError: except ValueError:
continue continue
aktiv = sum(1 for ablauf, zustand in letzte.values() if zustand == "0" and ablauf > jetzt) aktiv = sum(1 for ablauf, zustand in letzte.values() if zustand == "0" and ablauf > jetzt)
return f"{aktiv} Leases aktiv" return f"{aktiv} {'Lease' if aktiv == 1 else 'Leases'} aktiv"
def _lizenzen(conn: sqlite3.Connection) -> str: def _lizenzen(conn: sqlite3.Connection) -> str:
@@ -127,7 +135,11 @@ def _lizenzen(conn: sqlite3.Connection) -> str:
).fetchone()[0] ).fetchone()[0]
or 0 or 0
) )
return f"{BOLD}{kunden}{RESET} Kunden · {BOLD}{lizenzen}{RESET} Lizenzen ausgestellt" return (
_zahl(kunden, "Kunde", "Kunden")
+ " · "
+ _zahl(lizenzen, "Lizenz ausgestellt", "Lizenzen ausgestellt")
)
def main(argv: list[str] | None = None) -> int: def main(argv: list[str] | None = None) -> int: