mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
add generic memory pool poller and add old-cisco-memory-pool-mib support
git-svn-id: http://www.observium.org/svn/observer/trunk@931 61d68cd4-352d-0410-923a-c4978735b2b8
This commit is contained in:
@@ -96,6 +96,8 @@ while ($device = mysql_fetch_array($device_query))
|
||||
|
||||
include("includes/discovery/processors.inc.php");
|
||||
|
||||
include("includes/discovery/mempools.inc.php");
|
||||
|
||||
## Discover IPv4 Addresses
|
||||
include("includes/discovery/ipv4-addresses.inc.php");
|
||||
|
||||
|
32
html/includes/graphs/mempool.inc.php
Normal file
32
html/includes/graphs/mempool.inc.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
include("common.inc.php");
|
||||
|
||||
$rrd_options .= " -u 100 -l 0 -E -b 1024 ";
|
||||
|
||||
$iter = "1";
|
||||
$sql = mysql_query("SELECT * FROM `mempools` AS C, `devices` AS D where C.`mempool_id` = '".mres($_GET['id'])."' AND C.device_id = D.device_id");
|
||||
$rrd_options .= " COMMENT:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Cur\ \ \ \ Max\\\\n";
|
||||
while($mempool = mysql_fetch_array($sql)) {
|
||||
if($iter=="1") {$colour="CC0000";} elseif($iter=="2") {$colour="008C00";} elseif($iter=="3") {$colour="4096EE";
|
||||
} elseif($iter=="4") {$colour="73880A";} elseif($iter=="5") {$colour="D01F3C";} elseif($iter=="6") {$colour="36393D";
|
||||
} elseif($iter=="7") {$colour="FF0084"; unset($iter); }
|
||||
$descr = $entPhysicalName . " " . $mempool['mempool_descr'];
|
||||
$descr = str_replace("Routing Processor", "RP", $descr);
|
||||
$descr = str_replace("Switching Processor", "SP", $descr);
|
||||
$descr = str_replace("Processor", "Proc", $descr);
|
||||
$descr = str_pad($descr, 28);
|
||||
$descr = substr($descr,0,28);
|
||||
$rrd = $config['rrd_dir'] . "/".$mempool['hostname']."/" . safename("mempool-".$mempool['mempool_type']."-".$mempool['mempool_index'].".rrd");
|
||||
$id = $mempool['mempool_type'] . "-" . $mempool['mempool_index'];
|
||||
$rrd_options .= " DEF:mempool" . $id . "free=$rrd:free:AVERAGE ";
|
||||
$rrd_options .= " DEF:mempool" . $id . "used=$rrd:used:AVERAGE ";
|
||||
$rrd_options .= " CDEF:mempool" . $id . "total=mempool" . $id . "used,mempool" . $id . "used,mempool" . $id . "free,+,/,100,* ";
|
||||
$rrd_options .= " LINE1:mempool" . $id . "total#" . $colour . ":'" . $descr . "' ";
|
||||
$rrd_options .= " GPRINT:mempool" . $id . "total:LAST:%3.0lf";
|
||||
$rrd_options .= " GPRINT:mempool" . $id . "total:MAX:%3.0lf\\\l ";
|
||||
$iter++;
|
||||
}
|
||||
|
||||
|
||||
?>
|
@@ -72,8 +72,9 @@ echo("<div style='float:right; width: 50%;'>");
|
||||
|
||||
### Right Pane
|
||||
include("overview/processors.inc.php");
|
||||
include("overview/cemp.inc.php");
|
||||
include("overview/cmp.inc.php");
|
||||
include("overview/mempools.inc.php");
|
||||
#include("overview/cemp.inc.php");
|
||||
#include("overview/cmp.inc.php");
|
||||
include("overview/hrStorage.inc.php");
|
||||
include("overview/temperatures.inc.php");
|
||||
include("overview/fanspeeds.inc.php");
|
||||
|
51
html/pages/device/overview/mempools.inc.php
Normal file
51
html/pages/device/overview/mempools.inc.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
if(mysql_result(mysql_query("SELECT count(*) from mempools WHERE device_id = '" . $device['device_id'] . "'"),0)) {
|
||||
echo("<div style='background-color: #eeeeee; margin: 5px; padding: 5px;'>");
|
||||
echo("<p style='padding: 0px 5px 5px;' class=sectionhead>Memory Pools</p>");
|
||||
echo("<table width=100% cellspacing=0 cellpadding=5>");
|
||||
$mempool_rows = '1';
|
||||
$mempools = mysql_query("SELECT * FROM `mempools` WHERE device_id = '" . $device['device_id'] . "'");
|
||||
while($mempool = mysql_fetch_array($mempools)) {
|
||||
if(is_integer($mempool_rows/2)) { $row_colour = $list_colour_a; } else { $row_colour = $list_colour_b; }
|
||||
$perc = round($mempool['mempool_used'] / ($mempool['mempool_total']) * 100,2);
|
||||
$text_descr = $mempool['mempool_descr'];
|
||||
$text_descr = str_replace("Routing Processor", "RP", $text_descr);
|
||||
$text_descr = str_replace("Switching Processor", "SP", $text_descr);
|
||||
$text_descr = str_replace("Processor", "Proc", $text_descr);
|
||||
$text_descr = str_replace("Sub-Module", "Mod", $text_descr);
|
||||
$text_descr = str_replace("DFC Card", "DFC", $text_descr);
|
||||
|
||||
$mempool_url = "/device/".$device['device_id']."/health/memory/";
|
||||
$mini_url = $config['base_url'] . "/graph.php?id=".$mempool['mempool_id']."&type=mempool&from=".$day."&to=".$now."&width=80&height=20&bg=f4f4f4";
|
||||
|
||||
$mempool_popup = "onmouseover=\"return overlib('<div class=list-large>".$device['hostname']." - ".$text_descr;
|
||||
$mempool_popup .= "</div><img src=\'graph.php?id=" . $mempool['mempool_id'] . "&type=mempool&from=$month&to=$now&width=400&height=125\'>";
|
||||
$mempool_popup .= "', RIGHT".$config['overlib_defaults'].");\" onmouseout=\"return nd();\"";
|
||||
|
||||
$total = formatStorage($mempool['mempool_total']);
|
||||
$used = formatStorage($mempool['mempool_used']);
|
||||
$free = formatStorage($mempool['mempool_free']);
|
||||
|
||||
if($perc > '90') { $left_background='c4323f'; $right_background='C96A73';
|
||||
} elseif($perc > '75') { $left_background='bf5d5b'; $right_background='d39392';
|
||||
} elseif($perc > '50') { $left_background='bf875b'; $right_background='d3ae92';
|
||||
} elseif($perc > '25') { $left_background='5b93bf'; $right_background='92b7d3';
|
||||
} else { $left_background='9abf5b'; $right_background='bbd392'; }
|
||||
|
||||
echo("<tr bgcolor=$row_colour><td class=tablehead><a href='".$mempool_url."' $mempool_popup>" . $text_descr . "</a></td>
|
||||
<td width=90><a href='".$mempool_url."' $mempool_popup><img src='$mini_url'></a></td>
|
||||
<td width=200><a href='".$mempool_url."' $mempool_popup>
|
||||
".print_percentage_bar (200, 20, $perc, "$used / $total", "ffffff", $left_background, $perc . "%", "ffffff", $right_background)."
|
||||
</a></td>
|
||||
</tr>");
|
||||
|
||||
|
||||
$mempool_rows++;
|
||||
}
|
||||
echo("</table>");
|
||||
echo("</div>");
|
||||
}
|
||||
|
||||
|
||||
?>
|
@@ -48,6 +48,29 @@ function discover_processor(&$valid_processor, $device, $oid, $index, $type, $de
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function discover_mempool(&$valid_mempool, $device, $index, $type, $descr, $precision = "1", $entPhysicalIndex = NULL, $hrDeviceIndex = NULL) {
|
||||
|
||||
global $config; global $debug;
|
||||
if($debug) { echo("$device, $oid, $index, $type, $descr, $precision, $current, $entPhysicalIndex, $hrDeviceIndex\n"); }
|
||||
if($descr) {
|
||||
if(mysql_result(mysql_query("SELECT count(mempool_id) FROM `mempools` WHERE `mempool_index` = '$index' AND `device_id` = '".$device['device_id']."' AND `mempool_type` = '$type'"),0) == '0') {
|
||||
$query = "INSERT INTO mempools (`entPhysicalIndex`, `hrDeviceIndex`, `device_id`, `mempool_descr`, `mempool_index`, `mempool_type`, `mempool_precision`)
|
||||
values ('$entPhysicalIndex', '$hrDeviceIndex', '".$device['device_id']."', '$descr', '$index', '$type','$precision')";
|
||||
mysql_query($query);
|
||||
if($debug) { print $query . "\n"; }
|
||||
echo("+");
|
||||
} else {
|
||||
echo(".");
|
||||
$query = "UPDATE `mempools` SET `mempool_descr` = '".$descr."' WHERE `device_id` = '".$device['device_id']."' AND `mempool_index` = '".$index."' AND `mempool_type` = '".$type."'";
|
||||
mysql_query($query);
|
||||
if($debug) { print $query . "\n"; }
|
||||
}
|
||||
$valid_mempool[$type][$index] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function discover_fan($device, $oid, $index, $type, $descr, $precision = 1, $low_limit = NULL, $high_limit = NULL, $current = NULL) {
|
||||
|
||||
global $config; global $debug;
|
||||
|
20
includes/discovery/mempools-cmp.inc.php
Executable file
20
includes/discovery/mempools-cmp.inc.php
Executable file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
if($device['os'] == "ios" || $device['os_type'] == "ios") {
|
||||
|
||||
echo("OLD-CISCO-MEMORY-POOL: ");
|
||||
|
||||
$cmp_oids = array('ciscoMemoryPool');
|
||||
|
||||
foreach ($cmp_oids as $oid) { $cmp_array = snmp_cache_oid($oid, $device, $cmp_array, "CISCO-MEMORY-POOL-MIB"); }
|
||||
|
||||
if(is_array($cmp_array)) {
|
||||
foreach($cmp_array[$device[device_id]] as $index => $cmp) {
|
||||
if(is_numeric($cmp['ciscoMemoryPoolUsed']) && is_numeric($index)) {
|
||||
discover_mempool($valid_mempool, $device, $index, "cmp", $cmp['ciscoMemoryPoolName'], "1", NULL, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
28
includes/discovery/mempools.inc.php
Executable file
28
includes/discovery/mempools.inc.php
Executable file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
echo("Memory : ");
|
||||
|
||||
include("mempools-cmp.inc.php");
|
||||
|
||||
### Remove memory pools which weren't redetected here
|
||||
|
||||
$sql = "SELECT * FROM `mempools` WHERE `device_id` = '".$device['device_id']."'";
|
||||
$query = mysql_query($sql);
|
||||
|
||||
if($debug) { print_r ($valid_mempool); }
|
||||
|
||||
while ($test_mempool = mysql_fetch_array($query)) {
|
||||
$mempool_index = $test_mempool['mempool_index'];
|
||||
$mempool_type = $test_mempool['mempool_type'];
|
||||
if($debug) { echo($mempool_index . " -> " . $mempool_type . "\n"); }
|
||||
if(!$valid_mempool[$mempool_type][$mempool_index]) {
|
||||
echo("-");
|
||||
mysql_query("DELETE FROM `mempools` WHERE mempool_id = '" . $test_mempool['mempool_id'] . "'");
|
||||
}
|
||||
unset($mempool_oid); unset($mempool_type);
|
||||
}
|
||||
|
||||
unset($valid_mempool);
|
||||
echo("\n");
|
||||
|
||||
?>
|
@@ -20,9 +20,13 @@
|
||||
$snmp_cmdb .= " entPhysicalModelName.1 entPhysicalContainedIn.1 entPhysicalName.1 entPhysicalSoftwareRev.1 ";
|
||||
$snmp_cmdb .= " entPhysicalModelName.1001 entPhysicalContainedIn.1001";
|
||||
$snmp_cmdb .= " cardDescr.1 cardSlotNumber.1";
|
||||
list($model_1,$contained_1,$name_1,$ver_1,$model_1001,$contained_1001,$descr_1,$slot_1) = explode("\n", shell_exec($snmp_cmdb));
|
||||
if(($contained_1 == "0" || $name_1 == "Chassis") && strpos($model_1, "No") === FALSE) { $ciscomodel = $model_1; list($version_1) = explode(",",$ver_1); }
|
||||
$model_data = shell_exec($snmp_cmdb);
|
||||
if($debug) {echo($model_data);}
|
||||
list($model_1,$contained_1,$name_1,$ver_1,$model_1001,$contained_1001,$descr_1,$slot_1) = explode("\n", $model_data);
|
||||
|
||||
|
||||
if($slot_1 == "-1" && strpos($descr_1, "No") === FALSE) { $ciscomodel = $descr_1; }
|
||||
if(($contained_1 == "0" || $name_1 == "Chassis") && strpos($model_1, "No") === FALSE) { $ciscomodel = $model_1; list($version_1) = explode(",",$ver_1); }
|
||||
if($contained_1001 == "0" && strpos($model_1001, "No") === FALSE) { $ciscomodel = $model_1001; }
|
||||
$ciscomodel = str_replace("\"","",$ciscomodel);
|
||||
if($ciscomodel) { $hardware = $ciscomodel; unset($ciscomodel); }
|
||||
|
16
includes/polling/mempools-cmp.inc.php
Executable file
16
includes/polling/mempools-cmp.inc.php
Executable file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
$oid = $mempool['mempool_index'];
|
||||
|
||||
$pool_cmd = $config['snmpget'] . " -m CISCO-MEMORY-POOL-MIB -O Uqnv -" . $device['snmpver'] . " -c " . $device['community'] . " " . $device['hostname'].":".$device['port'];
|
||||
$pool_cmd .= " ciscoMemoryPoolUsed.$oid ciscoMemoryPoolFree.$oid ciscoMemoryPoolLargestFree.$oid";
|
||||
$pool_cmd .= " | cut -f 1 -d ' '";
|
||||
|
||||
echo("$pool_cmd");
|
||||
|
||||
$pool = shell_exec($pool_cmd);
|
||||
|
||||
list($mempool['used'], $mempool['free'], $mempool['largestfree']) = explode("\n", $pool);
|
||||
$mempool['total'] = $mempool['used'] + $mempool['free'];
|
||||
|
||||
?>
|
56
includes/polling/mempools.inc.php
Executable file
56
includes/polling/mempools.inc.php
Executable file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
$query = "SELECT * FROM mempools WHERE device_id = '" . $device['device_id'] . "'";
|
||||
$mempool_data = mysql_query($query);
|
||||
while($mempool = mysql_fetch_array($mempool_data)) {
|
||||
|
||||
echo($mempool['mempool_descr'] . ": ");
|
||||
|
||||
$mempoolrrd = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename("mempool-" . $mempool['mempool_type'] . "-" . $mempool['mempool_index'] . ".rrd");
|
||||
|
||||
if (!is_file($mempoolrrd)) {
|
||||
shell_exec("rrdtool create $mempoolrrd \
|
||||
--step 300 \
|
||||
DS:used:GAUGE:600:-273:100000000000 \
|
||||
DS:free:GAUGE:600:-273:100000000000 \
|
||||
RRA:AVERAGE:0.5:1:600 \
|
||||
RRA:AVERAGE:0.5:6:700 \
|
||||
RRA:AVERAGE:0.5:24:775 \
|
||||
RRA:AVERAGE:0.5:288:797 \
|
||||
RRA:MIN:0.5:1:600 \
|
||||
RRA:MIN:0.5:6:700 \
|
||||
RRA:MIN:0.5:24:775 \
|
||||
RRA:MIN:0.5:288:797 \
|
||||
RRA:MAX:0.5:1:600 \
|
||||
RRA:MAX:0.5:6:700 \
|
||||
RRA:MAX:0.5:24:775 \
|
||||
RRA:MAX:0.5:288:797");
|
||||
}
|
||||
|
||||
$file = $config['install_dir']."/includes/polling/mempools-".$mempool['mempool_type'].".inc.php";
|
||||
echo($file);
|
||||
if(is_file($file)) {
|
||||
include($file);
|
||||
} else {
|
||||
### FIXME GENERIC
|
||||
}
|
||||
|
||||
$percent = $mempool['used'] * $mempool['total'] * 100;
|
||||
|
||||
print_r($mempool);
|
||||
|
||||
echo($percent."% ");
|
||||
|
||||
rrdtool_update($mempoolrrd,"N:".$mempool['used'].":".$mempool['free']);
|
||||
|
||||
$update_query = "UPDATE `mempools` SET `mempool_used` = '".$mempool['used']."'";
|
||||
$update_query .= ", `mempool_free` = '".$mempool['free']."', `mempool_total` = '".$mempool['total']."'";
|
||||
$update_query .= ", `mempool_largestfree` = '".$mempool['largestfree']."'";
|
||||
$update_query .= ", `mempool_lowestfree` = '".$mempool['lowestfree']."'";
|
||||
$update_query .= " WHERE `mempool_id` = '".$mempool['mempool_id']."'";
|
||||
|
||||
mysql_query($update_query);
|
||||
|
||||
}
|
||||
|
||||
?>
|
@@ -114,6 +114,7 @@ while ($device = mysql_fetch_array($device_query)) {
|
||||
include("includes/polling/fanspeeds.inc.php");
|
||||
include("includes/polling/voltages.inc.php");
|
||||
include("includes/polling/processors.inc.php");
|
||||
include("includes/polling/mempools.inc.php");
|
||||
include("includes/polling/device-netstats.inc.php");
|
||||
include("includes/polling/ipSystemStats.inc.php");
|
||||
include("includes/polling/ports.inc.php");
|
||||
|
Reference in New Issue
Block a user