From d64c70717219048b247278d8acff3771be5e96a6 Mon Sep 17 00:00:00 2001 From: Adam Amstrong Date: Mon, 15 Feb 2010 05:07:18 +0000 Subject: [PATCH] further cleanups to voltage discovery code. removing erroneous CR, removing old unix processors tab from health page git-svn-id: http://www.observium.org/svn/observer/trunk@853 61d68cd4-352d-0410-923a-c4978735b2b8 --- database-update.sql | 1 + html/pages/device/health.inc.php | 5 +- includes/discovery/functions.inc.php | 34 ++++++- includes/discovery/processors-ios.inc.php | 2 - includes/discovery/voltages.php | 105 +++++++++------------- 5 files changed, 74 insertions(+), 73 deletions(-) diff --git a/database-update.sql b/database-update.sql index 0431dd86c..9b8d9fca6 100644 --- a/database-update.sql +++ b/database-update.sql @@ -93,3 +93,4 @@ ALTER TABLE `temperature` CHANGE `temp_current` `temp_current` FLOAT( 4 ) NOT ALTER TABLE `processors` ADD `processor_index` varchar(32) NOT NULL AFTER `processor_oid` ALTER TABLE `processors` CHANGE `processor_description` `processor_descr` varchar(64) NOT NULL ALTER TABLE `fanspeed` CHANGE `fan_mibtype` `fan_type` varchar(64) NOT NULL +ALTER TABLE `voltage` ADD `volt_index` VARCHAR( 8 ) NOT NULL AFTER `volt_oid`,ADD `volt_type` VARCHAR( 32 ) NOT NULL AFTER `volt_index` diff --git a/html/pages/device/health.inc.php b/html/pages/device/health.inc.php index bd8ba97e9..b20e9d306 100644 --- a/html/pages/device/health.inc.php +++ b/html/pages/device/health.inc.php @@ -4,7 +4,6 @@ $temp = mysql_result(mysql_query("select count(*) from temperature WHERE device_ $storage = mysql_result(mysql_query("select count(*) from storage WHERE host_id = '" . $device['device_id'] . "'"), 0); $cemp = mysql_result(mysql_query("select count(*) from cempMemPool WHERE device_id = '" . $device['device_id'] . "'"), 0); $cmp = mysql_result(mysql_query("select count(*) from cmpMemPool WHERE device_id = '" . $device['device_id'] . "'"), 0); -$hrprocessor = mysql_result(mysql_query("select count(*) from hrDevice WHERE device_id = '" . $device['device_id'] . "' AND `hrDeviceType` = 'hrDeviceProcessor'"), 0); $processor = mysql_result(mysql_query("select count(*) from processors WHERE device_id = '" . $device['device_id'] . "'"), 0); $fans = mysql_result(mysql_query("select count(*) from fanspeed WHERE device_id = '" . $device['device_id'] . "'"), 0); $volts = mysql_result(mysql_query("select count(*) from voltage WHERE device_id = '" . $device['device_id'] . "'"), 0); @@ -13,7 +12,6 @@ if ($temp) { $datas[] = 'temp'; } if ($storage) { $datas[] = 'storage'; } if ($cemp) { $datas[] = 'cemp'; } if ($cmp) { $datas[] = 'cmp'; } -if ($hrprocessor) { $datas[] = 'hrprocessors'; } if ($processor) { $datas[] = 'processors'; } if ($fans) { $datas[] = 'fanspeeds'; } if ($volts) { $datas[] = 'voltages'; } @@ -22,10 +20,9 @@ $type_text['temp'] = "Temperatures"; $type_text['cmp'] = "Memory Pools"; $type_text['cemp'] = "Memory Enh Pools"; $type_text['storage'] = "Disk Usage"; -$type_text['hrprocessors'] = "Processor Usage"; $type_text['processors'] = "Processor Usage"; $type_text['voltages'] = "Voltages"; -$type_text['fanspeeds'] = "Fanspeeds"; +$type_text['fanspeeds'] = "Fan Speeds"; print_optionbar_start(); diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index 7a4bfcb90..eee84122f 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -10,18 +10,44 @@ function discover_fan($device, $oid, $index, $type, $descr, $precision = 1, $low $query = "INSERT INTO fanspeed (`device_id`, `fan_oid`, `fan_index`, `fan_type`, `fan_descr`, `fan_precision`, `fan_limit`, `fan_current`) "; $query .= " VALUES ('".$device['device_id']."', '$oid', '$index', '$type', '$descr', '$precision', '$low_limit', '$current')"; mysql_query($query); - $return = "+"; + echo("+"); } else { - $fan_entry = mysql_fetch_array(mysql_query("SELECT count(fan_id) FROM `fanspeed` WHERE device_id = '".$device['device_id']."' AND fan_type = '$type' AND `fan_index` = '$index'")); + $fan_entry = mysql_fetch_array(mysql_query("SELECT * FROM `fanspeed` WHERE device_id = '".$device['device_id']."' AND fan_type = '$type' AND `fan_index` = '$index'")); if($oid == $fan_entry['fan_oid'] && $descr == $fan_entry['fan_descr'] && $precision == $fan_entry['fan_precision']) { - $return = "."; + echo("."); } else { mysql_query("UPDATE fanspeed SET `fan_descr` = '$descr', `fan_oid` = '$oid', `fan_precision` = '$precision' WHERE `device_id` = '$id' AND fan_type = '$type' AND `fan_index` = '$fan_index' "); - $return = "U"; + echo("U"); + } + } + return $return; +} + +function discover_volt($device, $oid, $index, $type, $descr, $precision = 1, $low_limit = NULL, $high_limit = NULL, $current = NULL) { + + global $config; global $debug; + if($debug) { echo("$oid, $index, $type, $descr, $precision\n"); } + if(!$low_limit) { $low_limit = $config['limit']['volt']; } + if (mysql_result(mysql_query("SELECT count(volt_id) FROM `voltage` WHERE device_id = '".$device['device_id']."' AND volt_type = '$type' AND `volt_index` = '$index'"),0) == '0') + { + $query = "INSERT INTO voltage (`device_id`, `volt_oid`, `volt_index`, `volt_type`, `volt_descr`, `volt_precision`, `volt_limit`, `volt_limit_low`, `volt_current`) "; + $query .= " VALUES ('".$device['device_id']."', '$oid', '$index', '$type', '$descr', '$precision', '$low_limit', '$volt_limit_low', '$current')"; + mysql_query($query); + if($debug) { echo("$query ". mysql_affected_rows() . " inserted"); } + echo("+"); + } else { + $volt_entry = mysql_fetch_array(mysql_query("SELECT * FROM `voltage` WHERE device_id = '".$device['device_id']."' AND volt_type = '$type' AND `volt_index` = '$index'")); + if($oid == $volt_entry['volt_oid'] && $descr == $volt_entry['volt_descr'] && $precision == $volt_entry['volt_precision']) { + echo("."); + } else { + mysql_query("UPDATE voltage SET `volt_descr` = '$descr', `volt_oid` = '$oid', `volt_precision` = '$precision' WHERE `device_id` = '$id' AND volt_type = '$type' AND `volt_index` = '$volt_index' "); + echo("U"); + if($debug) { echo("$query ". mysql_affected_rows() . " updated"); } } } return $return; } + ?> diff --git a/includes/discovery/processors-ios.inc.php b/includes/discovery/processors-ios.inc.php index c370c19f8..329e47772 100755 --- a/includes/discovery/processors-ios.inc.php +++ b/includes/discovery/processors-ios.inc.php @@ -55,6 +55,4 @@ unset ($processors_array); -echo("\n"); - ?> diff --git a/includes/discovery/voltages.php b/includes/discovery/voltages.php index 71f661dbd..5e2163a39 100755 --- a/includes/discovery/voltages.php +++ b/includes/discovery/voltages.php @@ -11,8 +11,11 @@ echo("Voltages : "); if ($device['os'] == "linux") { - $oids = snmp_walk($device, "lmTempSensorsDevice", "-OsqnU", "LM-SENSORS-MIB"); + $oids = snmp_walk($device, "lmVoltSensorsDevice", "-OsqnU", "LM-SENSORS-MIB"); + if ($debug) { echo($oids."\n"); } if ($oids) echo("LM-SENSORS "); + $precision = 1000; + $type = "lmsensors"; foreach(explode("\n", $oids) as $data) { $data = trim($data); @@ -20,28 +23,12 @@ if ($device['os'] == "linux") { list($oid,$descr) = explode(" ", $data,2); $split_oid = explode('.',$oid); - $volt_id = $split_oid[count($split_oid)-1]; - $volt_oid = "1.3.6.1.4.1.2021.13.16.2.1.3." . $volt_id; - $volt = snmp_get($device, $volt_oid, "-Oqv", "LM-SENSORS-MIB"); - $volt = $volt / 10000; - $descr = str_ireplace("temp-", "", $descr); - $descr = trim($descr); - if (mysql_result(mysql_query("SELECT count(volt_id) FROM `voltage` WHERE volt_oid = '$volt_oid' AND device_id = '$id'"),0) == '0') - { - $query = "INSERT INTO voltage (`device_id`, `volt_oid`, `volt_descr`, `volt_precision`, `volt_limit`, `volt_current`) values ('$id', '$volt_oid', '$descr',10000, " . ($config['defaults']['volt_limit'] ? $config['defaults']['volt_limit'] : '60') . ", '$volt')"; - mysql_query($query); - echo("+"); - } - elseif (mysql_result(mysql_query("SELECT `volt_descr` FROM voltage WHERE `device_id` = '$id' AND `volt_oid` = '$volt_oid'"), 0) != $descr) - { - echo("U"); - mysql_query("UPDATE voltage SET `volt_descr` = '$descr' WHERE `device_id` = '$id' AND `volt_oid` = '$volt_oid'"); - } - else - { - echo("."); - } - $volt_exists[] = "$id $volt_oid"; + $index = $split_oid[count($split_oid)-1]; + $oid = ".1.3.6.1.4.1.2021.13.16.4.1.3." . $index; + $current = snmp_get($device, $oid, "-Oqv", "LM-SENSORS-MIB") / $precision; + $descr = trim(str_ireplace("volt-", "", $descr)); + discover_volt($device, $oid, $index, $type, $descr, $precision, NULL, NULL, $current); + $volt_exists[$type][$index] = 1; } } } @@ -50,41 +37,39 @@ if ($device['os'] == "linux") ## Supermicro Voltages if ($device['os'] == "linux") { - $oids = shell_exec($config['snmpwalk'] . " -m SUPERMICRO-HEALTH-MIB -$snmpver -CI -Osqn -c $community $hostname:$port 1.3.6.1.4.1.10876.2.1.1.1.1.3 | sed s/1.3.6.1.4.1.10876.2.1.1.1.1.3.//g"); + $oids = snmp_walk($device, "1.3.6.1.4.1.10876.2.1.1.1.1.3", "-OsqnU", "SUPERMICRO-HEALTH-MIB"); + if ($debug) { echo($oids."\n"); } $oids = trim($oids); if ($oids) echo("Supermicro "); + $type = "supermicro"; + $precision = "1000"; foreach(explode("\n", $oids) as $data) { $data = trim($data); if ($data) { - list($oid,$type) = explode(" ", $data); - if ($type == 1) + list($oid,$kind) = explode(" ", $data); + $split_oid = explode('.',$oid); + $index = $split_oid[count($split_oid)-1]; + if ($kind == 1) { - $volt_oid = "1.3.6.1.4.1.10876.2.1.1.1.1.4$oid"; - $descr_oid = "1.3.6.1.4.1.10876.2.1.1.1.1.2$oid"; - $monitor_oid = "1.3.6.1.4.1.10876.2.1.1.1.1.10$oid"; - $limit_oid = "1.3.6.1.4.1.10876.2.1.1.1.1.5$oid"; - $lowlimit_oid = "1.3.6.1.4.1.10876.2.1.1.1.1.6$oid"; - $descr = trim(shell_exec($config['snmpget'] . " -m SUPERMICRO-HEALTH-MIB -O qv -$snmpver -c $community $hostname:$port $descr_oid")); - $volt = trim(shell_exec($config['snmpget'] . " -m SUPERMICRO-HEALTH-MIB -O qv -$snmpver -c $community $hostname:$port $volt_oid")) / 1000; - $monitor = trim(shell_exec($config['snmpget'] . " -m SUPERMICRO-HEALTH-MIB -O qv -$snmpver -c $community $hostname:$port $monitor_oid")) / 1000; - $limit = trim(shell_exec($config['snmpget'] . " -m SUPERMICRO-HEALTH-MIB -O qv -$snmpver -c $community $hostname:$port $limit_oid")) / 1000; - $lowlimit = trim(shell_exec($config['snmpget'] . " -m SUPERMICRO-HEALTH-MIB -O qv -$snmpver -c $community $hostname:$port $lowlimit_oid")) / 1000; + $volt_oid = "1.3.6.1.4.1.10876.2.1.1.1.1.4.".$index; + $descr_oid = "1.3.6.1.4.1.10876.2.1.1.1.1.2.".$index; + $monitor_oid = "1.3.6.1.4.1.10876.2.1.1.1.1.10.".$index; + $limit_oid = "1.3.6.1.4.1.10876.2.1.1.1.1.5.".$index; + $lowlimit_oid = "1.3.6.1.4.1.10876.2.1.1.1.1.6.".$index; + + $descr = snmp_get($device, $descr_oid, "-Oqv", "SUPERMICRO-HEALTH-MIB"); + $current = snmp_get($device, $volt_oid, "-Oqv", "SUPERMICRO-HEALTH-MIB"); + $limit = snmp_get($device, $limit_oid, "-Oqv", "SUPERMICRO-HEALTH-MIB"); + $lowlimit = snmp_get($device, $lowlimit_oid, "-Oqv", "SUPERMICRO-HEALTH-MIB"); + $monitor = snmp_get($device, $monitor_oid, "-Oqv", "SUPERMICRO-HEALTH-MIB"); + $descr = trim(str_ireplace("Voltage", "", $descr)); + if ($monitor == 'true') { - $descr = trim(str_ireplace("Voltage", "", $descr)); - if (mysql_result(mysql_query("SELECT count(volt_id) FROM `voltage` WHERE volt_oid = '$volt_oid' AND device_id = '$id'"),0) == '0') - { - $query = "INSERT INTO voltage (`device_id`, `volt_oid`, `volt_descr`, `volt_current`, `volt_limit`, `volt_limit_low`, `volt_precision`) values ('$id', '$volt_oid', '$descr', '$volt', '$limit','$lowlimit','1000')"; - mysql_query($query); - echo("+"); - } - else - { - echo("."); - } - $volt_exists[] = "$id $volt_oid"; + echo discover_volt($device, $volt_oid, $index, $type, $descr, $precision, $lowlimit, $limit, $current); + $volt_exists[$type][$index] = 1; } } } @@ -93,29 +78,23 @@ if ($device['os'] == "linux") ## Delete removed sensors -$sql = "SELECT * FROM voltage AS V, devices AS D WHERE V.device_id = D.device_id AND D.device_id = '".$device['device_id']."'"; +if($debug) { print_r($volt_exists); } +$sql = "SELECT * FROM voltage WHERE device_id = '".$device['device_id']."'"; if ($query = mysql_query($sql)) { - while ($sensor = mysql_fetch_array($query)) + while ($test_volt = mysql_fetch_array($query)) { - unset($exists); - $i = 0; - while ($i < count($volt_exists) && !$exists) - { - $thisvolt = $sensor['device_id'] . " " . $sensor['volt_oid']; - if ($volt_exists[$i] == $thisvolt) { $exists = 1; } - $i++; - } - - if (!$exists) - { + $index = $test_volt['volt_index']; + $type = $test_volt['volt_type']; + if($debug) { echo("$type -> $index\n"); } + if(!$volt_exists[$type][$index]) { echo("-"); - mysql_query("DELETE FROM voltage WHERE volt_id = '" . $sensor['volt_id'] . "'"); + mysql_query("DELETE FROM `voltage` WHERE volt_id = '" . $test_volt['volt_id'] . "'"); } } } -unset($volt_exists); echo("\n"); +unset($fan_exists); echo("\n"); ?>