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 ' - - - - '; + 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 ' + + + + '; + } + else { + echo ' + + + + '; + } }//end foreach 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).'
'.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).'
'.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).'
'; 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;