diff --git a/html/includes/common/top-devices.inc.php b/html/includes/common/top-devices.inc.php new file mode 100644 index 000000000..481cfbcdd --- /dev/null +++ b/html/includes/common/top-devices.inc.php @@ -0,0 +1,125 @@ + + * + * This widget is based on legacy frontpage module created by Paul Gear. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Top devices by traffic + * @author Sergiusz Paprzycki + * @copyright 2015 Sergiusz Paprzycki + * @license GPL + * @package LibreNMS + * @subpackage Widgets + */ + +if( defined('show_settings') || empty($widget_settings) ) { + $common_output[] = ' +
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ '; +} +else { + $interval = $widget_settings['time_interval']; + $interval_seconds = ($interval * 60); + $device_count = $widget_settings['device_count']; + $common_output[] = ' +

Top '.$device_count.' devices (last '.$interval.' minutes)

+ '; + + if (is_admin() || is_read()) { + $query = ' + SELECT *, sum(p.ifInOctets_rate + p.ifOutOctets_rate) as total + FROM ports as p, devices as d + WHERE d.device_id = p.device_id + AND unix_timestamp() - p.poll_time < '.$interval_seconds.' + AND ( p.ifInOctets_rate > 0 + OR p.ifOutOctets_rate > 0 ) + GROUP BY d.device_id + ORDER BY total desc + LIMIT '.$device_count.' + '; + } + else { + $query = ' + SELECT *, sum(p.ifInOctets_rate + p.ifOutOctets_rate) as total + FROM ports as p, devices as d, `devices_perms` AS `P` + WHERE `P`.`user_id` = ? AND `P`.`device_id` = `d`.`device_id` AND + d.device_id = p.device_id + AND unix_timestamp() - p.poll_time < '.$interval_seconds.' + AND ( p.ifInOctets_rate > 0 + OR p.ifOutOctets_rate > 0 ) + GROUP BY d.device_id + ORDER BY total desc + LIMIT '.$device_count.' + '; + } + + $common_output[] = ' +
+ + + + + + + + + '; + + foreach (dbFetchRows($query, array($_SESSION['user_id'])) as $result) { + $common_output[] = ' + + + + + '; + } + $common_output[] = ' + +
DeviceTotal traffic
'.generate_device_link($result, shorthost($result['hostname'])).''.generate_device_link( + $result, + generate_minigraph_image( + $result, $config['time']['day'], + $config['time']['now'], + 'device_bits', + 'no', 150, 21, '&', 'top10'), + array(), 0, 0, 0).' +
+
+ '; +} diff --git a/html/includes/common/top-interfaces.inc.php b/html/includes/common/top-interfaces.inc.php new file mode 100644 index 000000000..f01b07594 --- /dev/null +++ b/html/includes/common/top-interfaces.inc.php @@ -0,0 +1,119 @@ + + * + * This widget is based on legacy frontpage module created by Paul Gear. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Top interfaces by traffic + * @author Sergiusz Paprzycki + * @copyright 2015 Sergiusz Paprzycki + * @license GPL + * @package LibreNMS + * @subpackage Widgets + */ + +if( defined('show_settings') || empty($widget_settings) ) { + $common_output[] = ' +
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ '; +} +else { + $interval = $widget_settings['time_interval']; + $interval_seconds = ($interval * 60); + $interface_count = $widget_settings['interface_count']; + $common_output[] = ' +

Top '.$interface_count.' interfaces (last '.$interval.' minutes)

+ '; + if (is_admin() || is_read()) { + $query = ' + SELECT *, p.ifInOctets_rate + p.ifOutOctets_rate as total + FROM ports as p, devices as d + WHERE d.device_id = p.device_id + AND unix_timestamp() - p.poll_time < '.$interval_seconds.' + AND ( p.ifInOctets_rate > 0 + OR p.ifOutOctets_rate > 0 ) + ORDER BY total desc + LIMIT '.$interface_count.' + '; + } + else { + $query = ' + SELECT *, I.ifInOctets_rate + I.ifOutOctets_rate as total + FROM ports as I, devices as d, + `devices_perms` AS `P`, `ports_perms` AS `PP` + WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `d`.`device_id`) + OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` + AND `I`.`device_id` = `d`.`device_id`)) AND + d.device_id = I.device_id + AND unix_timestamp() - I.poll_time < '.$interval_seconds.' + AND ( I.ifInOctets_rate > 0 + OR I.ifOutOctets_rate > 0 ) + ORDER BY total desc + LIMIT '.$interface_count.' + '; + } + + $common_output[] = ' +
+ + + + + + + + + + '; + + foreach (dbFetchRows($query, array($_SESSION['user_id'])) as $result) { + $common_output[] = ' + + + + + + '; + } + $common_output[] = ' + +
DeviceInterfaceTotal traffic
'.generate_device_link($result, shorthost($result['hostname'])).''.generate_port_link($result).''.generate_port_link($result, generate_port_thumbnail($result)).'
+
+ '; +} diff --git a/sql-schema/071.sql b/sql-schema/071.sql new file mode 100644 index 000000000..1b44ca4f4 --- /dev/null +++ b/sql-schema/071.sql @@ -0,0 +1,2 @@ +INSERT INTO widgets VALUES (NULL, 'Top Devices', 'top-devices', '5,4'); +INSERT INTO widgets VALUES (NULL, 'Top Interfaces', 'top-interfaces', '5,4');