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:
Adam Amstrong
2010-02-22 00:57:13 +00:00
parent 32255a829f
commit d58bd29035
11 changed files with 238 additions and 4 deletions

View File

@@ -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");

View 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++;
}
?>

View File

@@ -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");

View 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>");
}
?>

View File

@@ -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;

View 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);
}
}
}
}
?>

View 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");
?>

View File

@@ -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); }

View 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'];
?>

View 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);
}
?>

View File

@@ -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");