diff options
-rw-r--r-- | kvmd/aiogp.py | 4 | ||||
-rw-r--r-- | kvmd/aiotools.py | 9 | ||||
-rw-r--r-- | kvmd/apps/kvmd/server.py | 8 | ||||
-rw-r--r-- | kvmd/apps/kvmd/snapshoter.py | 4 | ||||
-rw-r--r-- | kvmd/apps/kvmd/streamer.py | 4 | ||||
-rw-r--r-- | kvmd/apps/pst/server.py | 4 | ||||
-rw-r--r-- | kvmd/apps/vnc/server.py | 6 | ||||
-rw-r--r-- | kvmd/plugins/msd/__init__.py | 4 | ||||
-rw-r--r-- | kvmd/plugins/msd/otg/__init__.py | 28 | ||||
-rw-r--r-- | kvmd/plugins/msd/relay/__init__.py | 2 | ||||
-rw-r--r-- | kvmd/plugins/ugpio/ezcoo.py | 2 | ||||
-rw-r--r-- | kvmd/plugins/ugpio/hidrelay.py | 2 | ||||
-rw-r--r-- | kvmd/plugins/ugpio/hue.py | 4 | ||||
-rw-r--r-- | kvmd/plugins/ugpio/ipmi.py | 2 | ||||
-rw-r--r-- | kvmd/plugins/ugpio/otgconf.py | 6 | ||||
-rw-r--r-- | kvmd/plugins/ugpio/pway.py | 2 | ||||
-rw-r--r-- | kvmd/plugins/ugpio/tesmart.py | 4 | ||||
-rw-r--r-- | kvmd/plugins/ugpio/xh_hk4401.py | 2 |
18 files changed, 43 insertions, 54 deletions
diff --git a/kvmd/aiogp.py b/kvmd/aiogp.py index 534c82a9..6860c6ba 100644 --- a/kvmd/aiogp.py +++ b/kvmd/aiogp.py @@ -107,7 +107,7 @@ class AioReader: # pylint: disable=too-many-instance-attributes ) for (pin, value) in zip(pins, lines.get_values()) } - self.__loop.call_soon_threadsafe(self.__notifier.notify_sync) + self.__loop.call_soon_threadsafe(self.__notifier.notify) while not self.__stop_event.is_set(): ev_lines = lines.event_wait(1) @@ -170,5 +170,5 @@ class _DebouncedValue: value = await self.__queue.get() if self.__value != value: self.__value = value - await self.__notifier.notify() + self.__notifier.notify() await asyncio.sleep(self.__debounce) diff --git a/kvmd/aiotools.py b/kvmd/aiotools.py index 2a798e2a..07981fde 100644 --- a/kvmd/aiotools.py +++ b/kvmd/aiotools.py @@ -232,10 +232,7 @@ class AioNotifier: def __init__(self) -> None: self.__queue: "asyncio.Queue[None]" = asyncio.Queue() - async def notify(self) -> None: - await self.__queue.put(None) - - def notify_sync(self) -> None: + def notify(self) -> None: self.__queue.put_nowait(None) async def wait(self, timeout: Optional[float]=None) -> None: @@ -299,7 +296,7 @@ class AioExclusiveRegion: self.__busy = True try: if self.__notifier: - await self.__notifier.notify() + self.__notifier.notify() except: # noqa: E722 self.__busy = False raise @@ -309,7 +306,7 @@ class AioExclusiveRegion: async def exit(self) -> None: self.__busy = False if self.__notifier: - await self.__notifier.notify() + self.__notifier.notify() async def __aenter__(self) -> None: await self.enter() diff --git a/kvmd/apps/kvmd/server.py b/kvmd/apps/kvmd/server.py index 5adc8d8d..6cb2ef5e 100644 --- a/kvmd/apps/kvmd/server.py +++ b/kvmd/apps/kvmd/server.py @@ -213,13 +213,13 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins value = validator(value) # type: ignore if current_params[name] != value: self.__new_streamer_params[name] = value - await self.__streamer_notifier.notify() + self.__streamer_notifier.notify() return make_json_response() @exposed_http("POST", "/streamer/reset") async def __streamer_reset_handler(self, _: Request) -> Response: self.__reset_streamer = True - await self.__streamer_notifier.notify() + self.__streamer_notifier.notify() return make_json_response() # ===== WEBSOCKET @@ -299,11 +299,11 @@ class KvmdServer(HttpServer): # pylint: disable=too-many-arguments,too-many-ins logger.info("On-Cleanup complete") async def _on_ws_opened(self) -> None: - await self.__streamer_notifier.notify() + self.__streamer_notifier.notify() async def _on_ws_closed(self) -> None: self.__hid.clear_events() - await self.__streamer_notifier.notify() + self.__streamer_notifier.notify() def __has_stream_clients(self) -> bool: return bool(sum(map( diff --git a/kvmd/apps/kvmd/snapshoter.py b/kvmd/apps/kvmd/snapshoter.py index 0a8874a1..fed3de92 100644 --- a/kvmd/apps/kvmd/snapshoter.py +++ b/kvmd/apps/kvmd/snapshoter.py @@ -96,7 +96,7 @@ class Snapshoter: # pylint: disable=too-many-instance-attributes logger.info("Time to take the new idle snapshot") try: self.__snapshoting = True - await notifier.notify() + notifier.notify() if not live: await self.__wakeup() @@ -116,7 +116,7 @@ class Snapshoter: # pylint: disable=too-many-instance-attributes logger.exception("Unhandled exception while taking snapshot") finally: self.__snapshoting = False - await asyncio.shield(notifier.notify()) + notifier.notify() async def __wakeup(self) -> None: logger = get_logger(0) diff --git a/kvmd/apps/kvmd/streamer.py b/kvmd/apps/kvmd/streamer.py index 1e387240..cc753aff 100644 --- a/kvmd/apps/kvmd/streamer.py +++ b/kvmd/apps/kvmd/streamer.py @@ -319,7 +319,7 @@ class Streamer: # pylint: disable=too-many-instance-attributes async def poll_state(self) -> AsyncGenerator[Dict, None]: def signal_handler(*_: Any) -> None: get_logger(0).info("Got SIGUSR2, checking the stream state ...") - asyncio.ensure_future(self.__notifier.notify()) + self.__notifier.notify() get_logger(0).info("Installing SIGUSR2 streamer handler ...") asyncio.get_event_loop().add_signal_handler(signal.SIGUSR2, signal_handler) @@ -370,7 +370,7 @@ class Streamer: # pylint: disable=too-many-instance-attributes ) if save: self.__snapshot = snapshot - await self.__notifier.notify() + self.__notifier.notify() return snapshot logger.error("Stream is offline, no signal or so") except (aiohttp.ClientConnectionError, aiohttp.ServerConnectionError) as err: diff --git a/kvmd/apps/pst/server.py b/kvmd/apps/pst/server.py index 968d322d..a492a29b 100644 --- a/kvmd/apps/pst/server.py +++ b/kvmd/apps/pst/server.py @@ -96,10 +96,10 @@ class PstServer(HttpServer): # pylint: disable=too-many-arguments,too-many-inst logger.info("On-Cleanup complete") async def _on_ws_opened(self) -> None: - await self.__notifier.notify() + self.__notifier.notify() async def _on_ws_closed(self) -> None: - await self.__notifier.notify() + self.__notifier.notify() # ===== SYSTEM TASKS diff --git a/kvmd/apps/vnc/server.py b/kvmd/apps/vnc/server.py index 54974bfb..151f6374 100644 --- a/kvmd/apps/vnc/server.py +++ b/kvmd/apps/vnc/server.py @@ -294,7 +294,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes if len(last["data"]) == 0: # Вдруг какой-то баг - await self.__fb_notifier.notify() + self.__fb_notifier.notify() continue if last["format"] == StreamFormats.JPEG: @@ -305,7 +305,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes if has_h264_key: await self._send_fb_h264(last["data"]) else: - await self.__fb_notifier.notify() + self.__fb_notifier.notify() else: raise RuntimeError(f"Unknown format: {last['format']}") last["data"] = b"" @@ -406,7 +406,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes await self.__kvmd_session.streamer.set_params(quality, self.__desired_fps) async def _on_fb_update_request(self) -> None: - await self.__fb_notifier.notify() + self.__fb_notifier.notify() # ===== diff --git a/kvmd/plugins/msd/__init__.py b/kvmd/plugins/msd/__init__.py index 753a1cd0..1e4a521e 100644 --- a/kvmd/plugins/msd/__init__.py +++ b/kvmd/plugins/msd/__init__.py @@ -218,7 +218,7 @@ class MsdFileReader(BaseMsdReader): # pylint: disable=too-many-instance-attribu now = time.monotonic() if self.__tick + 1 < now or self.__readed == self.__file_size: self.__tick = now - await self.__notifier.notify() + self.__notifier.notify() yield chunk @@ -277,7 +277,7 @@ class MsdFileWriter(BaseMsdWriter): # pylint: disable=too-many-instance-attribu now = time.monotonic() if self.__tick + 1 < now: self.__tick = now - await self.__notifier.notify() + self.__notifier.notify() return self.__written diff --git a/kvmd/plugins/msd/otg/__init__.py b/kvmd/plugins/msd/otg/__init__.py index 2d556048..8d1ee8a5 100644 --- a/kvmd/plugins/msd/otg/__init__.py +++ b/kvmd/plugins/msd/otg/__init__.py @@ -121,13 +121,13 @@ class _State: async def busy(self, check_online: bool=True) -> AsyncGenerator[None, None]: async with self._region: async with self._lock: - await self.__notifier.notify() + self.__notifier.notify() if check_online: if self.vd is None: raise MsdOfflineError() assert self.storage yield - await self.__notifier.notify() + self.__notifier.notify() def is_busy(self) -> bool: return self._region.is_busy() @@ -173,7 +173,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes logger = get_logger(0) logger.info("Using OTG gadget %r as MSD", gadget) - aiotools.run_sync(self.__reload_state()) + aiotools.run_sync(self.__reload_state(notify=False)) @classmethod def get_plugin_options(cls) -> Dict: @@ -334,7 +334,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes async with self.__state._region: # pylint: disable=protected-access try: async with self.__state._lock: # pylint: disable=protected-access - await self.__notifier.notify() + self.__notifier.notify() assert self.__state.storage assert self.__state.vd @@ -361,10 +361,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes except asyncio.CancelledError: pass finally: - try: - await asyncio.shield(self.__notifier.notify()) - except asyncio.CancelledError: - pass + self.__notifier.notify() @contextlib.asynccontextmanager async def write_image(self, name: str, size: int, remove_incomplete: Optional[bool]) -> AsyncGenerator[MsdFileWriter, None]: @@ -373,7 +370,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes path: str = "" try: async with self.__state._lock: # pylint: disable=protected-access - await self.__notifier.notify() + self.__notifier.notify() assert self.__state.storage assert self.__state.vd @@ -395,7 +392,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes chunk_size=self.__write_chunk_size, ).open() - await self.__notifier.notify() + self.__notifier.notify() yield self.__writer self.__set_image_complete(name, self.__writer.is_complete()) @@ -421,10 +418,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes await asyncio.shield(self.__reload_state()) except asyncio.CancelledError: pass - try: - await asyncio.shield(self.__notifier.notify()) - except asyncio.CancelledError: - pass @aiotools.atomic async def remove(self, name: str) -> None: @@ -470,7 +463,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes while True: # Активно ждем, пока не будут на месте все каталоги. await self.__reload_state() - await self.__notifier.notify() if self.__state.vd: break await asyncio.sleep(5) @@ -483,7 +475,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes # После установки вотчеров еще раз проверяем стейт, чтобы ничего не потерять await self.__reload_state() - await self.__notifier.notify() while self.__state.vd: # Если живы после предыдущей проверки need_restart = False @@ -499,12 +490,11 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes break if need_reload_state: await self.__reload_state() - await self.__notifier.notify() except Exception: logger.exception("Unexpected MSD watcher error") time.sleep(1) - async def __reload_state(self) -> None: + async def __reload_state(self, notify: bool=True) -> None: logger = get_logger(0) async with self.__state._lock: # pylint: disable=protected-access try: @@ -541,6 +531,8 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes self.__state.vd.image = None self.__state.vd.connected = False + if notify: + self.__notifier.notify() async def __setup_initial(self) -> None: if self.__initial_image: diff --git a/kvmd/plugins/msd/relay/__init__.py b/kvmd/plugins/msd/relay/__init__.py index 9e507556..f6b13dc5 100644 --- a/kvmd/plugins/msd/relay/__init__.py +++ b/kvmd/plugins/msd/relay/__init__.py @@ -245,7 +245,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes ).open() await self.__write_image_info(False) - await self.__notifier.notify() + self.__notifier.notify() yield self.__device_writer await self.__write_image_info(True) finally: diff --git a/kvmd/plugins/ugpio/ezcoo.py b/kvmd/plugins/ugpio/ezcoo.py index 3cfc2e05..ac7ee0f3 100644 --- a/kvmd/plugins/ugpio/ezcoo.py +++ b/kvmd/plugins/ugpio/ezcoo.py @@ -101,7 +101,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute (got, channel) = await aiomulti.queue_get_last(self.__channel_queue, 1) if got and self.__channel != channel: self.__channel = channel - await self._notifier.notify() + self._notifier.notify() async def cleanup(self) -> None: if self.__proc is not None: diff --git a/kvmd/plugins/ugpio/hidrelay.py b/kvmd/plugins/ugpio/hidrelay.py index 1dce0909..d1786908 100644 --- a/kvmd/plugins/ugpio/hidrelay.py +++ b/kvmd/plugins/ugpio/hidrelay.py @@ -109,7 +109,7 @@ class Plugin(BaseUserGpioDriver): except Exception: raw = -1 if raw != prev_raw: - await self._notifier.notify() + self._notifier.notify() prev_raw = raw await asyncio.sleep(self.__state_poll) diff --git a/kvmd/plugins/ugpio/hue.py b/kvmd/plugins/ugpio/hue.py index f81df4ca..b34cb719 100644 --- a/kvmd/plugins/ugpio/hue.py +++ b/kvmd/plugins/ugpio/hue.py @@ -122,7 +122,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute get_logger().error("Failed Hue bulk GET request: %s", tools.efmt(err)) self.__state = dict.fromkeys(self.__state, None) if self.__state != prev_state: - await self._notifier.notify() + self._notifier.notify() prev_state = self.__state await self.__update_notifier.wait(self.__state_poll) @@ -148,7 +148,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute get_logger().error("Failed Hue PUT request to pin %s: %s", pin, tools.efmt(err)) raise GpioDriverOfflineError(self) else: - await self.__update_notifier.notify() + self.__update_notifier.notify() def __ensure_http_session(self) -> aiohttp.ClientSession: if not self.__http_session: diff --git a/kvmd/plugins/ugpio/ipmi.py b/kvmd/plugins/ugpio/ipmi.py index 65c7efdf..e822065d 100644 --- a/kvmd/plugins/ugpio/ipmi.py +++ b/kvmd/plugins/ugpio/ipmi.py @@ -135,7 +135,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute await self.__update_power() new = (self.__online, self.__power) if new != prev: - await self._notifier.notify() + self._notifier.notify() prev = new await asyncio.sleep(self.__state_poll) diff --git a/kvmd/plugins/ugpio/otgconf.py b/kvmd/plugins/ugpio/otgconf.py index efe1b5c4..28eae8fe 100644 --- a/kvmd/plugins/ugpio/otgconf.py +++ b/kvmd/plugins/ugpio/otgconf.py @@ -76,7 +76,7 @@ class Plugin(BaseUserGpioDriver): while True: try: while True: - await self._notifier.notify() + self._notifier.notify() if os.path.isfile(self.__udc_path): break await asyncio.sleep(5) @@ -84,7 +84,7 @@ class Plugin(BaseUserGpioDriver): with Inotify() as inotify: inotify.watch(os.path.dirname(self.__udc_path), InotifyMask.ALL_MODIFY_EVENTS) inotify.watch(self.__profile_path, InotifyMask.ALL_MODIFY_EVENTS) - await self._notifier.notify() + self._notifier.notify() while True: need_restart = False need_notify = False @@ -97,7 +97,7 @@ class Plugin(BaseUserGpioDriver): if need_restart: break if need_notify: - await self._notifier.notify() + self._notifier.notify() except Exception: logger.exception("Unexpected OTG-bind watcher error") await asyncio.sleep(1) diff --git a/kvmd/plugins/ugpio/pway.py b/kvmd/plugins/ugpio/pway.py index 041aaf27..969838f3 100644 --- a/kvmd/plugins/ugpio/pway.py +++ b/kvmd/plugins/ugpio/pway.py @@ -103,7 +103,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute (got, channel) = await aiomulti.queue_get_last(self.__channel_queue, 1) if got and self.__channel != channel: self.__channel = channel - await self._notifier.notify() + self._notifier.notify() async def cleanup(self) -> None: if self.__proc is not None: diff --git a/kvmd/plugins/ugpio/tesmart.py b/kvmd/plugins/ugpio/tesmart.py index 288f2133..e3f5a3bd 100644 --- a/kvmd/plugins/ugpio/tesmart.py +++ b/kvmd/plugins/ugpio/tesmart.py @@ -111,7 +111,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute except Exception: pass if self.__active != prev_active: - await self._notifier.notify() + self._notifier.notify() prev_active = self.__active await self.__update_notifier.wait(self.__state_poll) @@ -127,7 +127,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute assert 1 <= channel <= 16 if state: await self.__send_command("{:c}{:c}".format(1, channel).encode()) - await self.__update_notifier.notify() + self.__update_notifier.notify() await asyncio.sleep(self.__switch_delay) # Slowdown # ===== diff --git a/kvmd/plugins/ugpio/xh_hk4401.py b/kvmd/plugins/ugpio/xh_hk4401.py index 53582897..d2ed34a5 100644 --- a/kvmd/plugins/ugpio/xh_hk4401.py +++ b/kvmd/plugins/ugpio/xh_hk4401.py @@ -99,7 +99,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute (got, channel) = await aiomulti.queue_get_last(self.__channel_queue, 1) if got and self.__channel != channel: self.__channel = channel - await self._notifier.notify() + self._notifier.notify() async def cleanup(self) -> None: if self.__proc is not None: |