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('
+ | Device |
+ Sensor |
+ |
+ |
+ Current |
+ Warning |
+ Limit |
+ Notes |
+
');
+
+$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 = '
'; } 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("
+ | " . 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'] : '') . " |
+
\n");
+
+ $row++;
+
+}
+
+echo("
");
+
+
+?>
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 @@