hp-server-monitoring/includes/hpilo_functions.php

168 lines
4.7 KiB
PHP
Raw Normal View History

2019-11-11 15:45:17 +01:00
<?php
/* iLO */
function getIloInfo($server_ip, $username, $password) {
//$params['iloIPAddress'] = $server_ip;
$connection = ssh_Connect($server_ip, $username, $password);
if ($connection == 2) {
$params['result'] = 'SSH Authentication Failed';
return $params;
}
//$params['result'] = 'Success';
//$params['date'] = time();
// Base Informationen:
$table = array(
'name' => 'fwName',
'date' => 'fwDate',
'version' => 'fwVersion',
'license' => 'fwLicense',
'Hostname' => 'fwHostName',
'HostName' => 'fwHostName',
'DomainName' => 'fwDomainName',
);
$params = array();
$params['base_info'] = getIloData($connection, 'show /map1', $table);
$params['fw_info'] = getIloData($connection, 'show /map1/firmware1', $table);
$params['dns_info'] = getIloData($connection, 'show /map1/dnsendpt1', $table);
// Temparatur Informationen:
$table = array(
'CurrentReading' => "CurrentReading",
'oemhp_CautionValue' => "CautionValue",
'oemhp_CriticalValue' => "CriticalValue",
'ElementName' => "ElementName",
);
$params['temperature_info'] = array();
if (preg_match('/iLO\ 3/', $params['base_info']['fwName'])) {
for ($i = 1; $i <= 30; $i++) {
$params['temperature_info']['sensor'.$i] = getIloData($connection, "show /system1/sensor$i", $table);
$params['temperature_info']['sensor'.$i]['Sensor_ID'] = 'sensor'.$i;
}
}
if (preg_match('/iLO\ 4/', $params['base_info']['fwName'])) {
for ($i = 1; $i <= 30; $i++) {
$params['temperature_info']['sensor'.$i] = getIloData($connection, "show /system1/sensor$i", $table);
$params['temperature_info']['sensor'.$i]['Sensor_ID'] = 'sensor'.$i;
}
}
//print_r("====TEST====");
//var_dump($params);
//print_r("====TEST====");
// Server Infoemarionen:
$system_table = array(
'name' => 'productName',
'product_id' => 'productId',
'number' => 'serialNumber',
'enabledstate' => 'enabledstate'
);
// -> Fehler passiert hier!!!!
//$params['system_info'] = getIloData($connection, 'show /system1', $system_table); //War wahrscheindlich zu viel output!
$params['system_info'] = getIloData($connection, 'show /system1 name', $system_table);
//$params['system_info'] = getIloData($connection, 'show /system1 number', $system_table);
$params['system_enabled_info'] = getIloData($connection, 'show /system1 enabledstate', $system_table);
//var_dump(getIloData($connection, 'show /system1', $system_table));
//print_r($params['system_info']);
//echo "test";
// Server Power Infoemarionen:
$power_table = array(
'oemhp_PresentPower' => 'presentPower',
'oemhp_AveragePower' => 'averagePower',
'oemhp_AvgPower' => 'averagePower',
'oemhp_MinPower' => 'minimumPower',
'oemhp_MaxPower' => 'maximumPower',
'oemhp_powerreg' => 'powerProfile'
);
if (preg_match('/iLO\ 2 Standard/', $params['base_info']['fwName'])) {
/* iLO2: Leistungsinformationen */
ssh_sendCommand($connection, 'cd /system1');
$params['system_power'] = getIloData($connection, 'show oemhp_PresentPower', $power_table);
ssh_sendCommand($connection, 'cd /');
}
if (preg_match('/iLO\ 3/', $params['base_info']['fwName']) ||
preg_match('/iLO\ 4/', $params['base_info']['fwName']) ) {
/* iLO3/iLO4: Leistungsinformationen */
$params['system_power'] = getIloData($connection, 'show /system1/oemhp_power1', $power_table);
//print_r($params['system_power']);
}
//var_dump($params);
//BIOS Version:
$bios_table = array(
'date' => 'biosDate',
'version' => 'biosVersion'
);
$params['bios_info'] = getIloData($connection, 'show /system1/firmware1', $bios_table);
// Zum Schluss, gibt "return" das komplette Array wieder zurück an die Index.php
//var_dump($params);
//return $params;
$fp = fopen('ilo_results.json', 'w');
fwrite($fp, json_encode($params));
fclose($fp);
}
function getIloData($connection, $command, $table) {
try {
$data = ssh_sendCommand($connection, $command);
$parsedData = iLO_parseData($data, $table);
} catch (Exception $e) {
print_r($e);
}
return $parsedData;
}
function iLO_ParseData($data, $table) {
$data = explode("\n", $data);
$flag = 0;
$out = '';
foreach($data as $line) {
$line = preg_replace('/(\x1B\x5BD)/', '', $line); // HP's bug?
$line = trim($line);
if ($line == '') {continue;}
if ($line == 'Properties') {
$flag = 1;
continue;
} else if ($line == "Power Monitoring commands aren't supported") {
$line = 'oemhp_PresentPower=Not Supported';
} else if ($line == 'Verbs' || $line == 'An iLO 2 License key is required.') {
$flag = 0;
break;
}
if ($flag) {
$line = explode("=", $line);
$line[0] = trim($line[0]);
$line[1] = trim($line[1]);
$key = (isset($table[$line[0]])) ? $table[$line[0]] : '';
if ($key) {
$out[$key] = $line[1];
}
}
}
return $out;
}
?>