43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from app.core.command_runner import CommandRunner
|
|
|
|
|
|
class ServiceManager:
|
|
def __init__(self, command_runner: CommandRunner) -> None:
|
|
self.command_runner = command_runner
|
|
|
|
def enable_service(self, service_name: str) -> None:
|
|
self.command_runner.run(["systemctl", "enable", service_name])
|
|
|
|
def disable_service(self, service_name: str) -> None:
|
|
self.command_runner.run(["systemctl", "disable", service_name])
|
|
|
|
def start_service(self, service_name: str) -> None:
|
|
self.command_runner.run(["systemctl", "start", service_name])
|
|
|
|
def stop_service(self, service_name: str) -> None:
|
|
self.command_runner.run(["systemctl", "stop", service_name])
|
|
|
|
def restart_service(self, service_name: str) -> None:
|
|
self.command_runner.run(["systemctl", "restart", service_name])
|
|
|
|
def reset_failed(self, service_name: str) -> None:
|
|
self.command_runner.run(["systemctl", "reset-failed", service_name])
|
|
|
|
def get_service_status(self, service_name: str) -> dict[str, object]:
|
|
active = self._query(["systemctl", "is-active", service_name]) == "active"
|
|
enabled = self._query(["systemctl", "is-enabled", service_name]) == "enabled"
|
|
return {
|
|
"serviceName": service_name,
|
|
"active": active,
|
|
"enabled": enabled,
|
|
"status": "running" if active else "stopped",
|
|
}
|
|
|
|
def _query(self, command: list[str]) -> str:
|
|
try:
|
|
return self.command_runner.run(command).stdout.strip()
|
|
except Exception:
|
|
return "unknown"
|