mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
improve efficiency of devices/ports/, add some caching, fix db profiling.
git-svn-id: http://www.observium.org/svn/observer/trunk@2349 61d68cd4-352d-0410-923a-c4978735b2b8
This commit is contained in:
@ -250,6 +250,7 @@ function generate_port_link($args, $text = NULL, $type = NULL)
|
|||||||
if (!isset($args['graph_type'])) { $args['graph_type'] = 'port_bits'; }
|
if (!isset($args['graph_type'])) { $args['graph_type'] = 'port_bits'; }
|
||||||
|
|
||||||
$class = ifclass($args['ifOperStatus'], $args['ifAdminStatus']);
|
$class = ifclass($args['ifOperStatus'], $args['ifAdminStatus']);
|
||||||
|
|
||||||
if (!isset($args['hostname'])) { $args = array_merge($args, device_by_id_cache($args['device_id'])); }
|
if (!isset($args['hostname'])) { $args = array_merge($args, device_by_id_cache($args['device_id'])); }
|
||||||
|
|
||||||
$content = "<div class=list-large>".$args['hostname']." - " . fixifName($args['label']) . "</div>";
|
$content = "<div class=list-large>".$args['hostname']." - " . fixifName($args['label']) . "</div>";
|
||||||
@ -273,7 +274,7 @@ function generate_port_link($args, $text = NULL, $type = NULL)
|
|||||||
|
|
||||||
$url = generate_port_url($args);
|
$url = generate_port_url($args);
|
||||||
|
|
||||||
if (port_permitted($args['interface_id'])) {
|
if (port_permitted($args['interface_id'], $args['device_id'])) {
|
||||||
return overlib_link($url, $text, $content, $class);
|
return overlib_link($url, $text, $content, $class);
|
||||||
} else {
|
} else {
|
||||||
return fixifName($text);
|
return fixifName($text);
|
||||||
|
@ -225,7 +225,7 @@ foreach(dbFetchRows("SELECT * FROM `ports_stack` WHERE `interface_id_low` = ? an
|
|||||||
{
|
{
|
||||||
if($higher_if['interface_id_high'])
|
if($higher_if['interface_id_high'])
|
||||||
{
|
{
|
||||||
$this_port = get_port_by_ifIndex($device, $higher_if['interface_id_high']);
|
$this_port = get_port_by_index_cache($device['device_id'], $higher_if['interface_id_high']);
|
||||||
echo("$br<img src='images/16/arrow_divide.png' align=absmiddle> <strong>" . generate_port_link($this_port) . "</strong>");
|
echo("$br<img src='images/16/arrow_divide.png' align=absmiddle> <strong>" . generate_port_link($this_port) . "</strong>");
|
||||||
$br = "<br />";
|
$br = "<br />";
|
||||||
}
|
}
|
||||||
@ -235,13 +235,14 @@ foreach(dbFetchRows("SELECT * FROM `ports_stack` WHERE `interface_id_high` = ? a
|
|||||||
{
|
{
|
||||||
if($lower_if['interface_id_low'])
|
if($lower_if['interface_id_low'])
|
||||||
{
|
{
|
||||||
$this_port = get_port_by_ifIndex($device, $lower_if['interface_id_low']);
|
$this_port = get_port_by_index_cache($device['device_id'], $lower_if['interface_id_low']);
|
||||||
echo("$br<img src='images/16/arrow_join.png' align=absmiddle> <strong>" . generate_port_link($this_port) . "</strong>");
|
echo("$br<img src='images/16/arrow_join.png' align=absmiddle> <strong>" . generate_port_link($this_port) . "</strong>");
|
||||||
$br = "<br />";
|
$br = "<br />";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unset($int_links, $int_links_v6, $int_links_v4, $int_links_phys, $br);
|
unset($int_links, $int_links_v6, $int_links_v4, $int_links_phys, $br);
|
||||||
|
|
||||||
echo("</td></tr>");
|
echo("</td></tr>");
|
||||||
|
@ -142,7 +142,11 @@ echo('</a>. Copyright © 2006-'. date("Y"). ' by Adam Armstrong. All rights
|
|||||||
|
|
||||||
if ($config['page_gen'])
|
if ($config['page_gen'])
|
||||||
{
|
{
|
||||||
echo('<br />MySQL: Cell '.($db_stats['fetchcell']+0).'/'.($db_stats['fetchcell_sec']+0).'s Row '.($db_stats['fetchrow']+0).'/'.($db_stats['fetchrow_sec']+0).'s Rows '.($db_stats['fetchrows']+0).'/'.($db_stats['fetchrows_sec']+0).'s Column '.($db_stats['fetchcol']+0).'/'.($db_stats['fetchcol_sec']+0));
|
echo('<br />MySQL: Cell '.($db_stats['fetchcell']+0).'/'.round($db_stats['fetchcell_sec']+0,2).'s'.
|
||||||
|
' Row '.($db_stats['fetchrow']+0). '/'.round($db_stats['fetchrow_sec']+0,2).'s'.
|
||||||
|
' Rows '.($db_stats['fetchrows']+0).'/'.round($db_stats['fetchrows_sec']+0,2).'s'.
|
||||||
|
' Column '.($db_stats['fetchcol']+0). '/'.round($db_stats['fetchcol_sec']+0,2).'s');
|
||||||
|
|
||||||
echo('<br />Generated in ' . $gentime . ' seconds.');
|
echo('<br />Generated in ' . $gentime . ' seconds.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +88,20 @@ if ($_GET['optc'] == thumbs)
|
|||||||
if ($_GET['opta'] == "details") { $port_details = 1; }
|
if ($_GET['opta'] == "details") { $port_details = 1; }
|
||||||
echo("<div style='margin: 0px;'><table border=0 cellspacing=0 cellpadding=5 width=100%>");
|
echo("<div style='margin: 0px;'><table border=0 cellspacing=0 cellpadding=5 width=100%>");
|
||||||
$i = "1";
|
$i = "1";
|
||||||
foreach (dbFetchRows("SELECT * FROM `ports` WHERE `device_id` = ? AND `deleted` = '0' ORDER BY `ifIndex` ASC", array($device['device_id'])) as $interface)
|
|
||||||
|
global $port_cache;
|
||||||
|
global $port_index_cache;
|
||||||
|
|
||||||
|
$ports = dbFetchRows("SELECT * FROM `ports` WHERE `device_id` = ? AND `deleted` = '0' ORDER BY `ifIndex` ASC", array($device['device_id']));
|
||||||
|
### As we've dragged the whole database, lets pre-populate our caches :)
|
||||||
|
### FIXME - we should probably split the fetching of link/stack/etc into functions and cache them here too to cut down on single row queries.
|
||||||
|
foreach($ports as $port)
|
||||||
|
{
|
||||||
|
$port_cache[$port['interface_id']] = $port;
|
||||||
|
$port_index_cache[$port['device_id']][$port['ifIndex']] = $port;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($ports as $interface)
|
||||||
{
|
{
|
||||||
include("includes/print-interface.inc.php");
|
include("includes/print-interface.inc.php");
|
||||||
$i++;
|
$i++;
|
||||||
|
@ -48,6 +48,42 @@ function get_sensor_rrd($device, $sensor)
|
|||||||
return($rrd_file);
|
return($rrd_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_port_by_index_cache($device_id, $ifIndex)
|
||||||
|
{
|
||||||
|
global $port_index_cache;
|
||||||
|
|
||||||
|
if (isset($port_index_cache[$device_id][$ifIndex]) && is_array($port_index_cache[$device_id][$ifIndex]))
|
||||||
|
{
|
||||||
|
$port = $port_index_cache[$device_id][$ifIndex];
|
||||||
|
} else {
|
||||||
|
$port = get_port_by_ifIndex($device_id, $ifIndex);
|
||||||
|
$port_index_cache[$device_id][$ifIndex] = $port;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $port;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_port_by_ifIndex($device_id, $ifIndex)
|
||||||
|
{
|
||||||
|
return dbFetchRow("SELECT * FROM `ports` WHERE `device_id` = ? AND `ifIndex` = ?", array($device_id, $ifIndex));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function port_by_id_cache($port_id)
|
||||||
|
{
|
||||||
|
global $port_cache;
|
||||||
|
|
||||||
|
if (isset($port_cache[$port_id]) && is_array($port_cache[$device_id]))
|
||||||
|
{
|
||||||
|
$port = $port_cache[$port_id];
|
||||||
|
} else {
|
||||||
|
$port = dbFetchRow("SELECT * FROM `ports` WHERE `interface_id` = ?", array($port_id));
|
||||||
|
$port_cache[$port_id] = $port;
|
||||||
|
}
|
||||||
|
return $port;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function get_port_by_id($port_id)
|
function get_port_by_id($port_id)
|
||||||
{
|
{
|
||||||
if (is_numeric($port_id))
|
if (is_numeric($port_id))
|
||||||
@ -184,11 +220,6 @@ function getifindexbyid($id)
|
|||||||
return dbFetchCell("SELECT `ifIndex` FROM `ports` WHERE `interface_id` = ?", array($id));
|
return dbFetchCell("SELECT `ifIndex` FROM `ports` WHERE `interface_id` = ?", array($id));
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_port_by_ifIndex($device, $ifIndex)
|
|
||||||
{
|
|
||||||
return dbFetchRow("SELECT * FROM `ports` WHERE `device_id` = ? AND `ifIndex` = ?", array($device['device_id'], $ifIndex));
|
|
||||||
}
|
|
||||||
|
|
||||||
function getifbyid($id)
|
function getifbyid($id)
|
||||||
{
|
{
|
||||||
return dbFetchRow("SELECT * FROM `ports` WHERE `interface_id` = ?", array($id));
|
return dbFetchRow("SELECT * FROM `ports` WHERE `interface_id` = ?", array($id));
|
||||||
|
@ -136,7 +136,10 @@ function dbDelete($table, $where = null, $parameters = array()) {
|
|||||||
* */
|
* */
|
||||||
function dbFetchRows($sql, $parameters = array()) {
|
function dbFetchRows($sql, $parameters = array()) {
|
||||||
global $db_stats;
|
global $db_stats;
|
||||||
|
|
||||||
|
$time_start = microtime(true);
|
||||||
$result = dbQuery($sql, $parameters);
|
$result = dbQuery($sql, $parameters);
|
||||||
|
|
||||||
if(mysql_num_rows($result) > 0) {
|
if(mysql_num_rows($result) > 0) {
|
||||||
$rows = array();
|
$rows = array();
|
||||||
while($row = mysql_fetch_assoc($result)) {
|
while($row = mysql_fetch_assoc($result)) {
|
||||||
@ -146,10 +149,9 @@ function dbFetchRows($sql, $parameters = array()) {
|
|||||||
return $rows;
|
return $rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
$time_start = microtime(true);
|
|
||||||
mysql_free_result($result);
|
mysql_free_result($result);
|
||||||
$time_end = microtime(true);
|
|
||||||
|
|
||||||
|
$time_end = microtime(true);
|
||||||
$db_stats['fetchrows_sec'] += number_format($time_end - $time_start, 8);
|
$db_stats['fetchrows_sec'] += number_format($time_end - $time_start, 8);
|
||||||
$db_stats['fetchrows']++;
|
$db_stats['fetchrows']++;
|
||||||
|
|
||||||
@ -181,11 +183,9 @@ function dbFetch($sql, $parameters = array()) {
|
|||||||
* */
|
* */
|
||||||
function dbFetchRow($sql = null, $parameters = array()) {
|
function dbFetchRow($sql = null, $parameters = array()) {
|
||||||
global $db_stats;
|
global $db_stats;
|
||||||
$time_start = microtime(true);
|
|
||||||
|
|
||||||
|
$time_start = microtime(true);
|
||||||
$result = dbQuery($sql, $parameters);
|
$result = dbQuery($sql, $parameters);
|
||||||
$time_start = microtime(true);
|
|
||||||
|
|
||||||
if($result) {
|
if($result) {
|
||||||
$row = mysql_fetch_assoc($result);
|
$row = mysql_fetch_assoc($result);
|
||||||
mysql_free_result($result);
|
mysql_free_result($result);
|
||||||
@ -198,6 +198,8 @@ function dbFetchRow($sql = null, $parameters = array()) {
|
|||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
$time_start = microtime(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -206,7 +208,6 @@ function dbFetchRow($sql = null, $parameters = array()) {
|
|||||||
function dbFetchCell($sql, $parameters = array()) {
|
function dbFetchCell($sql, $parameters = array()) {
|
||||||
global $db_stats;
|
global $db_stats;
|
||||||
$time_start = microtime(true);
|
$time_start = microtime(true);
|
||||||
|
|
||||||
$row = dbFetchRow($sql, $parameters);
|
$row = dbFetchRow($sql, $parameters);
|
||||||
if($row) {
|
if($row) {
|
||||||
return array_shift($row); // shift first field off first row
|
return array_shift($row); // shift first field off first row
|
||||||
|
Reference in New Issue
Block a user