This is an automated email from the ASF dual-hosted git repository. wu-sheng pushed a commit to branch feat/template-modes-env-config in repository https://gitbox.apache.org/repos/asf/skywalking-horizon-ui.git
commit c1247c7a0a139f785591628babdd57f32c77977e Author: Wu Sheng <[email protected]> AuthorDate: Fri Jun 26 09:28:38 2026 +0800 fix(cluster): badge no longer claims 'all reachable' when a feature is bundled reachable===null (ui_template in readonly: not probed, serving bundled templates) was slipping past the reachable===false filter, so the summary read 'all reachable' while a row showed 'readonly · bundled'. Count the null/bundled features separately — the badge now reads '4 reachable · 1 bundled'. --- apps/ui/src/features/operate/cluster/ClusterStatusView.vue | 13 ++++++++++--- apps/ui/src/i18n/locales/de.json | 3 ++- apps/ui/src/i18n/locales/en.json | 3 ++- apps/ui/src/i18n/locales/es.json | 3 ++- apps/ui/src/i18n/locales/fr.json | 3 ++- apps/ui/src/i18n/locales/ja.json | 3 ++- apps/ui/src/i18n/locales/ko.json | 3 ++- apps/ui/src/i18n/locales/pt.json | 3 ++- apps/ui/src/i18n/locales/zh-CN.json | 3 ++- 9 files changed, 26 insertions(+), 11 deletions(-) diff --git a/apps/ui/src/features/operate/cluster/ClusterStatusView.vue b/apps/ui/src/features/operate/cluster/ClusterStatusView.vue index 05431b2..792c842 100644 --- a/apps/ui/src/features/operate/cluster/ClusterStatusView.vue +++ b/apps/ui/src/features/operate/cluster/ClusterStatusView.vue @@ -114,9 +114,16 @@ const adminBadgeState = computed<'ok' | 'warn' | 'err' | 'unknown'>(() => { const adminBadgeLabel = computed<string>(() => { if (!preflight.value) return t('loading…'); if (!adminReachable.value) return t('unreachable'); - const down = preflight.value.modules.filter((m) => m.required && m.reachable === false); - if (down.length === 0) return t('all reachable'); - return t('{n} unreachable', { n: down.length }); + const mods = preflight.value.modules; + const down = mods.filter((m) => m.reachable === false).length; + if (down > 0) return t('{n} unreachable', { n: down }); + // reachable === null = not probed (ui_template in readonly: bundled). It's + // healthy, but it isn't "reachable" — don't fold it into "all reachable". + const bundled = mods.filter((m) => m.reachable === null).length; + if (bundled > 0) { + return t('{n} reachable · {b} bundled', { n: mods.length - bundled, b: bundled }); + } + return t('all reachable'); }); const adminGeneratedAt = computed<string>(() => agoLabel(preflight.value?.generatedAt)); diff --git a/apps/ui/src/i18n/locales/de.json b/apps/ui/src/i18n/locales/de.json index fe09296..d034f8a 100644 --- a/apps/ui/src/i18n/locales/de.json +++ b/apps/ui/src/i18n/locales/de.json @@ -1548,5 +1548,6 @@ "all reachable": "alle erreichbar", "{n} unreachable": "{n} nicht erreichbar", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "Erreichbarkeit jeder Admin-Funktion — der BFF sendet ein GET an den relativen REST-Pfad, den die Funktion tatsächlich aufruft, und meldet, ob er [...] - "Enable on OAP:": "Auf OAP aktivieren:" + "Enable on OAP:": "Auf OAP aktivieren:", + "{n} reachable · {b} bundled": "{n} erreichbar · {b} gebündelt" } diff --git a/apps/ui/src/i18n/locales/en.json b/apps/ui/src/i18n/locales/en.json index 63f9e62..9be9b57 100644 --- a/apps/ui/src/i18n/locales/en.json +++ b/apps/ui/src/i18n/locales/en.json @@ -1548,5 +1548,6 @@ "all reachable": "all reachable", "{n} unreachable": "{n} unreachable", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is th [...] - "Enable on OAP:": "Enable on OAP:" + "Enable on OAP:": "Enable on OAP:", + "{n} reachable · {b} bundled": "{n} reachable · {b} bundled" } diff --git a/apps/ui/src/i18n/locales/es.json b/apps/ui/src/i18n/locales/es.json index 292b594..23778bb 100644 --- a/apps/ui/src/i18n/locales/es.json +++ b/apps/ui/src/i18n/locales/es.json @@ -1548,5 +1548,6 @@ "all reachable": "todos accesibles", "{n} unreachable": "{n} inaccesible(s)", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "Accesibilidad de cada función de administración: el BFF hace un GET a la ruta REST relativa que la función realmente llama e informa si responde. [...] - "Enable on OAP:": "Activar en OAP:" + "Enable on OAP:": "Activar en OAP:", + "{n} reachable · {b} bundled": "{n} accesible(s) · {b} incluido(s)" } diff --git a/apps/ui/src/i18n/locales/fr.json b/apps/ui/src/i18n/locales/fr.json index 5a93b26..5ab140e 100644 --- a/apps/ui/src/i18n/locales/fr.json +++ b/apps/ui/src/i18n/locales/fr.json @@ -1548,5 +1548,6 @@ "all reachable": "tous accessibles", "{n} unreachable": "{n} inaccessible(s)", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "Accessibilité de chaque fonctionnalité d'administration — le BFF envoie un GET sur le chemin REST relatif que la fonctionnalité appelle réellemen [...] - "Enable on OAP:": "Activer sur OAP :" + "Enable on OAP:": "Activer sur OAP :", + "{n} reachable · {b} bundled": "{n} accessible(s) · {b} intégré(s)" } diff --git a/apps/ui/src/i18n/locales/ja.json b/apps/ui/src/i18n/locales/ja.json index 6dd4723..71d57f7 100644 --- a/apps/ui/src/i18n/locales/ja.json +++ b/apps/ui/src/i18n/locales/ja.json @@ -1548,5 +1548,6 @@ "all reachable": "すべて到達可能", "{n} unreachable": "{n} 件が到達不可", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "各管理機能の到達可能性 —— BFF は機能が実際に呼び出す相対 REST パスへ GET し、応答するかどうかを報告します。健全性は設定の有無ではなくライブプローブで判定されます。404 を返すパス(selector が無効、リネーム、またはフォークで欠落)は到達不可とみなされます。下の [...] - "Enable on OAP:": "OAP で有効化:" + "Enable on OAP:": "OAP で有効化:", + "{n} reachable · {b} bundled": "{n} 件が到達可能 · {b} 件がバンドル" } diff --git a/apps/ui/src/i18n/locales/ko.json b/apps/ui/src/i18n/locales/ko.json index 7909e29..40dc171 100644 --- a/apps/ui/src/i18n/locales/ko.json +++ b/apps/ui/src/i18n/locales/ko.json @@ -1548,5 +1548,6 @@ "all reachable": "모두 도달 가능", "{n} unreachable": "{n}개 도달 불가", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "각 관리 기능의 도달 가능성 — BFF가 해당 기능이 실제로 호출하는 상대 REST 경로로 GET 요청을 보내 응답 여부를 보고합니다. 상태는 설정 존재 여부가 아니라 실시간 프로브로 판단합니다. 404를 반환하는 경로(selector 꺼짐, 이름 변경 또는 [...] - "Enable on OAP:": "OAP에서 활성화:" + "Enable on OAP:": "OAP에서 활성화:", + "{n} reachable · {b} bundled": "{n}개 도달 가능 · {b}개 번들" } diff --git a/apps/ui/src/i18n/locales/pt.json b/apps/ui/src/i18n/locales/pt.json index ad09cda..8b65797 100644 --- a/apps/ui/src/i18n/locales/pt.json +++ b/apps/ui/src/i18n/locales/pt.json @@ -1548,5 +1548,6 @@ "all reachable": "todos acessíveis", "{n} unreachable": "{n} inacessível(is)", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "Acessibilidade de cada recurso de administração: o BFF faz um GET no caminho REST relativo que o recurso realmente chama e informa se ele respond [...] - "Enable on OAP:": "Ativar no OAP:" + "Enable on OAP:": "Ativar no OAP:", + "{n} reachable · {b} bundled": "{n} acessível(is) · {b} incluído(s)" } diff --git a/apps/ui/src/i18n/locales/zh-CN.json b/apps/ui/src/i18n/locales/zh-CN.json index a884228..76f2c14 100644 --- a/apps/ui/src/i18n/locales/zh-CN.json +++ b/apps/ui/src/i18n/locales/zh-CN.json @@ -1548,5 +1548,6 @@ "all reachable": "全部可达", "{n} unreachable": "{n} 个不可达", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "每个管理功能的可达性 —— BFF 会向该功能实际调用的相对 REST 路径发起 GET,并报告其是否响应。健康状态取决于实时探测,而非配置存在性:返回 404 的路径(selector 关闭、被重命名或在 fork 版本中缺失)将被视为不可达。下方的“检测到 selector”仅为上游发 [...] - "Enable on OAP:": "在 OAP 上启用:" + "Enable on OAP:": "在 OAP 上启用:", + "{n} reachable · {b} bundled": "{n} 个可达 · {b} 个内置" }
