diff --git a/src/opnsense/mvc/app/views/OPNsense/Diagnostics/traffic.volt b/src/opnsense/mvc/app/views/OPNsense/Diagnostics/traffic.volt index 56e93d23b..f2a141e22 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Diagnostics/traffic.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Diagnostics/traffic.volt @@ -233,6 +233,7 @@ POSSIBILITY OF SUCH DAMAGE. function updateTopTable(data) { let target = $("#rxTopTable > tbody"); let update_stamp = Math.trunc(Date.now() / 1000.0); + let update_stamp_iso = (new Date()).toISOString(); Object.keys(data).forEach(function(intf) { let intf_label = $("#interfaces > option[value="+intf+"]").data('content'); ['in', 'out'].forEach(function(dir) { @@ -240,23 +241,31 @@ POSSIBILITY OF SUCH DAMAGE. let item = data[intf][dir][i]; let tr = target.find("tr[data-address='"+item.address+"']"); if (tr.length === 0) { - tr = $(""); - tr.attr("data-address", item.address); + tr = $(""); + tr.attr("data-address", item.address); // XXX: find matches on tag + tr.data('bps_in', 0).data('bps_out', 0).data('bps_max_in', 0) + .data('bps_max_out', 0).data('total_in', 0).data('total_out', 0); tr.append($("").html(intf_label)); tr.append($("").text(item.address)); tr.append($("").text("0b")); tr.append($("").text("0b")); tr.append($("").text("0b")); tr.append($("").text("0b")); + tr.append($("").text("0b")); + tr.append($("").text("0b")); + tr.append($("")); target.append(tr); } - tr.attr('data-bps_'+dir, item.rate_bits); - tr.attr('data-last_seen', update_stamp); + tr.data('bps_'+dir, item.rate_bits); + tr.data('total_'+ dir, tr.data('total_'+ dir) + item.cumulative_bytes); + tr.data('last_seen', update_stamp); + tr.find('td.last_seen').text(update_stamp_iso); if (parseInt(tr.data('bps_max_'+dir)) < item.rate_bits) { - tr.attr('data-bps_max_'+dir, item.rate_bits); + tr.data('bps_max_'+dir, item.rate_bits); tr.find('td.bps_max_'+dir).text(item.rate); } tr.find('td.bps_'+dir).text(item.rate); + tr.find('td.total_'+dir).text(byteFormat(tr.data('total_'+ dir))); } }); }); @@ -266,17 +275,22 @@ POSSIBILITY OF SUCH DAMAGE. $(this).remove(); } else if (parseInt($(this).data('last_seen')) != update_stamp) { // reset measurements not in this set - $(this).attr('data-bps_in', 0); - $(this).attr('data-bps_out', 0); + $(this).data('bps_in', 0); + $(this).data('bps_out', 0); $(this).find('td.bps_in').text("0b"); $(this).find('td.bps_out').text("0b"); } }); // sort by current top consumer target.find('tr').sort(function(a, b) { - let a_total = +$(a).data('bps_in') + $(a).data('bps_out'); - let b_total = +$(b).data('bps_in') + $(b).data('bps_out'); - return b_total - a_total; + let a_total = parseInt($(a).data('bps_in')) + parseInt($(a).data('bps_out')); + let b_total = parseInt($(b).data('bps_in')) + parseInt($(b).data('bps_out')); + if (b_total == 0 && a_total == 0) { + // sort by age (last seen) + return parseInt($(b).data('last_seen')) - parseInt($(a).data('last_seen')); + } else { + return b_total - a_total; + } }).appendTo(target); } @@ -386,8 +400,8 @@ POSSIBILITY OF SUCH DAMAGE. ajaxGet('/api/diagnostics/traffic/top/' + $("#interfaces").val().join(","), {}, function(data, status){ if (status == 'success') { $( document ).trigger( "updateTrafficTopCharts", [ data ] ); - top_traffic_poller(); updateTopTable(data); + top_traffic_poller(); } else { setTimeout(top_traffic_poller, 2000); } @@ -456,7 +470,7 @@ POSSIBILITY OF SUCH DAMAGE.
-
+
@@ -466,6 +480,9 @@ POSSIBILITY OF SUCH DAMAGE. + + +
{{ lang._('Out (bps)') }} {{ lang._('In max(bps)') }} {{ lang._('Out max(bps)') }}{{ lang._('Total In') }}{{ lang._('Total Out') }}{{ lang._('Timestamp') }}