ai-lsc/src/ai_lsc/runtime/status.py

51 lines
1.5 KiB
Python

"""Status checker -- unified interface for checking if a service is live.
Delegates to backend-specific strategies (tmux, systemd, or psutil
process scan) based on the launcher type.
"""
from __future__ import annotations
from ai_lsc.runtime.systemd import SystemdManager
from ai_lsc.runtime.tmux import TmuxManager
from ai_lsc.utils.process import first_matching_process
class StatusChecker:
"""Check service liveness regardless of launcher backend."""
def __init__(self) -> None:
self._tmux = TmuxManager()
self._systemd = SystemdManager()
def is_running(
self,
launcher_type: str,
tool_id: str,
service_cmd: str = "",
search_term: str = "",
) -> bool:
"""Return ``True`` if the service is currently running.
Parameters
----------
launcher_type:
One of ``"tmux"``, ``"systemd"``, or anything else (psutil).
tool_id:
Used by tmux to identify the window.
service_cmd:
Used by systemd ``is-active``.
search_term:
Used by psutil ``process_iter`` scan.
"""
strategy = {
"systemd": lambda: self._systemd.is_active(service_cmd),
"tmux": lambda: self._tmux.is_running(tool_id),
}.get(launcher_type)
if strategy is not None:
return strategy()
# fallback: psutil scan
return first_matching_process(search_term) is not None