svrnty-hermes-webui-plugin/static/cortex-os/runtime-health/runtime_health.js

131 lines
4.1 KiB
JavaScript

(function () {
"use strict";
var endpoint = "/api/cortex-os/runtime-health";
var states = ["healthy", "degraded", "unavailable", "unknown", "loading", "error", "redacted"];
if (window.__cortexOsRuntimeHealthLoaded) {
return;
}
window.__cortexOsRuntimeHealthLoaded = true;
function ensurePanel() {
var panel = document.querySelector("[data-cortex-os-runtime-health]");
if (panel) {
return panel;
}
panel = document.createElement("section");
panel.className = "cortex-os-runtime-health";
panel.setAttribute("data-cortex-os-runtime-health", "true");
panel.setAttribute("data-state", "loading");
var title = document.createElement("h2");
title.setAttribute("data-role", "headline");
title.textContent = "Cortex OS Runtime Health";
var badge = document.createElement("span");
badge.className = "cortex-os-runtime-health__badge";
badge.setAttribute("data-role", "status");
badge.textContent = "loading";
var summary = document.createElement("p");
summary.className = "cortex-os-runtime-health__summary";
summary.setAttribute("data-role", "summary");
summary.textContent = "Checking Runtime Health.";
var list = document.createElement("dl");
list.className = "cortex-os-runtime-health__signals";
list.setAttribute("data-role", "signals");
panel.appendChild(title);
panel.appendChild(badge);
panel.appendChild(summary);
panel.appendChild(list);
var target = document.querySelector("main.main");
if (!target) {
return panel;
}
target.appendChild(panel);
return panel;
}
function setState(panel, state, headline, detail, signals) {
var nextState = states.indexOf(state) >= 0 ? state : "unknown";
panel.setAttribute("data-state", nextState);
panel.querySelector("[data-role='headline']").textContent = headline || "Runtime Health";
panel.querySelector("[data-role='status']").textContent = nextState;
panel.querySelector("[data-role='summary']").textContent = detail || "redacted";
renderSignals(panel.querySelector("[data-role='signals']"), signals || []);
}
function renderSignals(list, signals) {
list.textContent = "";
signals.slice(0, 3).forEach(function (signal) {
var name = document.createElement("dt");
var value = document.createElement("dd");
name.textContent = signal.signal_id || "redacted";
value.textContent = signal.state || "unknown";
if (signal.summary) {
value.setAttribute("title", signal.summary);
}
list.appendChild(name);
list.appendChild(value);
});
}
function renderPayload(panel, payload) {
if (!payload || payload.ok !== true || !payload.result) {
setState(panel, "error", "Runtime Health is unavailable.", "Runtime Health is unavailable.", []);
return;
}
var displaySummary = payload.result.display_summary || {};
setState(
panel,
payload.result.status,
displaySummary.headline,
displaySummary.detail,
payload.result.signals,
);
}
function loadRuntimeHealth() {
var panel = ensurePanel();
setState(panel, "loading", "Cortex OS Runtime Health", "Checking Runtime Health.", []);
fetch(endpoint, {
method: "GET",
headers: { Accept: "application/json" },
credentials: "same-origin",
cache: "no-store"
})
.then(function (response) {
if (!response.ok) {
throw new Error("runtime-health-unavailable");
}
return response.json();
})
.then(function (payload) {
renderPayload(panel, payload);
})
.catch(function () {
setState(panel, "error", "Runtime Health is unavailable.", "Runtime Health is unavailable.", []);
});
}
function handlePanelSwitch(event) {
var detail = (event && event.detail) || {};
if (detail.name === "cortex-os") {
loadRuntimeHealth();
}
}
window.addEventListener("svrnty:panel-switch", handlePanelSwitch);
var main = document.querySelector("main.main");
if (main && main.classList.contains("svrnty-showing-cortex-os")) {
loadRuntimeHealth();
}
})();