diff --git a/assets/sai.css b/assets/sai.css
index b846bb3..3165758 100644
--- a/assets/sai.css
+++ b/assets/sai.css
@@ -645,6 +645,14 @@ div.ibuil {
width: 80px;
}
+div.ibuil.power-unmanaged {
+ border: 2px solid black;
+}
+
+div.ibuil.power-stay {
+ border: 2px solid green;
+}
+
div.ibuilctr {
font-weight: normal;
font-size: 9pt;
diff --git a/assets/sai.js b/assets/sai.js
index e5ad7ce..cd314b2 100644
--- a/assets/sai.js
+++ b/assets/sai.js
@@ -1015,6 +1015,13 @@ function createBuilderDiv(plat) {
platDiv.className = "ibuil bdr";
if (!plat.online)
platDiv.className += " offline";
+ else {
+ if (!plat.power_managed)
+ platDiv.className += " power-unmanaged";
+ else
+ if (plat.stay_on)
+ platDiv.className += " power-stay";
+ }
if (plat.powering_up)
platDiv.className += " powering-up";
if (plat.powering_down)
diff --git a/src/server/s-comms.c b/src/server/s-comms.c
index 53c4e44..fa0e8c4 100644
--- a/src/server/s-comms.c
+++ b/src/server/s-comms.c
@@ -833,11 +833,14 @@ s_callback_ws(struct lws *wsi, enum lws_callback_reasons reason, void *user,
case 1: {
sai_power_managed_builders_t *pmb = (sai_power_managed_builders_t *)a.dest;
-
+ uint64_t bf_set = 0;
+
lws_start_foreach_dll(struct lws_dll2 *, p, pmb->builders.head) {
sai_power_managed_builder_t *b = lws_container_of(p,
sai_power_managed_builder_t, list);
char q[256];
+ int shi = 0;
+
lwsl_notice("%s: Marking builder %s as power-managed\n",
__func__, b->name);
lws_snprintf(q, sizeof(q),
@@ -847,14 +850,23 @@ s_callback_ws(struct lws *wsi, enum lws_callback_reasons reason, void *user,
lwsl_err("%s: Failed to mark builder %s as power-managed\n",
__func__, b->name);
- sai_plat_t *cb;
lws_start_foreach_dll(struct lws_dll2 *, p2,
vhd->server.builder_owner.head) {
- cb = lws_container_of(p2, sai_plat_t,
- sai_plat_list);
+
+ sai_plat_t *cb = lws_container_of(p2, sai_plat_t, sai_plat_list);
const char *dot = strchr(cb->name, '.');
- if (dot && !strncmp(cb->name, b->name, (size_t)(dot - cb->name)))
+
+ lwsl_notice("%s: builder entry: %s\n", __func__, cb->name);
+
+ if (dot && !(bf_set & (1 << shi)) && strlen(b->name) <= (size_t)(dot - cb->name) &&
+ !strncmp(cb->name + (dot - cb->name) - strlen(b->name), b->name, strlen(b->name))) {
+ lwsl_notice("%s: ++++++++++++ Setting %s .stay_on=%d\n", __func__, cb->name, b->stay_on);
cb->stay_on = b->stay_on;
+ bf_set |= (1 << shi);
+ } else
+ lwsl_notice("%s: ------------ Unmatched '%s' '%s'\n", __func__, cb->name + (dot - cb->name) - strlen(b->name), b->name);
+
+ shi++;
} lws_end_foreach_dll(p2);
} lws_end_foreach_dll(p);