smeserver-phpsysinfo/root/opt/phpsysinfo/plugins/ipmiinfo/class.ipmiinfo.inc.php

270 lines
8.8 KiB
PHP

<?php
/**
* ipmiinfo Plugin
*
* PHP version 5
*
* @category PHP
* @package PSI_Plugin_ipmiinfo
* @author Mieczyslaw Nalewaj <namiltd@users.sourceforge.net>
* @copyright 2009 phpSysInfo
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version SVN: $Id: class.ipmiinfo.inc.php 661 2012-08-27 11:26:39Z namiltd $
* @link http://phpsysinfo.sourceforge.net
*/
/**
* ipmiinfo plugin, which displays all ipmi informations available
*
* @category PHP
* @package PSI_Plugin_ipmiinfo
* @author Mieczyslaw Nalewaj <namiltd@users.sourceforge.net>
* @copyright 2009 phpSysInfo
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: 3.0
* @link http://phpsysinfo.sourceforge.net
*/
class ipmiinfo extends PSI_Plugin
{
private $_lines;
public function __construct($enc)
{
parent::__construct(__CLASS__, $enc);
$this->_lines = array();
}
/**
* get temperature information
*
* @return array temperatures in array with label
*/
private function temperatures()
{
$result = array();
$i = 0;
foreach ($this->_lines as $line) {
$buffer = preg_split("/\s*\|\s*/", $line);
if ($buffer[2] == "degrees C" && $buffer[3] != "na") {
$result[$i]['label'] = $buffer[0];
$result[$i]['value'] = $buffer[1];
$result[$i]['state'] = $buffer[3];
if ($buffer[8] != "na") $result[$i]['max'] = $buffer[8];
$i++;
}
}
return $result;
}
/**
* get voltages information
*
* @return array voltage in array with label
*/
private function voltages()
{
$result = array();
$i = 0;
foreach ($this->_lines as $line) {
$buffer = preg_split("/\s*\|\s*/", $line);
if ($buffer[2] == "Volts" && $buffer[3] != "na") {
$result[$i]['label'] = $buffer[0];
$result[$i]['value'] = $buffer[1];
$result[$i]['state'] = $buffer[3];
if ($buffer[5] != "na") $result[$i]['min'] = $buffer[5];
if ($buffer[8] != "na") $result[$i]['max'] = $buffer[8];
$i++;
}
}
return $result;
}
/**
* get fans information
*
* @return array fans in array with label
*/
private function fans()
{
$result = array();
$i = 0;
foreach ($this->_lines as $line) {
$buffer = preg_split("/\s*\|\s*/", $line);
if ($buffer[2] == "RPM" && $buffer[3] != "na") {
$result[$i]['label'] = $buffer[0];
$result[$i]['value'] = $buffer[1];
$result[$i]['state'] = $buffer[3];
if ($buffer[8] != "na") $result[$i]['min'] = $buffer[8];
$i++;
}
}
return $result;
}
/**
* get powers information
*
* @return array misc in array with label
*/
private function powers()
{
$result = array();
$i = 0;
foreach ($this->_lines as $line) {
$buffer = preg_split("/\s*\|\s*/", $line);
if ($buffer[2] == "Watts" && $buffer[3] != "na") {
$result[$i]['label'] = $buffer[0];
$result[$i]['value'] = $buffer[1];
$result[$i]['state'] = $buffer[3];
if ($buffer[8] != "na") $result[$i]['max'] = $buffer[8];
$i++;
}
}
return $result;
}
/**
* get currents information
*
* @return array misc in array with label
*/
private function currents()
{
$result = array();
$i = 0;
foreach ($this->_lines as $line) {
$buffer = preg_split("/\s*\|\s*/", $line);
if ($buffer[2] == "Amps" && $buffer[3] != "na") {
$result[$i]['label'] = $buffer[0];
$result[$i]['value'] = $buffer[1];
$result[$i]['state'] = $buffer[3];
if ($buffer[8] != "na") $result[$i]['max'] = $buffer[8];
$i++;
}
}
return $result;
}
/**
* get misc information
*
* @return array misc in array with label
*/
private function misc()
{
$result = array();
$i = 0;
foreach ($this->_lines as $line) {
$buffer = preg_split("/\s*\|\s*/", $line);
if ($buffer[2] == "discrete" && $buffer[3] != "na") {
$result[$i]['label'] = $buffer[0];
$result[$i]['value'] = $buffer[1];
$result[$i]['state'] = $buffer[3];
$i++;
}
}
return $result;
}
public function execute()
{
$this->_lines = array();
switch (strtolower(PSI_PLUGIN_IPMIINFO_ACCESS)) {
case 'command':
$lines = "";
if (CommonFunctions::executeProgram('ipmitool', 'sensor', $lines) && !empty($lines))
$this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY);
break;
case 'data':
if (CommonFunctions::rfts(APP_ROOT."/data/ipmiinfo.txt", $lines) && !empty($lines))
$this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY);
break;
default:
$this->error->addConfigError('__construct()', 'PSI_PLUGIN_IPMIINFO_ACCESS');
break;
}
}
public function xml()
{
if (empty($this->_lines))
return $this->xml->getSimpleXmlElement();
$arrBuff = $this->temperatures();
if (sizeof($arrBuff) > 0) {
$temp = $this->xml->addChild("Temperatures");
foreach ($arrBuff as $arrValue) {
$item = $temp->addChild('Item');
$item->addAttribute('Label', $arrValue['label']);
$item->addAttribute('Value', $arrValue['value']);
$item->addAttribute('State', $arrValue['state']);
if (isset($arrValue['Max'])) $item->addAttribute('Max', $arrValue['Max']);
}
}
$arrBuff = $this->voltages();
if (sizeof($arrBuff) > 0) {
$volt = $this->xml->addChild('Voltages');
foreach ($arrBuff as $arrValue) {
$item = $volt->addChild('Item');
$item->addAttribute('Label', $arrValue['label']);
$item->addAttribute('Value', $arrValue['value']);
$item->addAttribute('State', $arrValue['state']);
if (isset($arrValue['Min'])) $item->addAttribute('Min', $arrValue['min']);
if (isset($arrValue['Max'])) $item->addAttribute('Max', $arrValue['max']);
}
}
$arrBuff = $this->fans();
if (sizeof($arrBuff) > 0) {
$fan = $this->xml->addChild('Fans');
foreach ($arrBuff as $arrValue) {
$item = $fan->addChild('Item');
$item->addAttribute('Label', $arrValue['label']);
$item->addAttribute('Value', $arrValue['value']);
$item->addAttribute('State', $arrValue['state']);
if (isset($arrValue['Min'])) $item->addAttribute('Min', $arrValue['min']);
}
}
$arrBuff = $this->powers();
if (sizeof($arrBuff) > 0) {
$misc = $this->xml->addChild('Powers');
foreach ($arrBuff as $arrValue) {
$item = $misc->addChild('Item');
$item->addAttribute('Label', $arrValue['label']);
$item->addAttribute('Value', $arrValue['value']);
$item->addAttribute('State', $arrValue['state']);
if (isset($arrValue['Max'])) $item->addAttribute('Max', $arrValue['max']);
}
}
$arrBuff = $this->currents();
if (sizeof($arrBuff) > 0) {
$misc = $this->xml->addChild('Currents');
foreach ($arrBuff as $arrValue) {
$item = $misc->addChild('Item');
$item->addAttribute('Label', $arrValue['label']);
$item->addAttribute('Value', $arrValue['value']);
$item->addAttribute('State', $arrValue['state']);
if (isset($arrValue['Max'])) $item->addAttribute('Max', $arrValue['max']);
}
}
$arrBuff = $this->misc();
if (sizeof($arrBuff) > 0) {
$misc = $this->xml->addChild('Misc');
foreach ($arrBuff as $arrValue) {
$item = $misc->addChild('Item');
$item->addAttribute('Label', $arrValue['label']);
$item->addAttribute('Value', $arrValue['value']);
$item->addAttribute('State', $arrValue['state']);
}
}
return $this->xml->getSimpleXmlElement();
}
}