klippy_connection: report systemd service info
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
59471a7959
commit
d3484e8c13
|
@ -34,6 +34,7 @@ if TYPE_CHECKING:
|
||||||
from websockets import WebRequest, Subscribable
|
from websockets import WebRequest, Subscribable
|
||||||
from components.klippy_apis import KlippyAPI
|
from components.klippy_apis import KlippyAPI
|
||||||
from components.file_manager.file_manager import FileManager
|
from components.file_manager.file_manager import FileManager
|
||||||
|
from components.machine import Machine
|
||||||
from asyncio.trsock import TransportSocket
|
from asyncio.trsock import TransportSocket
|
||||||
FlexCallback = Callable[..., Optional[Coroutine]]
|
FlexCallback = Callable[..., Optional[Coroutine]]
|
||||||
|
|
||||||
|
@ -59,6 +60,7 @@ class KlippyConnection:
|
||||||
self._klipper_version: str = ""
|
self._klipper_version: str = ""
|
||||||
self._missing_reqs: Set[str] = set()
|
self._missing_reqs: Set[str] = set()
|
||||||
self._peer_cred: Dict[str, int] = {}
|
self._peer_cred: Dict[str, int] = {}
|
||||||
|
self._service_info: Dict[str, Any] = {}
|
||||||
self.init_attempts: int = 0
|
self.init_attempts: int = 0
|
||||||
self._state: str = "disconnected"
|
self._state: str = "disconnected"
|
||||||
self._state_message: str = "Klippy Disconnected"
|
self._state_message: str = "Klippy Disconnected"
|
||||||
|
@ -101,6 +103,16 @@ class KlippyConnection:
|
||||||
def peer_credentials(self) -> Dict[str, int]:
|
def peer_credentials(self) -> Dict[str, int]:
|
||||||
return dict(self._peer_cred)
|
return dict(self._peer_cred)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def service_info(self) -> Dict[str, Any]:
|
||||||
|
return self._service_info
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unit_name(self) -> str:
|
||||||
|
svc_info = self._service_info
|
||||||
|
unit_name = svc_info.get("unit_name", "klipper.service")
|
||||||
|
return unit_name.split(".", 1)[0]
|
||||||
|
|
||||||
async def wait_connected(self) -> bool:
|
async def wait_connected(self) -> bool:
|
||||||
if (
|
if (
|
||||||
self.connection_task is None or
|
self.connection_task is None or
|
||||||
|
@ -226,18 +238,27 @@ class KlippyConnection:
|
||||||
continue
|
continue
|
||||||
logging.info("Klippy Connection Established")
|
logging.info("Klippy Connection Established")
|
||||||
self.writer = writer
|
self.writer = writer
|
||||||
self._get_peer_credentials(writer)
|
if self._get_peer_credentials(writer):
|
||||||
|
machine: Machine = self.server.lookup_component("machine")
|
||||||
|
provider = machine.get_system_provider()
|
||||||
|
props = ["Description", "ExecStart", "FragmentPath"]
|
||||||
|
svc_info = await provider.extract_service_info(
|
||||||
|
"klipper", self._peer_cred["process_id"], props
|
||||||
|
)
|
||||||
|
if svc_info != self._service_info:
|
||||||
|
self._service_info = svc_info
|
||||||
|
machine.log_service_info(svc_info)
|
||||||
self.event_loop.create_task(self._read_stream(reader))
|
self.event_loop.create_task(self._read_stream(reader))
|
||||||
return await self._init_klippy_connection()
|
return await self._init_klippy_connection()
|
||||||
|
|
||||||
def _get_peer_credentials(self, writer: asyncio.StreamWriter) -> None:
|
def _get_peer_credentials(self, writer: asyncio.StreamWriter) -> bool:
|
||||||
sock: TransportSocket
|
sock: TransportSocket
|
||||||
sock = writer.get_extra_info("socket", None)
|
sock = writer.get_extra_info("socket", None)
|
||||||
if sock is None:
|
if sock is None:
|
||||||
logging.debug(
|
logging.debug(
|
||||||
"Unable to get Unix Socket, cant fetch peer credentials"
|
"Unable to get Unix Socket, cant fetch peer credentials"
|
||||||
)
|
)
|
||||||
return
|
return False
|
||||||
data: bytes = b""
|
data: bytes = b""
|
||||||
try:
|
try:
|
||||||
size = struct.calcsize("3I")
|
size = struct.calcsize("3I")
|
||||||
|
@ -249,7 +270,7 @@ class KlippyConnection:
|
||||||
logging.exception(
|
logging.exception(
|
||||||
f"Failed to get Klippy Peer Credentials, raw: 0x{data.hex()}"
|
f"Failed to get Klippy Peer Credentials, raw: 0x{data.hex()}"
|
||||||
)
|
)
|
||||||
return
|
return False
|
||||||
self._peer_cred = {
|
self._peer_cred = {
|
||||||
"process_id": pid,
|
"process_id": pid,
|
||||||
"user_id": uid,
|
"user_id": uid,
|
||||||
|
@ -258,6 +279,7 @@ class KlippyConnection:
|
||||||
logging.debug(
|
logging.debug(
|
||||||
f"Klippy Connection: Received Peer Credentials: {self._peer_cred}"
|
f"Klippy Connection: Received Peer Credentials: {self._peer_cred}"
|
||||||
)
|
)
|
||||||
|
return True
|
||||||
|
|
||||||
async def _init_klippy_connection(self) -> bool:
|
async def _init_klippy_connection(self) -> bool:
|
||||||
self.init_list = []
|
self.init_list = []
|
||||||
|
|
Loading…
Reference in New Issue