Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
    npro  
 Modern all-safe Rust Network Protocol library supporting h1, h2, h3, ws, wt sans-IO and with socket IO + tls
git clone https://npro.rs/repo/npro
 
root / scripts / sai-web.service
Author[]google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.c...> 2025-09-26 05:19 UTC
Committer[]Andy Green <andy@warmcat.com> 2025-09-26 06:47 UTC
Tree253d167f8e4f621edce6014d9779f33d1afa49b1   Raw Patch
 
feat: Add power status borders to builder icons
feat: Add power status borders to builder icons

This commit introduces a visual indication of the power status for each builder in the UI.

- The `createBuilderDiv` function in `assets/sai.js` now adds CSS classes to the builder's div based on its power management status (`power_managed`) and whether it's under a "stay on" (`stay_on`).
- New CSS rules in `assets/sai.css` style these classes:
  - `.power-unmanaged`: Applies a grey border for builders whose power is not managed.
  - `.power-stay`: Applies a green border for builders that are managed and have a "stay on" active.
- Builders that are online but not in either of these states will have no border, as before.
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);
Page fetched 0s ago, creation time: 5ms (vhost etag hits: 0%, cache hits: 0%)