mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-13 01:30:31 +08:00
refactoring
This commit is contained in:
parent
ebe40697a5
commit
4d4fb69d2e
@ -34,6 +34,7 @@ from ....logging import get_logger
|
|||||||
from ....yamlconf import Section
|
from ....yamlconf import Section
|
||||||
from ....yamlconf.loader import load_yaml_file
|
from ....yamlconf.loader import load_yaml_file
|
||||||
|
|
||||||
|
from .... import tools
|
||||||
from .... import aiotools
|
from .... import aiotools
|
||||||
|
|
||||||
from .base import BaseInfoSubmanager
|
from .base import BaseInfoSubmanager
|
||||||
@ -98,5 +99,5 @@ class ExtrasInfoSubmanager(BaseInfoSubmanager):
|
|||||||
|
|
||||||
return (enabled or (manager.GetUnitFileState(name) in ["enabled", "enabled-runtime", "static", "indirect", "generated"]))
|
return (enabled or (manager.GetUnitFileState(name) in ["enabled", "enabled-runtime", "static", "indirect", "generated"]))
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
get_logger(0).error("Can't get info about the service %r: %s: %s", name, type(err).__name__, err)
|
get_logger(0).error("Can't get info about the service %r: %s", name, tools.efmt(err))
|
||||||
return True
|
return True
|
||||||
|
|||||||
@ -325,7 +325,7 @@ class Streamer: # pylint: disable=too-many-instance-attributes
|
|||||||
return snapshot
|
return snapshot
|
||||||
logger.error("Stream is offline, no signal or so")
|
logger.error("Stream is offline, no signal or so")
|
||||||
except (aiohttp.ClientConnectionError, aiohttp.ServerConnectionError) as err:
|
except (aiohttp.ClientConnectionError, aiohttp.ServerConnectionError) as err:
|
||||||
logger.error("Can't connect to streamer: %s: %s", type(err).__name__, err)
|
logger.error("Can't connect to streamer: %s", tools.efmt(err))
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("Invalid streamer response from /snapshot")
|
logger.exception("Invalid streamer response from /snapshot")
|
||||||
return None
|
return None
|
||||||
|
|||||||
@ -50,6 +50,8 @@ from ...clients.streamer import BaseStreamerClient
|
|||||||
from ...clients.streamer import StreamerHttpClient
|
from ...clients.streamer import StreamerHttpClient
|
||||||
from ...clients.streamer import StreamerMemsinkClient
|
from ...clients.streamer import StreamerMemsinkClient
|
||||||
|
|
||||||
|
from ... import tools
|
||||||
|
|
||||||
from .rfb import RfbClient
|
from .rfb import RfbClient
|
||||||
from .rfb.stream import rfb_format_remote
|
from .rfb.stream import rfb_format_remote
|
||||||
from .rfb.stream import rfb_close_writer
|
from .rfb.stream import rfb_close_writer
|
||||||
@ -397,7 +399,7 @@ class VncServer: # pylint: disable=too-many-instance-attributes
|
|||||||
async with kvmd.make_session("", "") as kvmd_session:
|
async with kvmd.make_session("", "") as kvmd_session:
|
||||||
none_auth_only = await kvmd_session.auth.check()
|
none_auth_only = await kvmd_session.auth.check()
|
||||||
except (aiohttp.ClientError, asyncio.TimeoutError) as err:
|
except (aiohttp.ClientError, asyncio.TimeoutError) as err:
|
||||||
logger.error("[entry] %s: Can't check KVMD auth mode: %s: %s", remote, type(err).__name__, err)
|
logger.error("[entry] %s: Can't check KVMD auth mode: %s", remote, tools.efmt(err))
|
||||||
return
|
return
|
||||||
|
|
||||||
await _Client(
|
await _Client(
|
||||||
|
|||||||
@ -33,6 +33,7 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
ustreamer = None
|
ustreamer = None
|
||||||
|
|
||||||
|
from .. import tools
|
||||||
from .. import aiotools
|
from .. import aiotools
|
||||||
from .. import htclient
|
from .. import htclient
|
||||||
|
|
||||||
@ -119,7 +120,7 @@ class StreamerHttpClient(BaseStreamerClient):
|
|||||||
except Exception as err: # Тут бывают и ассерты, и KeyError, и прочая херня
|
except Exception as err: # Тут бывают и ассерты, и KeyError, и прочая херня
|
||||||
if isinstance(err, StreamerTempError):
|
if isinstance(err, StreamerTempError):
|
||||||
raise
|
raise
|
||||||
raise StreamerTempError(f"{type(err).__name__}: {err}")
|
raise StreamerTempError(tools.efmt(err))
|
||||||
raise StreamerTempError("Reached EOF")
|
raise StreamerTempError("Reached EOF")
|
||||||
|
|
||||||
def __make_http_session(self) -> aiohttp.ClientSession:
|
def __make_http_session(self) -> aiohttp.ClientSession:
|
||||||
@ -165,6 +166,6 @@ class StreamerMemsinkClient(BaseStreamerClient):
|
|||||||
if frame is not None:
|
if frame is not None:
|
||||||
yield (frame["online"], frame["width"], frame["height"], frame["data"])
|
yield (frame["online"], frame["width"], frame["height"], frame["data"])
|
||||||
except FileNotFoundError as err:
|
except FileNotFoundError as err:
|
||||||
raise StreamerTempError(f"{type(err).__name__}: {err}")
|
raise StreamerTempError(tools.efmt(err))
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
raise StreamerPermError(f"{type(err).__name__}: {err}")
|
raise StreamerPermError(tools.efmt(err))
|
||||||
|
|||||||
@ -187,8 +187,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
|
|||||||
elif data == b"\x71":
|
elif data == b"\x71":
|
||||||
sock.send(b"\x00")
|
sock.send(b"\x00")
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
get_logger(0).exception("CTL socket error on %s: %s: %s",
|
get_logger(0).exception("CTL socket error on %s: %s", client.addr, tools.efmt(err))
|
||||||
client.addr, type(err).__name__, err)
|
|
||||||
self.__close_client("CTL", client, "ctl_sock")
|
self.__close_client("CTL", client, "ctl_sock")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -202,8 +201,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
|
|||||||
elif data[:2] == b"\xA2\x01":
|
elif data[:2] == b"\xA2\x01":
|
||||||
self.__process_leds(data[2])
|
self.__process_leds(data[2])
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
get_logger(0).exception("INT socket error on %s: %s: %s",
|
get_logger(0).exception("INT socket error on %s: %s", client.addr, tools.efmt(err))
|
||||||
client.addr, type(err).__name__, err)
|
|
||||||
self.__close_client("INT", client, "ctl_sock")
|
self.__close_client("INT", client, "ctl_sock")
|
||||||
|
|
||||||
if qr in ready_read:
|
if qr in ready_read:
|
||||||
@ -286,8 +284,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
|
|||||||
try:
|
try:
|
||||||
client.int_sock.send(report)
|
client.int_sock.send(report)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
get_logger(0).info("Can't send %s report to %s: %s: %s",
|
get_logger(0).info("Can't send %s report to %s: %s", name, client.addr, tools.efmt(err))
|
||||||
name, client.addr, type(err).__name__, err)
|
|
||||||
self.__close_client_pair(client)
|
self.__close_client_pair(client)
|
||||||
|
|
||||||
def __clear_modifiers(self) -> None:
|
def __clear_modifiers(self) -> None:
|
||||||
@ -379,7 +376,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
|
|||||||
try:
|
try:
|
||||||
self.__iface.set_public(public)
|
self.__iface.set_public(public)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error("Can't change public mode: %s: %s", type(err).__name__, err)
|
logger.error("Can't change public mode: %s", tools.efmt(err))
|
||||||
|
|
||||||
def __unpair_client(self, client: _BtClient) -> None:
|
def __unpair_client(self, client: _BtClient) -> None:
|
||||||
logger = get_logger(0)
|
logger = get_logger(0)
|
||||||
@ -387,4 +384,4 @@ class BtServer: # pylint: disable=too-many-instance-attributes
|
|||||||
try:
|
try:
|
||||||
self.__iface.unpair(client.addr)
|
self.__iface.unpair(client.addr)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error("Can't unpair %s: %s: %s", client.addr, type(err).__name__, err)
|
logger.error("Can't unpair %s: %s", client.addr, tools.efmt(err))
|
||||||
|
|||||||
@ -167,8 +167,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
|
|||||||
err.errno == errno.EAGAIN # pylint: disable=no-member
|
err.errno == errno.EAGAIN # pylint: disable=no-member
|
||||||
or err.errno == errno.ESHUTDOWN # pylint: disable=no-member
|
or err.errno == errno.ESHUTDOWN # pylint: disable=no-member
|
||||||
):
|
):
|
||||||
logger.debug("HID-%s busy/unplugged (write): %s: %s",
|
logger.debug("HID-%s busy/unplugged (write): %s", self.__name, tools.efmt(err))
|
||||||
self.__name, type(err).__name__, err)
|
|
||||||
else:
|
else:
|
||||||
logger.exception("Can't write report to HID-%s", self.__name)
|
logger.exception("Can't write report to HID-%s", self.__name)
|
||||||
|
|
||||||
@ -193,7 +192,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
|
|||||||
try:
|
try:
|
||||||
read = bool(select.select([self.__fd], [], [], 0)[0])
|
read = bool(select.select([self.__fd], [], [], 0)[0])
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error("Can't select() for read HID-%s: %s: %s", self.__name, type(err).__name__, err)
|
logger.error("Can't select() for read HID-%s: %s", self.__name, tools.efmt(err))
|
||||||
break
|
break
|
||||||
|
|
||||||
if read:
|
if read:
|
||||||
@ -201,8 +200,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
|
|||||||
report = os.read(self.__fd, self.__read_size)
|
report = os.read(self.__fd, self.__read_size)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
if isinstance(err, OSError) and err.errno == errno.EAGAIN: # pylint: disable=no-member
|
if isinstance(err, OSError) and err.errno == errno.EAGAIN: # pylint: disable=no-member
|
||||||
logger.debug("HID-%s busy/unplugged (read): %s: %s",
|
logger.debug("HID-%s busy/unplugged (read): %s", self.__name, tools.efmt(err))
|
||||||
self.__name, type(err).__name__, err)
|
|
||||||
else:
|
else:
|
||||||
logger.exception("Can't read report from HID-%s", self.__name)
|
logger.exception("Can't read report from HID-%s", self.__name)
|
||||||
else:
|
else:
|
||||||
@ -220,12 +218,8 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
|
|||||||
flags = os.O_NONBLOCK
|
flags = os.O_NONBLOCK
|
||||||
flags |= (os.O_RDWR if self.__read_size else os.O_WRONLY)
|
flags |= (os.O_RDWR if self.__read_size else os.O_WRONLY)
|
||||||
self.__fd = os.open(self.__device_path, flags)
|
self.__fd = os.open(self.__device_path, flags)
|
||||||
except FileNotFoundError:
|
|
||||||
logger.error("Missing HID-%s device: %s", self.__name, self.__device_path)
|
|
||||||
time.sleep(self.__reopen_delay)
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error("Can't open HID-%s device: %s: %s: %s",
|
logger.error("Can't open HID-%s device %s: %s", self.__name, self.__device_path, tools.efmt(err))
|
||||||
self.__name, self.__device_path, type(err).__name__, err)
|
|
||||||
time.sleep(self.__reopen_delay)
|
time.sleep(self.__reopen_delay)
|
||||||
else:
|
else:
|
||||||
time.sleep(self.__reopen_delay)
|
time.sleep(self.__reopen_delay)
|
||||||
@ -238,7 +232,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
|
|||||||
else:
|
else:
|
||||||
logger.debug("HID-%s is busy/unplugged (write select)", self.__name)
|
logger.debug("HID-%s is busy/unplugged (write select)", self.__name)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error("Can't select() for write HID-%s: %s: %s", self.__name, type(err).__name__, err)
|
logger.error("Can't select() for write HID-%s: %s", self.__name, tools.efmt(err))
|
||||||
self.__close_device()
|
self.__close_device()
|
||||||
|
|
||||||
self.__state_flags.update(online=False)
|
self.__state_flags.update(online=False)
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import os
|
|||||||
from ....logging import get_logger
|
from ....logging import get_logger
|
||||||
|
|
||||||
from .... import env
|
from .... import env
|
||||||
|
from .... import tools
|
||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
@ -47,7 +48,7 @@ class UsbDeviceController:
|
|||||||
try:
|
try:
|
||||||
candidates = sorted(os.listdir(path))
|
candidates = sorted(os.listdir(path))
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error("Can't list %s: %s: %s: ignored", path, type(err).__name__, err)
|
logger.error("Can't list %s: %s: ignored", path, tools.efmt(err))
|
||||||
return
|
return
|
||||||
|
|
||||||
udc = ""
|
udc = ""
|
||||||
|
|||||||
@ -31,6 +31,7 @@ import hid
|
|||||||
|
|
||||||
from ...logging import get_logger
|
from ...logging import get_logger
|
||||||
|
|
||||||
|
from ... import tools
|
||||||
from ... import aiotools
|
from ... import aiotools
|
||||||
|
|
||||||
from ...yamlconf import Option
|
from ...yamlconf import Option
|
||||||
@ -91,8 +92,8 @@ class Plugin(BaseUserGpioDriver):
|
|||||||
with self.__ensure_device("probing"):
|
with self.__ensure_device("probing"):
|
||||||
pass
|
pass
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error("Can't probe %s on %s: %s: %s",
|
logger.error("Can't probe %s on %s: %s",
|
||||||
self, self.__device_path, type(err).__name__, err)
|
self, self.__device_path, tools.efmt(err))
|
||||||
self.__reset_pins()
|
self.__reset_pins()
|
||||||
|
|
||||||
async def run(self) -> None:
|
async def run(self) -> None:
|
||||||
@ -135,8 +136,8 @@ class Plugin(BaseUserGpioDriver):
|
|||||||
try:
|
try:
|
||||||
self.__inner_write(pin, state)
|
self.__inner_write(pin, state)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error("Can't reset pin=%d of %s on %s: %s: %s",
|
logger.error("Can't reset pin=%d of %s on %s: %s",
|
||||||
pin, self, self.__device_path, type(err).__name__, err)
|
pin, self, self.__device_path, tools.efmt(err))
|
||||||
|
|
||||||
def __inner_read(self, pin: int) -> bool:
|
def __inner_read(self, pin: int) -> bool:
|
||||||
if self.__check_pin(pin):
|
if self.__check_pin(pin):
|
||||||
@ -173,8 +174,8 @@ class Plugin(BaseUserGpioDriver):
|
|||||||
try:
|
try:
|
||||||
yield self.__device
|
yield self.__device
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
get_logger(0).error("Error occured on %s on %s while %s: %s: %s",
|
get_logger(0).error("Error occured on %s on %s while %s: %s",
|
||||||
self, self.__device_path, context, type(err).__name__, err)
|
self, self.__device_path, context, tools.efmt(err))
|
||||||
self.__close_device()
|
self.__close_device()
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|||||||
@ -32,6 +32,11 @@ from typing import Hashable
|
|||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
|
|
||||||
|
|
||||||
|
# =====
|
||||||
|
def efmt(err: Exception) -> str:
|
||||||
|
return f"{type(err).__name__}: {err}"
|
||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
def merge(dest: Dict, src: Dict) -> None:
|
def merge(dest: Dict, src: Dict) -> None:
|
||||||
for key in src:
|
for key in src:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user