This commit is contained in:
Robert Chacon committed 2026-04-04 17:07:48 -06:00
1 parent a41396ea5a
commit 1b18353062
4 files changed
+19 -7

No files matched your search

+2 -1
View File
@@ -25,7 +25,7 @@ Esta página documenta las vistas clave de la WebUI (Node Manager) y su comporta
- Vista jerárquica de nodos/circuitos desde la perspectiva del shaper.
- Útil para identificar cuellos de botella y patrones de utilización padre/hijo.
- Las páginas de detalle del árbol muestran una ruta tipo breadcrumb, conteos de rama e indicadores de estado para el nodo seleccionado.
- `Node Details` resume el tipo de nodo seleccionado, el tamaño de la rama, las velocidades configuradas y la velocidad efectiva.
- `Node Details` resume las velocidades configuradas del nodo seleccionado, el estado de overrides y la velocidad efectiva.
- `Node Snapshot` ofrece un resumen visual rápido del throughput y el QoO del nodo seleccionado.
- Los circuitos adjuntos se muestran en una tabla dedicada para el nodo seleccionado.
- La columna de IP de circuitos adjuntos mantiene las filas compactas mostrando una dirección inline y colapsando las adicionales como `+X`, mientras la lista completa sigue disponible al pasar el cursor.
@@ -37,6 +37,7 @@ Esta página documenta las vistas clave de la WebUI (Node Manager) y su comporta
- La página del árbol mantiene `Node Details` como una tarjeta compacta de resumen y coloca los editores de override como filas compactas directamente debajo de la tabla de detalles.
- Los nodos de UISP con estrategia `full` también pueden exponer un editor de `Topology Override` en la página del árbol. Las compilaciones actuales soportan solo `Pinned Parent`, usando los candidatos inmediatos detectados aguas arriba del nodo y guardando esa decisión del operador en `lqos_overrides.json`.
- El selector de padre fijado usa `Default upstream parent` cuando no existe un override. Elegir esa opción deja el nodo con el padre seleccionado por la integración.
- En el nodo sintético `Root`, el topology override se muestra como no aplicable en lugar de mostrar una advertencia genérica por falta de `node_id`.
### Site Map
- Mapa operativo plano de sitios y APs usando geodatos importados de nodos.
+2 -1
View File
@@ -25,7 +25,7 @@ This page documents key WebUI (Node Manager) views and operational behavior in t
- Hierarchical topology view of nodes/circuits from the shaper perspective.
- Useful for spotting bottlenecks and parent/child utilization patterns.
- Tree detail pages show a breadcrumb path, branch counts, and status indicators for the selected node.
- `Node Details` summarizes the selected node’s type, branch size, configured rates, and effective rate.
- `Node Details` summarizes the selected node’s configured rates, override state, and effective rate.
- `Node Snapshot` provides a quick visual summary of throughput and QoO for the selected node.
- Attached circuits are shown in a dedicated table for the selected node.
- The attached-circuits IP column keeps rows compact by showing one address inline and collapsing additional addresses as `+X`, with the full list still available on hover.
@@ -37,6 +37,7 @@ This page documents key WebUI (Node Manager) views and operational behavior in t
- The tree page keeps `Node Details` as a compact summary card and places the override editors as compact inline rows directly beneath the details table.
- UISP `full` strategy nodes can also expose a `Topology Override` editor on the tree page. Current builds support `Pinned Parent` only, using the node's detected immediate upstream candidates and storing that operator choice in `lqos_overrides.json`.
- The pinned-parent selector defaults to `Default upstream parent` when no override is set. Choosing that default leaves the node on the integration-selected parent.
- On the synthetic `Root` node, topology override is shown as not applicable rather than as a generic missing-node-ID warning.
### Site Map
- Flat operational map of Sites and APs using imported node geodata.
@@ -947,6 +947,13 @@ function renderTopologyOverrideValue(overrideData) {
wrap.classList.add("lqos-tree-detail-value");
const value = document.createElement("span");
const node = currentNode();
if (node && isSyntheticRootNode(node)) {
value.textContent = "Not applicable for Root";
wrap.appendChild(value);
target.appendChild(wrap);
return;
}
if (!overrideData?.has_override) {
value.textContent = "None";
wrap.appendChild(value);
@@ -1084,11 +1091,8 @@ function renderNodeTopologySettings(node) {
nodeTopologyOverrideState.data?.warnings || [],
"warning",
);
renderAlertMessages(
"nodeTopologyDisabledReason",
nodeTopologyOverrideState.data?.disabled_reason ? [nodeTopologyOverrideState.data.disabled_reason] : [],
"secondary",
);
const disabledReason = isSyntheticRootNode(node) ? null : nodeTopologyOverrideState.data?.disabled_reason;
renderAlertMessages("nodeTopologyDisabledReason", disabledReason ? [disabledReason] : [], "secondary");
maybeSeedTopologyOverrideInputs(nodeTopologyOverrideState.data);
@@ -276,6 +276,12 @@ fn edit_disabled_reason(
));
}
let Some(node_id) = query.node_id.as_deref() else {
if trimmed_name == "Root" {
return Ok(Some(
"The Root node has no upstream parent, so a pinned-parent override does not apply."
.to_string(),
));
}
return Ok(Some(
"This node cannot be edited from the tree because it does not expose a stable node ID."
.to_string(),