diff --git a/database-update.sql b/database-update.sql index 8cf00f472..c2e76dc4c 100644 --- a/database-update.sql +++ b/database-update.sql @@ -8,3 +8,4 @@ ALTER TABLE `mempools` CHANGE `mempool_used` `mempool_used` BIGINT( 16 ) NOT NUL ALTER TABLE `ports` ADD `port_descr_type` VARCHAR( 32 ) NULL DEFAULT NULL AFTER `device_id` ,ADD `port_descr_descr` VARCHAR( 64 ) NULL DEFAULT NULL AFTER `port_descr_type` ,ADD `port_descr_circuit` VARCHAR( 64 ) NULL DEFAULT NULL AFTER `port_descr_descr` ,ADD `port_descr_speed` VARCHAR( 32 ) NULL DEFAULT NULL AFTER `port_descr_circuit` ,ADD `port_descr_notes` VARCHAR( 128 ) NULL DEFAULT NULL AFTER `port_descr_speed`; CREATE TABLE `frequency` ( `freq_id` int(11) NOT NULL auto_increment, `device_id` int(11) NOT NULL default '0', `freq_oid` varchar(64) NOT NULL, `freq_index` varchar(8) NOT NULL, `freq_type` varchar(32) NOT NULL, `freq_descr` varchar(32) NOT NULL default '', `freq_precision` int(11) NOT NULL default '1', `freq_current` float default NULL, `freq_limit` float default NULL, `freq_limit_low` float default NULL, PRIMARY KEY (`freq_id`), KEY `freq_host` (`device_id`)) ENGINE=MyISAM AUTO_INCREMENT=189 DEFAULT CHARSET=latin1; ALTER TABLE `temperature` CHANGE `temp_index` `temp_index` int(11) NOT NULL; +CREATE TABLE `current` ( `current_id` int(11) NOT NULL auto_increment, `device_id` int(11) NOT NULL default '0', `current_oid` varchar(64) NOT NULL, `current_index` varchar(8) NOT NULL, `current_type` varchar(32) NOT NULL, `current_descr` varchar(32) NOT NULL default '', `current_precision` int(11) NOT NULL default '1', `current_current` float default NULL, `current_limit` float default NULL, `current_limit_warn` float default NULL, `current_limit_low` float default NULL, PRIMARY KEY (`current_id`), KEY `current_host` (`device_id`)) ENGINE=MyISAM AUTO_INCREMENT=189 DEFAULT CHARSET=latin1; diff --git a/discovery.php b/discovery.php index cf526a937..777c0cd91 100755 --- a/discovery.php +++ b/discovery.php @@ -100,6 +100,7 @@ while ($device = mysql_fetch_array($device_query)) include("includes/discovery/temperatures.inc.php"); include("includes/discovery/voltages.inc.php"); include("includes/discovery/frequencies.inc.php"); + include("includes/discovery/current.inc.php"); include("includes/discovery/fanspeeds.inc.php"); include("includes/discovery/storage.inc.php"); include("includes/discovery/hr-device.inc.php"); diff --git a/html/images/icons/current.png b/html/images/icons/current.png new file mode 100644 index 000000000..c8ce3326f Binary files /dev/null and b/html/images/icons/current.png differ diff --git a/html/includes/print-menubar.php b/html/includes/print-menubar.php index 22a1c9bf0..b277e44d7 100644 --- a/html/includes/print-menubar.php +++ b/html/includes/print-menubar.php @@ -184,6 +184,7 @@ echo('
  • Fans
  • Voltages
  • Frequencies
  • +
  • Current
  • diff --git a/html/pages/health.php b/html/pages/health.php index 0c9fd22ed..32787a06f 100644 --- a/html/pages/health.php +++ b/html/pages/health.php @@ -1,6 +1,6 @@ = '5') { + $sql = "SELECT * FROM `current` AS V, `devices` AS D WHERE V.device_id = D.device_id ORDER BY D.hostname, V.current_descr"; +} else { + $sql = "SELECT * FROM `current` AS V, `devices` AS D, devices_perms as P WHERE V.device_id = D.device_id AND D.device_id = P.device_id AND P.user_id = '" . $_SESSION['user_id'] . "' ORDER BY D.hostname, V.current_descr"; +} + +$query = mysql_query($sql); + +echo(''); + +echo(' + + + + + + + + + '); + +$row = 1; + +while($current = mysql_fetch_array($query)) +{ + if(is_integer($row/2)) { $row_colour = $list_colour_a; } else { $row_colour = $list_colour_b; } + + $weekly_current = "graph.php?id=" . $current['current_id'] . "&type=current&from=$week&to=$now&width=500&height=150"; + $current_popup = "', LEFT);\" onmouseout=\"return nd();\"> + " . $current['current_descr'] . ""; + + if($current['current_current'] >= $current['current_limit']) { $alert = 'alert'; } else { $alert = ""; } + + $current_day = "graph.php?id=" . $current['current_id'] . "&type=current&from=$day&to=$now&width=300&height=100"; + $current_week = "graph.php?id=" . $current['current_id'] . "&type=current&from=$week&to=$now&width=300&height=100"; + $current_month = "graph.php?id=" . $current['current_id'] . "&type=current&from=$month&to=$now&width=300&height=100"; + $current_year = "graph.php?id=" . $current['current_id'] . "&type=current&from=$year&to=$now&width=300&height=100"; + + $current_minigraph = "".$current['hostname']." - ".$current['current_descr']; + $current_minigraph .= "
    ', RIGHT".$config['overlib_defaults'].");\" onmouseout=\"return nd();\" >"; + + echo(" + + + + + + + + + \n"); + + $row++; + +} + +echo("
    DeviceSensorCurrentWarningLimitNotes
    " . generatedevicelink($current) . "$current_popup$current_minigraph$alert" . $current['current_current'] . "A" . $current['current_limit_warn'] . "A" . $current['current_limit'] . "A" . (isset($current['current_notes']) ? $current['current_notes'] : '') . "
    "); + + +?> diff --git a/includes/discovery/current.inc.php b/includes/discovery/current.inc.php new file mode 100644 index 000000000..888d921de --- /dev/null +++ b/includes/discovery/current.inc.php @@ -0,0 +1,68 @@ + $index\n"); } + if(!$current_exists[$type][$index]) { + echo("-"); + mysql_query("DELETE FROM `current` WHERE current_id = '" . $test_current['current_id'] . "'"); + } + } +} + +unset($current_exists); echo("\n"); + +?> diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index deb860390..e49619035 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -276,6 +276,42 @@ function discover_freq($device, $oid, $index, $type, $descr, $precision = 1, $lo return $return; } +function discover_current($device, $oid, $index, $type, $descr, $precision = 1, $low_limit = NULL, $warn_limit = NULL, $high_limit = NULL, $current = NULL) +{ + global $config, $debug; + + if($debug) { echo("$oid, $index, $type, $descr, $precision\n"); } + if(!$low_limit) + { + $low_limit = $config['limit']['current']; + } + + if (mysql_result(mysql_query("SELECT count(current_id) FROM `current` WHERE device_id = '".$device['device_id']."' AND current_type = '$type' AND `current_index` = '$index'"),0) == '0') + { + $query = "INSERT INTO current (`device_id`, `current_oid`, `current_index`, `current_type`, `current_descr`, `current_precision`, `current_limit`, `current_limit_warn`, `current_limit_low`, `current_current`) "; + $query .= " VALUES ('".$device['device_id']."', '$oid', '$index', '$type', '$descr', '$precision', '$high_limit', '$warn_limit', '$low_limit', '$current')"; + mysql_query($query); + if($debug) { echo("$query ". mysql_affected_rows() . " inserted"); } + echo("+"); + } + else + { + $current_entry = mysql_fetch_array(mysql_query("SELECT * FROM `current` WHERE device_id = '".$device['device_id']."' AND current_type = '$type' AND `current_index` = '$index'")); + if($oid == $current_entry['current_oid'] && $descr == $current_entry['current_descr'] && $precision == $current_entry['current_precision']) + { + echo("."); + } + else + { + mysql_query("UPDATE current SET `current_descr` = '$descr', `current_oid` = '$oid', `current_precision` = '$precision' WHERE `device_id` = '" . $device['device_id'] . "' AND current_type = '$type' AND `current_index` = '$index' "); + echo("U"); + if($debug) { echo("$query ". mysql_affected_rows() . " updated"); } + } + } + + return $return; +} + function discover_toner($device, $oid, $index, $type, $descr, $capacity = NULL, $current = NULL) { global $config, $debug; diff --git a/includes/discovery/voltages.inc.php b/includes/discovery/voltages.inc.php index 7cc03d080..4cb214a6c 100755 --- a/includes/discovery/voltages.inc.php +++ b/includes/discovery/voltages.inc.php @@ -165,6 +165,6 @@ if ($query = mysql_query($sql)) } } -unset($fan_exists); echo("\n"); +unset($volt_exists); echo("\n"); ?> diff --git a/includes/polling/device-apc.inc.php b/includes/polling/device-apc.inc.php index e84b32080..50fef197e 100755 --- a/includes/polling/device-apc.inc.php +++ b/includes/polling/device-apc.inc.php @@ -1,9 +1,11 @@