diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/TrafficController.php b/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/TrafficController.php index 7fdd444b417..c084c3bc456 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/TrafficController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/TrafficController.php @@ -71,9 +71,11 @@ public function TopAction($interfaces) if (count($iflist) > 0) { $data = (new Backend())->configdpRun('interface show top', [implode(",", $iflist)]); $data = json_decode($data, true); - foreach ($data as $if => $content) { - if (isset($ifmap[$if])) { - $response[$ifmap[$if]] = $content; + if (is_array($data)) { + foreach ($data as $if => $content) { + if (isset($ifmap[$if])) { + $response[$ifmap[$if]] = $content; + } } } } diff --git a/src/opnsense/mvc/app/views/OPNsense/Diagnostics/traffic.volt b/src/opnsense/mvc/app/views/OPNsense/Diagnostics/traffic.volt index 6e32dfd6f67..56e93d23b80 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Diagnostics/traffic.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Diagnostics/traffic.volt @@ -227,6 +227,59 @@ POSSIBILITY OF SUCH DAMAGE. return new Chart(ctx, config); } + /** + * iftop (top talkers) update + */ + function updateTopTable(data) { + let target = $("#rxTopTable > tbody"); + let update_stamp = Math.trunc(Date.now() / 1000.0); + Object.keys(data).forEach(function(intf) { + let intf_label = $("#interfaces > option[value="+intf+"]").data('content'); + ['in', 'out'].forEach(function(dir) { + for (var i=0; i < data[intf][dir].length ; i++) { + let item = data[intf][dir][i]; + let tr = target.find("tr[data-address='"+item.address+"']"); + if (tr.length === 0) { + tr = $("
+ | {{ lang._('Address') }} | +{{ lang._('In (bps)') }} | +{{ lang._('Out (bps)') }} | +{{ lang._('In max(bps)') }} | +{{ lang._('Out max(bps)') }} | +
---|