diff --git a/flexqos.asp b/flexqos.asp index 5f8e28d..cf0d84e 100644 --- a/flexqos.asp +++ b/flexqos.asp @@ -1185,6 +1185,7 @@ function get_data() { success: function(response) { redraw(); draw_conntrack_table(); + check_bandwidth_flow(); timedEvent = setTimeout("get_data();", refreshRate * 1000); } }); @@ -1297,6 +1298,56 @@ function initialize_charts() { line_obj_ul=line_obj; // actually draws the chart on the page } // initialize_charts +function getFwBase () { + /* "3.0.0.6" → 3006 */ + const ver = document.getElementById('firmver')?.value || ''; + return parseInt(ver.replace(/\./g, ''), 10); // NaN if blank +} + +window.addEventListener('DOMContentLoaded', () => { + const fwBase = getFwBase(); + + const noflowMsg = (fwBase === 3006) + ? 'Adaptive QoS is not functioning correctly on ' + + 'BE-series routers due to a known ASUS / Trend Micro issue. ' + + 'Once ASUS resolves this, FlexQoS should work as expected.' + : 'Adaptive QoS appears to be malfunctioning. ' + + 'FlexQoS cannot apply its rules while the underlying QoS system is malfunctioning.'; + + const span = document.getElementById('noflow_msg'); + if (span) span.innerHTML = noflowMsg; +}); + +/* consider anything below this many *kilobits* per second “idle” */ +const NOFLOW_CUTOFF_KBPS = 1; // feel free to raise/lower +const NOFLOW_THRESHOLD = 5; // 5 × 3s refresh about 15 seconds + +let noFlowCounter = 0; + +function kbpsFromRateString(str) { + if (!str) return 0; + if (str.includes("Mbit")) return parseFloat(str) * 1000; + if (str.includes("Kbit")) return parseFloat(str); + return parseFloat(str) / 1000; +} + +function check_bandwidth_flow () { + let dlRate = 0, ulRate = 0; + + for (const e of tcdata_lan_array) dlRate += kbpsFromRateString(e[2]); + for (const e of tcdata_wan_array) ulRate += kbpsFromRateString(e[2]); + + if (dlRate < NOFLOW_CUTOFF_KBPS && ulRate < NOFLOW_CUTOFF_KBPS) { + noFlowCounter++; + } else { + noFlowCounter = 0; + } + + const warn = document.getElementById('noflow_notice'); + warn.style.display = (noFlowCounter >= NOFLOW_THRESHOLD) ? 'block' + : 'none'; +} + function change_chart_scale(input) { var chart_scale = cookie.get('flexqos_rate_graph_scale'); if ( input == null ) { @@ -2743,7 +2794,7 @@ function DelCookie(cookiename){