summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Devaev <[email protected]>2024-11-02 18:06:45 +0200
committerMaxim Devaev <[email protected]>2024-11-02 18:06:52 +0200
commit0fd1174bc5354d8f69adde3218edd121e48c84f0 (patch)
tree5eb78947f32cb8405283fbc1351fae3272efd6c2
parentd4fb640418efdb924bf30f1487acde4a675d6e2f (diff)
granularity info and minor fixes
-rw-r--r--kvmd/apps/kvmd/info/__init__.py9
-rw-r--r--kvmd/apps/kvmd/ocr.py5
-rw-r--r--kvmd/apps/kvmd/streamer.py8
-rw-r--r--kvmd/apps/kvmd/ugpio.py6
-rw-r--r--kvmd/plugins/atx/__init__.py6
-rw-r--r--kvmd/plugins/msd/__init__.py12
-rw-r--r--web/share/js/kvm/atx.js38
-rw-r--r--web/share/js/kvm/ocr.js12
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) {