diff --git a/html/pages/device/overview/generic/sensor.inc.php b/html/pages/device/overview/generic/sensor.inc.php
index c93660b6fe..3dcae4da18 100644
--- a/html/pages/device/overview/generic/sensor.inc.php
+++ b/html/pages/device/overview/generic/sensor.inc.php
@@ -2,6 +2,10 @@
$sensors = dbFetchRows('SELECT * FROM `sensors` WHERE `sensor_class` = ? AND device_id = ? ORDER BY `poller_type`, `sensor_oid`, `sensor_index`', array($sensor_class, $device['device_id']));
+if ($sensor_class == 'state') {
+ $sensors = dbFetchRows('SELECT * FROM `sensors` LEFT JOIN `sensors_to_state_indexes` ON sensors_to_state_indexes.sensor_id = sensors.sensor_id LEFT JOIN state_indexes ON state_indexes.state_index_id = sensors_to_state_indexes.state_index_id WHERE `sensor_class` = ? AND device_id = ? ORDER BY `poller_type`, `sensor_index` ', array($sensor_class, $device['device_id']));
+}
+
if (count($sensors)) {
echo '
@@ -12,6 +16,11 @@ if (count($sensors)) {
echo '
';
foreach ($sensors as $sensor) {
+ $state_translation = array();
+ if (!empty($sensor['state_index_id'])) {
+ $state_translation = dbFetchRows('SELECT * FROM `state_translations` WHERE `state_index_id` = ? AND `state_value` = ? ', array($sensor['state_index_id'], $sensor['sensor_current']));
+ }
+
if (!isset($sensor['sensor_current'])) {
$sensor['sensor_current'] = 'NaN';
}
@@ -51,12 +60,36 @@ if (count($sensors)) {
$sensor_minigraph = generate_lazy_graph_tag($graph_array);
$sensor['sensor_descr'] = truncate($sensor['sensor_descr'], 48, '');
-
- echo '
- '.overlib_link($link, shorten_interface_type($sensor['sensor_descr']), $overlib_content).' |
- '.overlib_link($link, $sensor_minigraph, $overlib_content).' |
- '.overlib_link($link, ' $sensor['sensor_limit'] ? "style='color: red'" : '').'>'.$sensor['sensor_current'].$sensor_unit.'', $overlib_content).' |
-
';
+ if (!empty($state_translation['0']['state_descr'])) {
+ $state_style="";
+ switch ($state_translation['state_generic_value']) {
+ case 0: // OK
+ $state_style="class='label label-success'";
+ break;
+ case 1: // Warning
+ $state_style="class='label label-warning'";
+ break;
+ case 2: // Critical
+ $state_style="class='label label-danger'";
+ break;
+ case 3: // Unknown
+ default:
+ $state_style="class='label label-default'";
+ break;
+ }
+ echo '
+ '.overlib_link($link, shorten_interface_type($sensor['sensor_descr']), $overlib_content).' |
+ '.overlib_link($link, $sensor_minigraph, $overlib_content).' |
+ '.overlib_link($link, ''.$state_translation['0']['state_descr'].'', $overlib_content).' |
+
';
+ }
+ else {
+ echo '
+ '.overlib_link($link, shorten_interface_type($sensor['sensor_descr']), $overlib_content).' |
+ '.overlib_link($link, $sensor_minigraph, $overlib_content).' |
+ '.overlib_link($link, ' $sensor['sensor_limit'] ? "style='color: red'" : '').'>'.$sensor['sensor_current'].$sensor_unit.'', $overlib_content).' |
+
';
+ }
}//end foreach
echo '
';
diff --git a/includes/discovery/sensors/states/cisco.inc.php b/includes/discovery/sensors/states/cisco.inc.php
new file mode 100644
index 0000000000..f4e1ad211e
--- /dev/null
+++ b/includes/discovery/sensors/states/cisco.inc.php
@@ -0,0 +1,43 @@
+ $value[0],
+ 'state_descr' => $value[1],
+ 'state_draw_graph' => $value[2],
+ 'state_value' => $value[3],
+ 'state_generic_value' => $value[4]
+ );
+ dbInsert($insert, 'state_translations');
+ }
+ }
+
+ foreach ($temp as $index => $entry) {
+ //Discover Sensors
+ discover_sensor($valid['sensor'], 'state', $device, $cur_oid.$index, $index, $state_name, $temp[$index]['ciscoEnvMonSupplyStatusDescr'], '1', '1', null, null, null, null, $temp[$index]['ciscoEnvMonSupplyState'], 'snmp', $index);
+
+ //Create Sensor To State Index
+ create_sensor_to_state_index($device, $state_name, $index);
+ }
+ }
+}
diff --git a/includes/functions.php b/includes/functions.php
index 37fb4201cf..f0b403711d 100644
--- a/includes/functions.php
+++ b/includes/functions.php
@@ -1446,3 +1446,34 @@ function rrdtest($path, &$stdOutput, &$stdError) {
proc_close($process);
return $status['exitcode'];
}
+
+function create_state_index($state_name) {
+ $insert = array('state_name' => $state_name);
+ return dbInsert($insert, 'state_indexes');
+}
+
+function create_sensor_to_state_index($device, $state_name, $index)
+{
+ $sensor_entry = dbFetchRow('SELECT sensor_id FROM `sensors` WHERE `sensor_class` = ? AND `device_id` = ? AND `sensor_type` = ? AND `sensor_index` = ?', array(
+ 'state',
+ $device['device_id'],
+ $state_name,
+ $index
+ ));
+ $state_indexes_entry = dbFetchRow('SELECT state_index_id FROM `state_indexes` WHERE `state_name` = ?', array(
+ $state_name
+ ));
+ if (!empty($sensor_entry['sensor_id']) && !empty($state_indexes_entry['state_index_id'])) {
+ $insert = array(
+ 'sensor_id' => $sensor_entry['sensor_id'],
+ 'state_index_id' => $state_indexes_entry['state_index_id'],
+ );
+ foreach($insert as $key => $val_check) {
+ if (!isset($val_check)) {
+ unset($insert[$key]);
+ }
+ }
+
+ $inserted = dbInsert($insert, 'sensors_to_state_indexes');
+ }
+}
diff --git a/sql-schema/105.sql b/sql-schema/105.sql
new file mode 100644
index 0000000000..fbe3e6e65c
--- /dev/null
+++ b/sql-schema/105.sql
@@ -0,0 +1,5 @@
+CREATE TABLE IF NOT EXISTS `state_indexes` ( `state_index_id` int(11) NOT NULL AUTO_INCREMENT, `state_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`state_index_id`), UNIQUE KEY `state_name` (`state_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
+CREATE TABLE IF NOT EXISTS `state_translations` ( `state_translation_id` int(11) NOT NULL AUTO_INCREMENT, `state_index_id` int(11) NOT NULL, `state_descr` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `state_draw_graph` tinyint(1) NOT NULL, `state_value` tinyint(1) NOT NULL, `state_generic_value` tinyint(1) NOT NULL, `state_lastupdated` timestamp NOT NULL, PRIMARY KEY (`state_translation_id`), UNIQUE KEY `state_index_id_value` (`state_index_id`,`state_value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
+CREATE TABLE IF NOT EXISTS `sensors_to_state_indexes` ( `sensors_to_state_translations_id` int(11) NOT NULL AUTO_INCREMENT, `sensor_id` int(11) NOT NULL, `state_index_id` int(11) NOT NULL, PRIMARY KEY (`sensors_to_state_translations_id`), UNIQUE KEY `sensor_id_state_index_id` (`sensor_id`,`state_index_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
+ALTER TABLE `sensors_to_state_indexes` ADD FOREIGN KEY (`sensor_id`) REFERENCES `sensors`(`sensor_id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
+ALTER TABLE `sensors_to_state_indexes` ADD FOREIGN KEY (`state_index_id`) REFERENCES `state_indexes`(`state_index_id`) ON DELETE RESTRICT ON UPDATE RESTRICT;