From 6d9d45d2e350f851a7091e88444e623424081e4e Mon Sep 17 00:00:00 2001 From: Robert Chacon Date: Mon, 30 Mar 2026 08:03:13 -0600 Subject: [PATCH] changes --- docs-es/v2.0/configuration-es.md | 2 +- docs/v2.0/configuration.md | 2 +- .../js_build/src/config_network.js | 26 +- .../src/node_manager/js_build/src/index.js | 1 - .../static2/config_integration.html | 96 ++++--- .../src/node_manager/static2/config_lts.html | 86 +++--- .../node_manager/static2/config_network.html | 38 ++- .../node_manager/static2/config_netzur.html | 25 +- .../static2/config_powercode.html | 25 +- .../node_manager/static2/config_sonar.html | 25 +- .../node_manager/static2/config_splynx.html | 25 +- .../node_manager/static2/config_tuning.html | 117 ++++---- .../src/node_manager/static2/config_uisp.html | 255 ++++++++++-------- .../src/node_manager/static2/config_visp.html | 25 +- .../node_manager/static2/config_wispgate.html | 24 +- .../node_manager/static2/ethernet_caps.html | 95 +++---- .../src/node_manager/static2/node_manager.css | 26 ++ 17 files changed, 558 insertions(+), 335 deletions(-) diff --git a/docs-es/v2.0/configuration-es.md b/docs-es/v2.0/configuration-es.md index ed5b9e17..89c7b907 100644 --- a/docs-es/v2.0/configuration-es.md +++ b/docs-es/v2.0/configuration-es.md @@ -25,7 +25,7 @@ Para la mayoría de operadores: La mayoría de cambios operativos diarios se realizan en la WebUI (`http://tu_ip_del_shaper:9123/config_general.html`). -Las versiones actuales usan paneles compartidos de configuración en las páginas General, RTT, Queues, TreeGuard, Network Mode, IP Ranges, Flow Tracking y Shaped Devices para que los ajustes del nodo y la afinación operativa sigan la misma presentación visual que el resto de Node Manager. La página de TreeGuard ahora comienza con un resumen del comportamiento actual en lugar de un banner permanente de advertencia. +Las versiones actuales usan paneles compartidos de configuración en las páginas General, RTT, Queues, TreeGuard, Network Mode, valores por defecto de integración, Network Layout, Insight, páginas de integración por proveedor, IP Ranges, Flow Tracking y Shaped Devices para que los ajustes del nodo y la afinación operativa sigan la misma presentación visual que el resto de Node Manager. La página de TreeGuard comienza con un resumen del comportamiento actual en lugar de un banner permanente de advertencia. ### Dónde en la WebUI diff --git a/docs/v2.0/configuration.md b/docs/v2.0/configuration.md index 2e7ceef8..03c57788 100644 --- a/docs/v2.0/configuration.md +++ b/docs/v2.0/configuration.md @@ -27,7 +27,7 @@ For most operators: Most day-to-day LibreQoS configuration is handled in WebUI (`http://your_shaper_ip:9123/config_general.html`). -Current builds use shared configuration panels on the General, RTT, Queues, TreeGuard, Network Mode, IP Ranges, Flow Tracking, and Shaped Devices pages so node settings and operational tuning follow the same surface styling as the rest of Node Manager. The TreeGuard page now starts with a live behavior summary rather than a permanent warning banner. +Current builds use shared configuration panels on the General, RTT, Queues, TreeGuard, Network Mode, Integration Defaults, Network Layout, Insight, provider-specific integration pages, IP Ranges, Flow Tracking, and Shaped Devices pages so node settings and operational tuning follow the same surface styling as the rest of Node Manager. The TreeGuard page starts with a live behavior summary rather than a permanent warning banner. ### Where in WebUI diff --git a/src/rust/lqosd/src/node_manager/js_build/src/config_network.js b/src/rust/lqosd/src/node_manager/js_build/src/config_network.js index 24518684..a4da1ac8 100644 --- a/src/rust/lqosd/src/node_manager/js_build/src/config_network.js +++ b/src/rust/lqosd/src/node_manager/js_build/src/config_network.js @@ -34,25 +34,25 @@ function applyEditorLockState() { } function renderNetworkNode(level, depth) { - let html = `
`; + let html = `
`; html += `
`; for (const [key, value] of Object.entries(level)) { const isVirtual = value && value.virtual === true; const actionAttrs = editorButtonAttrs(); // Node header with actions - html += `
`; - html += `
${key}${isVirtual ? ' Virtual' : ''}
`; - html += `
`; + html += `
`; + html += `
${key}${isVirtual ? ' Virtual' : ''}
`; + html += `
`; if (depth > 0) { - html += ``; } - html += ``; - html += ``; html += `
`; // Node details - html += `
`; - html += `Download: ${value.downloadBandwidthMbps} Mbps`; - html += ``; - html += `Upload: ${value.uploadBandwidthMbps} Mbps`; - html += ``; html += `
`; @@ -84,7 +84,7 @@ function renderNetworkNode(level, depth) { function renderNetwork() { if (!network_json || Object.keys(network_json).length === 0) { - $("#netjson").html(`
No network nodes found. Add one to get started!
`); + $("#netjson").html(`
No network nodes found. Add one to get started.
`); return; } $("#netjson").html(renderNetworkNode(network_json, 0)); diff --git a/src/rust/lqosd/src/node_manager/js_build/src/index.js b/src/rust/lqosd/src/node_manager/js_build/src/index.js index 6cea9f2a..8672d76c 100644 --- a/src/rust/lqosd/src/node_manager/js_build/src/index.js +++ b/src/rust/lqosd/src/node_manager/js_build/src/index.js @@ -84,7 +84,6 @@ const defaultLayout = { { tag: "treeguardControlLoop", size: 4 }, { tag: "treeguardStateMix", size: 4 }, { tag: "treeguardDecisionImpact", size: 4 }, - { tag: "treeguardControls", size: 12 }, { tag: "treeguardActivity", size: 12 } ] }, diff --git a/src/rust/lqosd/src/node_manager/static2/config_integration.html b/src/rust/lqosd/src/node_manager/static2/config_integration.html index e4df2235..9669e5ff 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_integration.html +++ b/src/rust/lqosd/src/node_manager/static2/config_integration.html @@ -1,45 +1,71 @@ -
-
-
-
-
- - -
Replace IP addresses with circuit names in network.json
+
+
+ + +
+
+
+
Integration Defaults
+
Set import behavior shared across integrations, including naming, overwrite policy, queue-refresh timing, and bandwidth adjustments.
+
-
- - -
Force overwrite of network.json on every update
-
+
+
+
+
Import Behavior
+
Control how imported topology and subscriber metadata are written into LibreQoS state files.
-
- - -
Use `mikrotikDHCPRouterList.csv` to map IPv4 subscribers to Mikrotik-advertised IPv6 prefixes
-
+
+ + +
Replace IP addresses with circuit names in network.json.
+
-
- - -
How frequently to refresh queue data from the integration
-
+
+ + +
Force overwrite of network.json on every update.
+
-
- - -
Enter one circuit ID per line to promote to root nodes
-
+
+ + +
Use mikrotikDHCPRouterList.csv to map IPv4 subscribers to Mikrotik-advertised IPv6 prefixes.
+
-
- - -
Multiplier applied to client bandwidth values (1.0 = 100%)
-
+
+ + +
How frequently to refresh queue data from the integration.
+
+
+
+
+
+
Promotion and Scaling
+
Promote selected circuits to the root and adjust imported subscriber bandwidth values before shaping.
+ +
+ + +
Enter one circuit ID per line to promote to root nodes.
+
+ +
+ + +
Multiplier applied to client bandwidth values. 1.0 means no adjustment.
+
+
+
+
+
+ +
- -
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/config_lts.html b/src/rust/lqosd/src/node_manager/static2/config_lts.html index 1a473ec6..52d5ddb1 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_lts.html +++ b/src/rust/lqosd/src/node_manager/static2/config_lts.html @@ -1,40 +1,66 @@ -
-
-
-
-
- - -
Enable collection of Insight performance data
+
+
+ + +
+
+
+
Insight
+
Control Insight statistics collection, licensing, and optional self-hosted endpoint settings.
+
-
- - -
How frequently to aggregate statistics into Insight records
-
+
+
+
+
Collection and License
+
Enable Insight data gathering and define the cadence used for aggregation and reporting.
-
- - -
License key for LibreQoS Insight (if applicable)
-
+
+ + +
Enable collection of Insight performance data.
+
-
- - -
How frequently to query UISP for updates (set 0 to disable)
-
+
+ + +
How frequently to aggregate statistics into Insight records.
+
-
- - -
URL for a self-hosted Insight server (leave blank for default)
-
+
+ + +
License key for LibreQoS Insight, when applicable.
+
+
+
+
+
+
Endpoints and Reporting
+
Set reporting cadence for UISP synchronization and optionally point LibreQoS at a self-hosted Insight service.
+ +
+ + +
How frequently to query UISP for updates. Set 0 to disable.
+
+ +
+ + +
URL for a self-hosted Insight server. Leave blank to use the default service.
+
+
+
+
+
+ +
- -
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/config_network.html b/src/rust/lqosd/src/node_manager/static2/config_network.html index 09f32421..4c37380b 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_network.html +++ b/src/rust/lqosd/src/node_manager/static2/config_network.html @@ -1,16 +1,28 @@ -
-
-
- -
-
-
-
- -
-
+
+
+ +
+
+
+
Network Layout
+
Review the shaping hierarchy, rename or promote nodes, and adjust per-node rates before saving network.json.
+
+
+ + + +
+ +
+ +
+
Topology Editor
+
Node cards show hierarchy, configured rates, virtualization state, and the actions available for each branch.
+
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/config_netzur.html b/src/rust/lqosd/src/node_manager/static2/config_netzur.html index 5fd9afad..917e1cbe 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_netzur.html +++ b/src/rust/lqosd/src/node_manager/static2/config_netzur.html @@ -1,7 +1,16 @@ -
-
-
-
+
+
+ + +
+
+
+
Netzur Integration
+
Configure API access and timeout behavior for automated imports from Netzur CRM.
+
+
+ +
@@ -26,8 +35,12 @@
Adjust only if the API routinely needs more than 60 seconds
+
+
+ +
- -
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/config_powercode.html b/src/rust/lqosd/src/node_manager/static2/config_powercode.html index 514a37b2..30218129 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_powercode.html +++ b/src/rust/lqosd/src/node_manager/static2/config_powercode.html @@ -1,7 +1,16 @@ -
-
-
-
+
+
+ + +
+
+
+
Powercode Integration
+
Configure authentication and endpoint details for automated imports from Powercode.
+
+
+ +
@@ -20,9 +29,13 @@
Base URL for Powercode API (e.g. https://your-powercode.com)
+
+
+ +
- -
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/config_sonar.html b/src/rust/lqosd/src/node_manager/static2/config_sonar.html index 975ef71c..ee828ee8 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_sonar.html +++ b/src/rust/lqosd/src/node_manager/static2/config_sonar.html @@ -1,7 +1,16 @@ -
-
-
-
+
+
+ + +
+
+
+
Sonar Integration
+
Configure Sonar API access plus the SNMP and model metadata LibreQoS uses for wireless device enrichment.
+
+
+ +
@@ -44,9 +53,13 @@
Comma-separated list of active status IDs
+
+
+ +
- -
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/config_splynx.html b/src/rust/lqosd/src/node_manager/static2/config_splynx.html index 6dc2123a..a2799946 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_splynx.html +++ b/src/rust/lqosd/src/node_manager/static2/config_splynx.html @@ -1,7 +1,16 @@ -
-
-
-
+
+
+ + +
+
+
+
Splynx Integration
+
Connect LibreQoS to Splynx and choose how much hierarchy should be imported into the shaping tree.
+
+
+ +
@@ -37,8 +46,12 @@
Select the topology strategy for network hierarchy. AP Only provides the best balance of performance and structure.
+
+
+ +
- -
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/config_tuning.html b/src/rust/lqosd/src/node_manager/static2/config_tuning.html index a436ae2a..24f803ed 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_tuning.html +++ b/src/rust/lqosd/src/node_manager/static2/config_tuning.html @@ -1,59 +1,86 @@ -
-
-
- -
-
- - -
Disables the irq_balance system service
+
+
+ + +
+
+
+
System Tuning
+
Adjust IRQ handling, kernel packet budgets, and NIC offload behavior on systems that need manual tuning.
+
-
- - -
Time budget for network device processing in microseconds
+ -
- - -
Packet budget for network device processing
-
+
+
+
+
Interrupts and Budgets
+
Control how aggressively the host services NIC interrupts and packet processing.
-
- - -
Receive side polling frequency in microseconds
-
+
+ + +
Disables the irq_balance system service.
+
-
- - -
Transmit side polling frequency in microseconds
-
+
+ + +
Time budget for network device processing in microseconds.
+
-
- - -
+
+ + +
Packet budget for network device processing.
+
-
- - -
+
+ + +
Receive-side polling frequency in microseconds.
+
-
- - -
Comma-separated list of offload features to disable (e.g. gso,tso,lro)
-
+
+ + +
Transmit-side polling frequency in microseconds.
+
+
+
+
+
+
Offload Controls
+
Disable hardware features that interfere with troubleshooting or expected shaping behavior.
+ +
+ + +
+ +
+ + +
+ +
+ + +
Comma-separated list of offload features to disable, for example gso,tso,lro.
+
+
+
+
+
+ +
- -
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/config_uisp.html b/src/rust/lqosd/src/node_manager/static2/config_uisp.html index 6485e16f..77b96855 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_uisp.html +++ b/src/rust/lqosd/src/node_manager/static2/config_uisp.html @@ -1,133 +1,170 @@ -
-
-
-
-
- - -
Enable integration with UISP billing system
+
+
+ + +
+
+
+
UISP Integration
+
Connect to UISP, choose import strategy, and control how topology, suspended accounts, capacity, and site overrides are handled.
+
-
- - -
UISP API token for authentication
-
+
+
+
+
Connection
+
Define API access, default site scope, and transport/security behavior.
-
- - -
Base URL for UISP API (e.g. https://your-uisp.com)
-
+
+ + +
Enable integration with UISP.
+
-
- - -
Site identifier in UISP
-
+
+ + +
UISP API token for authentication.
+
-
- - -
Select the topology strategy for network hierarchy
-
+
+ + +
Base URL for the UISP API, for example https://your-uisp.com.
+
-
- - -
Select how to handle suspended customer accounts
-
+
+ + +
Optional site identifier in UISP.
+
-
- - -
Capacity factor for Airmax devices
-
+
+ + +
Enable IPv6 enrichment with Mikrotik devices.
+
-
- - -
Capacity factor for LTU devices
-
+
+ + +
Disable SSL certificate validation. Use only for testing or known self-signed environments.
+
+
+
-
- - -
Enable IPv6 support with Mikrotik devices
-
+
+
+
Strategy and Capacity
+
Choose the imported hierarchy depth and how LibreQoS should interpret suspended accounts and device capacity.
-
- - -
Multiplier for bandwidth overhead calculations
-
+
+ + +
Select the topology strategy for network hierarchy.
+
-
- - -
Multiplier for commit bandwidth calculations
-
+
+ + +
Select how to handle suspended customer accounts.
+
-
- - -
Treat PTMP devices as parent nodes
-
+
+ + +
Capacity factor for Airmax devices.
+
-
- - -
Ignore capacity calculations from UISP
-
+
+ + +
Capacity factor for LTU devices.
+
-
- - -
Disable SSL certificate validation (not recommended)
-
+
+ + +
Multiplier for bandwidth overhead calculations.
+
-
- - -
Comma-separated list of site IDs to exclude from synchronization
-
+
+ + +
Multiplier for commit bandwidth calculations.
+
-
- - -
Comma-separated list of site IDs to consolidate under a single parent
-
+
+ + +
Treat PTMP devices as parent nodes.
+
-
- - -
Comma-separated list of CPE exceptions in "cpe:parent" format
-
+
+ + +
Ignore capacity calculations from UISP.
+
+
+
-
- - -
Enable site squashing functionality
-
+
+
+
Site and CPE Overrides
+
Fine-tune how specific sites and CPEs are excluded, squashed, or reassigned during synchronization.
-
- - -
Comma-separated list of site IDs that should not be squashed
-
+
+
+ + +
Comma-separated list of site IDs to exclude from synchronization.
+
+
+ + +
Comma-separated list of site IDs to consolidate under a single parent.
+
+ +
+ + +
Comma-separated list of CPE exceptions in cpe:parent format.
+
+ +
+ + +
Comma-separated list of site IDs that should not be squashed.
+
+ +
+
+ + +
Enable site squashing functionality.
+
+
+
+
+
+
+
+ +
- -
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/config_visp.html b/src/rust/lqosd/src/node_manager/static2/config_visp.html index c0d3877c..efc7738e 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_visp.html +++ b/src/rust/lqosd/src/node_manager/static2/config_visp.html @@ -1,7 +1,16 @@ -
-
-
-
+
+
+ + +
+
+
+
VISP Integration
+
Configure GraphQL UBO API access, tenant selection, and optional online-user enrichment from VISP.
+
+
+ +
@@ -46,8 +55,12 @@
Used to enrich IPs via online RADIUS sessions if VISP is missing static IPs
+
+
+ +
- -
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/config_wispgate.html b/src/rust/lqosd/src/node_manager/static2/config_wispgate.html index 1703db76..c99ff4c8 100644 --- a/src/rust/lqosd/src/node_manager/static2/config_wispgate.html +++ b/src/rust/lqosd/src/node_manager/static2/config_wispgate.html @@ -1,7 +1,16 @@ -
-
-
-
+
+
+ + +
+
+
+
WispGate Integration
+
Configure API credentials and endpoint details for automated imports from WispGate.
+
+
+ +
@@ -20,10 +29,13 @@
WispGate API URL
+
+
+
- -
+
+
diff --git a/src/rust/lqosd/src/node_manager/static2/ethernet_caps.html b/src/rust/lqosd/src/node_manager/static2/ethernet_caps.html index 9080a1eb..c0501691 100644 --- a/src/rust/lqosd/src/node_manager/static2/ethernet_caps.html +++ b/src/rust/lqosd/src/node_manager/static2/ethernet_caps.html @@ -1,58 +1,51 @@ -
-
-
-
-
-
-
Ethernet Caps
-

Circuits automatically down-rated because detected Ethernet speed was below the requested plan.

-
-
+
+
+
+
+
Ethernet Caps
+
Circuits automatically down-rated because detected Ethernet speed was below the requested plan.
+
+
+
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
-
-
-
-
-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
Loading Ethernet cap data…
-
-
+
+
Loading Ethernet cap data…
+
-
+
diff --git a/src/rust/lqosd/src/node_manager/static2/node_manager.css b/src/rust/lqosd/src/node_manager/static2/node_manager.css index 60d07c97..ccc6ff3e 100644 --- a/src/rust/lqosd/src/node_manager/static2/node_manager.css +++ b/src/rust/lqosd/src/node_manager/static2/node_manager.css @@ -1839,6 +1839,32 @@ table tr td a { color: var(--bs-secondary-color) !important; } +.lqos-config-network-editor { + display: grid; + gap: 0.9rem; +} + +.lqos-config-network-editor .lqos-network-node-card { + background: color-mix(in srgb, var(--lqos-surface-2) 88%, transparent); +} + +.lqos-config-network-editor .card-title { + font-size: 1rem; + font-weight: 700; +} + +.lqos-config-network-editor .card-body { + padding: 1rem 1rem 0.95rem; +} + +.lqos-config-network-editor .btn { + white-space: nowrap; +} + +.lqos-config-network-editor .badge { + font-weight: 600; +} + .nav-pills .nav-link { color: var(--bs-secondary-color); }