From 05d00cbd14ff21ffa72f89449e4aed78dc2bfa65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Fri, 5 Sep 2025 09:30:30 +0200 Subject: [PATCH] dodatkowe poprawki i funkcje --- app.py | 50 ++++++++++++++++++++++++++++------------------ config.example.ini | 2 +- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/app.py b/app.py index 02b6176..71be63b 100644 --- a/app.py +++ b/app.py @@ -85,25 +85,6 @@ def runCmd(cmd: str): except subprocess.TimeoutExpired: return 124, "", "Timeout" -def reloadService(name: str): - """Próbuje reload; gdy nie powiedzie się standardowe 'systemctl reload', robi restart.""" - cmd = serviceCommand(name) - rc, out, err = runCmd(cmd) - if rc == 0: - return {"service": name, "action": "reload", "rc": rc, "stdout": out, "stderr": err} - - if cmd.startswith("systemctl reload"): - rc2, out2, err2 = runCmd(f"systemctl restart {name}") - return { - "service": name, - "action": "restart" if rc2 == 0 else "reload->restart_failed", - "rc": rc2, - "stdout": out2, - "stderr": err2 or err, - } - - return {"service": name, "action": "custom_failed", "rc": rc, "stdout": out, "stderr": err} - def reloadServices(): """Przeładowuje wszystkie serwisy z konfiguracji i zwraca listę wyników.""" svcs = listServices() @@ -126,6 +107,37 @@ def maskToken(token: str | None) -> str: return "*" * len(token) return token[:4] + "*" * (len(token) - 8) + token[-4:] +def commandCandidates(name: str): + # 1) konfiguracja ma priorytet + sect = f"service:{name}" + if cfg.has_section(sect) and cfg.has_option(sect, "command"): + return [cfg.get(sect, "command")] + + # 2) auto-kandydaci zależnie od dostępności + cmds = [] + if shutil.which("systemctl"): + cmds += [f"systemctl reload {name}", f"systemctl restart {name}"] + if shutil.which("service"): + cmds += [f"service {name} reload", f"service {name} restart"] + if shutil.which("rc-service"): + cmds += [f"rc-service {name} reload", f"rc-service {name} restart"] + # 3) ostatnia deska ratunku: HUP + if shutil.which("pkill"): + cmds += [f"pkill -HUP {name}"] + return cmds or [f"pkill -HUP {name}"] + +def reloadService(name: str): + for cmd in commandCandidates(name): + rc, out, err = runCmd(cmd) + # 127 = command not found; spróbuj następnego kandydata + if rc == 127 or "not found" in (err or "").lower(): + continue + if rc == 0: + return {"service": name, "action": cmd, "rc": rc, "stdout": out, "stderr": err} + # jeśli komenda istnieje, ale zwróciła błąd – próbuj dalej + last = {"service": name, "action": cmd, "rc": rc, "stdout": out, "stderr": err} + # jeśli nic się nie udało: + return last if 'last' in locals() else {"service": name, "action": "no-cmd", "rc": 127, "stdout": "", "stderr": "no candidate"} # # WYCZYTUJEMY TOKEN diff --git a/config.example.ini b/config.example.ini index 2411a63..d94b652 100644 --- a/config.example.ini +++ b/config.example.ini @@ -7,4 +7,4 @@ services = dnsmasq reload_timeout = 5 [service:dnsmasq] -command = systemctl reload dnsmasq \ No newline at end of file +command = pkill -HUP dnsmasq \ No newline at end of file