diff options
author | Maxim Devaev <[email protected]> | 2024-11-02 18:06:45 +0200 |
---|---|---|
committer | Maxim Devaev <[email protected]> | 2024-11-02 18:06:52 +0200 |
commit | 0fd1174bc5354d8f69adde3218edd121e48c84f0 (patch) | |
tree | 5eb78947f32cb8405283fbc1351fae3272efd6c2 | |
parent | d4fb640418efdb924bf30f1487acde4a675d6e2f (diff) |
granularity info and minor fixes
-rw-r--r-- | kvmd/apps/kvmd/info/__init__.py | 9 | ||||
-rw-r--r-- | kvmd/apps/kvmd/ocr.py | 5 | ||||
-rw-r--r-- | kvmd/apps/kvmd/streamer.py | 8 | ||||
-rw-r--r-- | kvmd/apps/kvmd/ugpio.py | 6 | ||||
-rw-r--r-- | kvmd/plugins/atx/__init__.py | 6 | ||||
-rw-r--r-- | kvmd/plugins/msd/__init__.py | 12 | ||||
-rw-r--r-- | web/share/js/kvm/atx.js | 38 | ||||
-rw-r--r-- | web/share/js/kvm/ocr.js | 12 |
8 files changed, 84 insertions, 12 deletions
diff --git a/kvmd/apps/kvmd/info/__init__.py b/kvmd/apps/kvmd/info/__init__.py index b346c10c..9ede5489 100644 --- a/kvmd/apps/kvmd/info/__init__.py +++ b/kvmd/apps/kvmd/info/__init__.py @@ -65,6 +65,15 @@ class InfoManager: ]) async def poll_state(self) -> AsyncGenerator[dict, None]: + # ==== Granularity table ==== + # - system -- Partial + # - auth -- Partial + # - meta -- Partial, nullable + # - extras -- Partial, nullable + # - hw -- Partial + # - fan -- Partial + # =========================== + while True: (field, value) = await self.__queue.get() yield {field: value} diff --git a/kvmd/apps/kvmd/ocr.py b/kvmd/apps/kvmd/ocr.py index e110a720..367c0c80 100644 --- a/kvmd/apps/kvmd/ocr.py +++ b/kvmd/apps/kvmd/ocr.py @@ -129,6 +129,11 @@ class Ocr: self.__notifier.notify() async def poll_state(self) -> AsyncGenerator[dict, None]: + # ===== Granularity table ===== + # - enabled -- Full + # - langs -- Partial + # ============================= + while True: await self.__notifier.wait() yield (await self.get_state()) diff --git a/kvmd/apps/kvmd/streamer.py b/kvmd/apps/kvmd/streamer.py index d02bf50d..08c48eb1 100644 --- a/kvmd/apps/kvmd/streamer.py +++ b/kvmd/apps/kvmd/streamer.py @@ -287,6 +287,14 @@ class Streamer: # pylint: disable=too-many-instance-attributes self.__notifier.notify(self.__ST_FULL) async def poll_state(self) -> AsyncGenerator[dict, None]: + # ==== Granularity table ==== + # - features -- Full + # - limits -- Partial, paired with params + # - params -- Partial, paired with limits + # - streamer -- Partial, nullable + # - snapshot -- Partial + # =========================== + def signal_handler(*_: Any) -> None: get_logger(0).info("Got SIGUSR2, checking the stream state ...") self.__notifier.notify(self.__ST_STREAMER) diff --git a/kvmd/apps/kvmd/ugpio.py b/kvmd/apps/kvmd/ugpio.py index b5b4a621..e4735c61 100644 --- a/kvmd/apps/kvmd/ugpio.py +++ b/kvmd/apps/kvmd/ugpio.py @@ -271,6 +271,12 @@ class UserGpio: self.__notifier.notify(1) async def poll_state(self) -> AsyncGenerator[dict, None]: + # ==== Granularity table ==== + # - model -- Full + # - state.inputs -- Partial + # - state.outputs -- Partial + # =========================== + prev: dict = {"inputs": {}, "outputs": {}} while True: # pylint: disable=too-many-nested-blocks if (await self.__notifier.wait()) > 0: diff --git a/kvmd/plugins/atx/__init__.py b/kvmd/plugins/atx/__init__.py index 7545b030..d8bea96d 100644 --- a/kvmd/plugins/atx/__init__.py +++ b/kvmd/plugins/atx/__init__.py @@ -52,6 +52,12 @@ class BaseAtx(BasePlugin): raise NotImplementedError async def poll_state(self) -> AsyncGenerator[dict, None]: + # ==== Granularity table ==== + # - enabled -- Full + # - busy -- Partial + # - leds -- Partial + # =========================== + yield {} raise NotImplementedError diff --git a/kvmd/plugins/msd/__init__.py b/kvmd/plugins/msd/__init__.py index 193b81b1..b2f9d50e 100644 --- a/kvmd/plugins/msd/__init__.py +++ b/kvmd/plugins/msd/__init__.py @@ -121,6 +121,18 @@ class BaseMsd(BasePlugin): raise NotImplementedError() async def poll_state(self) -> AsyncGenerator[dict, None]: + # ==== Granularity table ==== + # - enabled -- Full + # - online -- Partial + # - busy -- Partial + # - drive -- Partial, nullable + # - storage -- Partial, nullable + # - storage.parts -- Partial + # - storage.images -- Partial + # - storage.downloading -- Partial, nullable + # - storage.uploading -- Partial, nullable + # =========================== + if self is not None: # XXX: Vulture and pylint hack raise NotImplementedError() yield diff --git a/web/share/js/kvm/atx.js b/web/share/js/kvm/atx.js index bb8b5543..4d9764ea 100644 --- a/web/share/js/kvm/atx.js +++ b/web/share/js/kvm/atx.js @@ -32,6 +32,8 @@ export function Atx(__recorder) { /************************************************************************/ + var __state = null; + var __init__ = function() { $("atx-power-led").title = "Power Led"; $("atx-hdd-led").title = "Disk Activity Led"; @@ -46,18 +48,38 @@ export function Atx(__recorder) { /************************************************************************/ self.setState = function(state) { - let buttons_enabled = false; if (state) { - tools.feature.setEnabled($("atx-dropdown"), state.enabled); - $("atx-power-led").className = (state.busy ? "led-yellow" : (state.leds.power ? "led-green" : "led-gray")); - $("atx-hdd-led").className = (state.leds.hdd ? "led-red" : "led-gray"); - buttons_enabled = !state.busy; + if (!__state) { + __state = {"leds": {}}; + } + if (state.enabled !== undefined) { + tools.feature.setEnabled($("atx-dropdown"), state.enabled); + __state.enabled = state.enabled; + } + if (__state.enabled !== undefined) { + if (state.busy !== undefined) { + __updateButtons(!state.busy); + __state.busy = state.busy; + } + if (state.leds !== undefined) { + __state.leds = state.leds; + } + if (state.busy !== undefined || state.leds !== undefined) { + let busy = __state.busy; + let leds = __state.leds; + $("atx-power-led").className = (busy ? "led-yellow" : (leds.power ? "led-green" : "led-gray")); + $("atx-hdd-led").className = (leds.hdd ? "led-red" : "led-gray"); + } + } } else { - $("atx-power-led").className = "led-gray"; - $("atx-hdd-led").className = "led-gray"; + __state = null; + __updateButtons(false); } + }; + + var __updateButtons = function(enabled) { for (let id of ["atx-power-button", "atx-power-button-long", "atx-reset-button"]) { - tools.el.setEnabled($(id), buttons_enabled); + tools.el.setEnabled($(id), enabled); } }; diff --git a/web/share/js/kvm/ocr.js b/web/share/js/kvm/ocr.js index 849b19b1..5f44791a 100644 --- a/web/share/js/kvm/ocr.js +++ b/web/share/js/kvm/ocr.js @@ -32,6 +32,8 @@ export function Ocr(__getGeometry) { /************************************************************************/ + var __enabled = null; + var __start_pos = null; var __end_pos = null; var __sel = null; @@ -71,8 +73,10 @@ export function Ocr(__getGeometry) { /************************************************************************/ self.setState = function(state) { - let enabled = (state && state.enabled && !tools.browser.is_mobile); - if (enabled) { + if (state.enabled !== undefined) { + __enabled = (state.enabled && !tools.browser.is_mobile); + } + if (__enabled) { let el = $("stream-ocr-lang-selector"); el.options.length = 0; for (let lang of state.langs.available) { @@ -80,8 +84,8 @@ export function Ocr(__getGeometry) { } el.value = tools.storage.get("stream.ocr.lang", state.langs["default"]); } - tools.feature.setEnabled($("stream-ocr"), enabled); - $("stream-ocr-led").className = (enabled ? "led-gray" : "hidden"); + tools.feature.setEnabled($("stream-ocr"), __enabled); + $("stream-ocr-led").className = (__enabled ? "led-gray" : "hidden"); }; var __startSelection = function(event) { |