Rev 3100 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log
<?php/*** XML Generation class** PHP version 5** @category PHP* @package PSI_XML* @author Michael Cramer <BigMichi1@users.sourceforge.net>* @copyright 2009 phpSysInfo* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version* @version SVN: $Id: class.XML.inc.php 699 2012-09-15 11:57:13Z namiltd $* @link http://phpsysinfo.sourceforge.net*//*** class for generation of the xml** @category PHP* @package PSI_XML* @author Michael Cramer <BigMichi1@users.sourceforge.net>* @copyright 2009 phpSysInfo* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version* @version Release: 3.0* @link http://phpsysinfo.sourceforge.net*/class XML{/*** Sysinfo object where the information retrieval methods are included** @var PSI_Interface_OS*/private $_sysinfo;/*** @var System*/private $_sys = null;/*** xml object with the xml content** @var SimpleXMLExtended*/private $_xml;/*** object for error handling** @var PSI_Error*/private $_errors;/*** array with all enabled plugins (name)** @var array*/private $_plugins;/*** plugin name if pluginrequest** @var string*/private $_plugin = '';/*** generate the entire xml with all plugins or only a part of the xml (main or plugin)** @var boolean*/private $_complete_request = false;/*** doing some initial tasks* - generate the xml structure with the right header elements* - get the error object for error output* - get a instance of the sysinfo object** @param boolean $complete generate xml with all plugins or not* @param string $pluginname name of the plugin** @return void*/public function __construct($complete = false, $pluginname = "", $blockname = false){$this->_errors = PSI_Error::singleton();$this->_plugin = $pluginname;if ($complete) {$this->_complete_request = true;} else {$this->_complete_request = false;}if (defined('PSI_EMU_PORT')) {$os = 'SSH';} elseif (defined('PSI_EMU_HOSTNAME')) {$os = 'WINNT';} else {$os = PSI_OS;}$this->_sysinfo = new $os($blockname);$this->_plugins = CommonFunctions::getPlugins();$this->_xmlbody();}/*** generate common information** @return void*/private function _buildVitals(){$vitals = $this->_xml->addChild('Vitals');$vitals->addAttribute('Hostname', $this->_sys->getHostname());$vitals->addAttribute('IPAddr', $this->_sys->getIp());$vitals->addAttribute('Kernel', $this->_sys->getKernel());$vitals->addAttribute('Distro', $this->_sys->getDistribution());$vitals->addAttribute('Distroicon', $this->_sys->getDistributionIcon());$vitals->addAttribute('Uptime', $this->_sys->getUptime());$vitals->addAttribute('Users', $this->_sys->getUsers());$vitals->addAttribute('LoadAvg', $this->_sys->getLoad());if ($this->_sys->getLoadPercent() !== null) {$vitals->addAttribute('CPULoad', $this->_sys->getLoadPercent());}if ($this->_sysinfo->getLanguage() !== null) {$vitals->addAttribute('SysLang', $this->_sysinfo->getLanguage());}if ($this->_sysinfo->getEncoding() !== null) {$vitals->addAttribute('CodePage', $this->_sysinfo->getEncoding());}//processesif (($procss = $this->_sys->getProcesses()) !== null) {if (isset($procss['*']) && (($procall = $procss['*']) > 0)) {$vitals->addAttribute('Processes', $procall);if (!isset($procss[' ']) || !($procss[' '] > 0)) { // not unknown$procsum = 0;if (isset($procss['R']) && (($proctmp = $procss['R']) > 0)) {$vitals->addAttribute('ProcessesRunning', $proctmp);$procsum += $proctmp;}if (isset($procss['S']) && (($proctmp = $procss['S']) > 0)) {$vitals->addAttribute('ProcessesSleeping', $proctmp);$procsum += $proctmp;}if (isset($procss['T']) && (($proctmp = $procss['T']) > 0)) {$vitals->addAttribute('ProcessesStopped', $proctmp);$procsum += $proctmp;}if (isset($procss['Z']) && (($proctmp = $procss['Z']) > 0)) {$vitals->addAttribute('ProcessesZombie', $proctmp);$procsum += $proctmp;}if (isset($procss['D']) && (($proctmp = $procss['D']) > 0)) {$vitals->addAttribute('ProcessesWaiting', $proctmp);$procsum += $proctmp;}if (($proctmp = $procall - $procsum) > 0) {$vitals->addAttribute('ProcessesOther', $proctmp);}}}}if (($os = $this->_sys->getOS()) == 'Android') {$vitals->addAttribute('OS', 'Linux');} elseif ($os == 'GNU') {$vitals->addAttribute('OS', 'Hurd');} else {$vitals->addAttribute('OS', $os);}}/*** generate the network information** @return void*/private function _buildNetwork(){$hideDevices = array();$network = $this->_xml->addChild('Network');if (defined('PSI_HIDE_NETWORK_INTERFACE')) {if (is_string(PSI_HIDE_NETWORK_INTERFACE)) {if (preg_match(ARRAY_EXP, PSI_HIDE_NETWORK_INTERFACE)) {$hideDevices = eval(PSI_HIDE_NETWORK_INTERFACE);} else {$hideDevices = array(PSI_HIDE_NETWORK_INTERFACE);}} elseif (PSI_HIDE_NETWORK_INTERFACE === true) {return;}}foreach ($this->_sys->getNetDevices() as $dev) {if (defined('PSI_HIDE_NETWORK_INTERFACE_REGEX') && PSI_HIDE_NETWORK_INTERFACE_REGEX) {$hide = false;foreach ($hideDevices as $hidedev) {if (preg_match('/^'.$hidedev.'$/', trim($dev->getName()))) {$hide = true;break;}}} else {$hide =in_array(trim($dev->getName()), $hideDevices);}if (!$hide) {$device = $network->addChild('NetDevice');$device->addAttribute('Name', $dev->getName());$rxbytes = $dev->getRxBytes();$txbytes = $dev->getTxBytes();$device->addAttribute('RxBytes', $rxbytes);$device->addAttribute('TxBytes', $txbytes);if (defined('PSI_SHOW_NETWORK_ACTIVE_SPEED') && PSI_SHOW_NETWORK_ACTIVE_SPEED) {if (($rxbytes == 0) && ($txbytes == 0)) {$rxrate = $dev->getRxRate();$txrate = $dev->getTxRate();if (($rxrate !== null) || ($txrate !== null)) {if ($rxrate !== null) {$device->addAttribute('RxRate', $rxrate);} else {$device->addAttribute('RxRate', 0);}if ($txrate !== null) {$device->addAttribute('TxRate', $txrate);} else {$device->addAttribute('TxRate', 0);}}}}$device->addAttribute('Err', $dev->getErrors());$device->addAttribute('Drops', $dev->getDrops());if (defined('PSI_SHOW_NETWORK_BRIDGE') && PSI_SHOW_NETWORK_BRIDGE && $dev->getBridge()) {$device->addAttribute('Bridge', $dev->getBridge());}if (defined('PSI_SHOW_NETWORK_INFOS') && PSI_SHOW_NETWORK_INFOS && $dev->getInfo()) {$device->addAttribute('Info', $dev->getInfo());}}}}/*** generate the hardware information** @return void*/private function _buildHardware(){$hardware = $this->_xml->addChild('Hardware');if (($machine = $this->_sys->getMachine()) != "") {$machine = trim(preg_replace("/\s+/", " ", preg_replace("/^\s*[\/,]*/", "", preg_replace("/\/\s+,/", "/,", $machine)))); // remove leading slash or comma and unnecessary spacesif (preg_match('/, BIOS .*$/', $machine, $mbuf, PREG_OFFSET_CAPTURE)) {$comapos = $mbuf[0][1];$endstr = $mbuf[0][0];$offset = 0;while (($offset < $comapos)&& (($slashpos = strpos($machine, "/", $offset)) !== false)&& ($slashpos < $comapos)) {$len1 = $comapos - $slashpos - 1;$str1 = substr($machine, $slashpos + 1, $len1);$begstr = substr($machine, 0, $slashpos);if ($len1 > 0) { // no empty$str2 = substr($begstr, -$len1 - 1);} else {$str2 = " ";}if ((" ".$str1 === $str2) || ($str1 === $begstr)) { // duplicates$machine = $begstr.$endstr;break;}$offset = $slashpos + 1;}}if ($machine != "") {$hardware->addAttribute('Name', $machine);}}if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) {$virt = $this->_sys->getVirtualizer();$first = true;$virtstring = "";foreach ($virt as $virtkey=>$virtvalue) if ($virtvalue) {if ($first) {$first = false;} else {$virtstring .= ", ";}if ($virtkey === 'microsoft') {$virtstring .= 'hyper-v';} elseif ($virtkey === 'kvm') {$virtstring .= 'qemu-kvm';} elseif ($virtkey === 'oracle') {$virtstring .= 'virtualbox';} elseif ($virtkey === 'zvm') {$virtstring .= 'z/vm';} elseif ($virtkey === 'sre') {$virtstring .= 'lmhs sre';} else {$virtstring .= $virtkey;}}if ($virtstring !== "") {$hardware->addAttribute('Virtualizer', $virtstring);}}$cpu = null;$vendortab = null;foreach ($this->_sys->getCpus() as $oneCpu) {if ($cpu === null) $cpu = $hardware->addChild('CPU');$tmp = $cpu->addChild('CpuCore');$tmp->addAttribute('Model', $oneCpu->getModel());if ($oneCpu->getVoltage() > 0) {$tmp->addAttribute('Voltage', $oneCpu->getVoltage());}if ($oneCpu->getCpuSpeed() > 0) {$tmp->addAttribute('CpuSpeed', $oneCpu->getCpuSpeed());} elseif ($oneCpu->getCpuSpeed() == -1) {$tmp->addAttribute('CpuSpeed', 0); // core stopped}if ($oneCpu->getCpuSpeedMax() > 0) {$tmp->addAttribute('CpuSpeedMax', $oneCpu->getCpuSpeedMax());}if ($oneCpu->getCpuSpeedMin() > 0) {$tmp->addAttribute('CpuSpeedMin', $oneCpu->getCpuSpeedMin());}/*if ($oneCpu->getTemp() !== null) {$tmp->addAttribute('CpuTemp', $oneCpu->getTemp());}*/if ($oneCpu->getBusSpeed() !== null) {$tmp->addAttribute('BusSpeed', $oneCpu->getBusSpeed());}if ($oneCpu->getCache() !== null) {$tmp->addAttribute('Cache', $oneCpu->getCache());}if ($oneCpu->getVirt() !== null) {$tmp->addAttribute('Virt', $oneCpu->getVirt());}if ($oneCpu->getVendorId() !== null) {if ($vendortab === null) $vendortab = @parse_ini_file(PSI_APP_ROOT."/data/cpus.ini", true);$shortvendorid = $oneCpu->getVendorId();if ($vendortab && ($shortvendorid != "") && isset($vendortab['manufacturer'][$shortvendorid])) {$tmp->addAttribute('Manufacturer', $vendortab['manufacturer'][$shortvendorid]);}}if ($oneCpu->getBogomips() !== null) {$tmp->addAttribute('Bogomips', $oneCpu->getBogomips());}if ($oneCpu->getLoad() !== null) {$tmp->addAttribute('Load', $oneCpu->getLoad());}}$mem = null;foreach (System::removeDupsAndCount($this->_sys->getMemDevices()) as $dev) {if ($mem === null) $mem = $hardware->addChild('MEM');$tmp = $mem->addChild('Chip');$tmp->addAttribute('Name', $dev->getName());if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) {if ($dev->getCapacity() !== null) {$tmp->addAttribute('Capacity', $dev->getCapacity());}if ($dev->getManufacturer() !== null) {$tmp->addAttribute('Manufacturer', $dev->getManufacturer());}if ($dev->getProduct() !== null) {$tmp->addAttribute('Product', $dev->getProduct());}if ($dev->getSpeed() !== null) {$tmp->addAttribute('Speed', $dev->getSpeed());}if ($dev->getVoltage() !== null) {$tmp->addAttribute('Voltage', $dev->getVoltage());}if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && ($dev->getSerial() !== null)) {$tmp->addAttribute('Serial', $dev->getSerial());}}if ($dev->getCount() > 1) {$tmp->addAttribute('Count', $dev->getCount());}}$pci = null;foreach (System::removeDupsAndCount($this->_sys->getPciDevices()) as $dev) {if ($pci === null) $pci = $hardware->addChild('PCI');$tmp = $pci->addChild('Device');$tmp->addAttribute('Name', $dev->getName());if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) {if ($dev->getManufacturer() !== null) {$tmp->addAttribute('Manufacturer', $dev->getManufacturer());}if ($dev->getProduct() !== null) {$tmp->addAttribute('Product', $dev->getProduct());}}if ($dev->getCount() > 1) {$tmp->addAttribute('Count', $dev->getCount());}}$ide = null;foreach (System::removeDupsAndCount($this->_sys->getIdeDevices()) as $dev) {if ($ide === null) $ide = $hardware->addChild('IDE');$tmp = $ide->addChild('Device');$tmp->addAttribute('Name', $dev->getName());if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) {if ($dev->getCapacity() !== null) {$tmp->addAttribute('Capacity', $dev->getCapacity());}if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && ($dev->getSerial() !== null)) {$tmp->addAttribute('Serial', $dev->getSerial());}}if ($dev->getCount() > 1) {$tmp->addAttribute('Count', $dev->getCount());}}$scsi = null;foreach (System::removeDupsAndCount($this->_sys->getScsiDevices()) as $dev) {if ($scsi === null) $scsi = $hardware->addChild('SCSI');$tmp = $scsi->addChild('Device');$tmp->addAttribute('Name', $dev->getName());if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) {if ($dev->getCapacity() !== null) {$tmp->addAttribute('Capacity', $dev->getCapacity());}if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && ($dev->getSerial() !== null)) {$tmp->addAttribute('Serial', $dev->getSerial());}}if ($dev->getCount() > 1) {$tmp->addAttribute('Count', $dev->getCount());}}$nvme = null;foreach (System::removeDupsAndCount($this->_sys->getNvmeDevices()) as $dev) {if ($nvme === null) $nvme = $hardware->addChild('NVMe');$tmp = $nvme->addChild('Device');$tmp->addAttribute('Name', $dev->getName());if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) {if ($dev->getCapacity() !== null) {$tmp->addAttribute('Capacity', $dev->getCapacity());}if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && ($dev->getSerial() !== null)) {$tmp->addAttribute('Serial', $dev->getSerial());}}if ($dev->getCount() > 1) {$tmp->addAttribute('Count', $dev->getCount());}}$usb = null;foreach (System::removeDupsAndCount($this->_sys->getUsbDevices()) as $dev) {if ($usb === null) $usb = $hardware->addChild('USB');$tmp = $usb->addChild('Device');$tmp->addAttribute('Name', $dev->getName());if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) {if ($dev->getManufacturer() !== null) {$tmp->addAttribute('Manufacturer', $dev->getManufacturer());}if ($dev->getProduct() !== null) {$tmp->addAttribute('Product', $dev->getProduct());}if ($dev->getSpeed() !== null) {$tmp->addAttribute('Speed', $dev->getSpeed());}if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && ($dev->getSerial() !== null)) {$tmp->addAttribute('Serial', $dev->getSerial());}}if ($dev->getCount() > 1) {$tmp->addAttribute('Count', $dev->getCount());}}$tb = null;foreach (System::removeDupsAndCount($this->_sys->getTbDevices()) as $dev) {if ($tb === null) $tb = $hardware->addChild('TB');$tmp = $tb->addChild('Device');$tmp->addAttribute('Name', $dev->getName());if ($dev->getCount() > 1) {$tmp->addAttribute('Count', $dev->getCount());}}$i2c = null;foreach (System::removeDupsAndCount($this->_sys->getI2cDevices()) as $dev) {if ($i2c === null) $i2c = $hardware->addChild('I2C');$tmp = $i2c->addChild('Device');$tmp->addAttribute('Name', $dev->getName());if ($dev->getCount() > 1) {$tmp->addAttribute('Count', $dev->getCount());}}}/*** generate the memory information** @return void*/private function _buildMemory(){$memory = $this->_xml->addChild('Memory');$memory->addAttribute('Free', $this->_sys->getMemFree());$memory->addAttribute('Used', $this->_sys->getMemUsed());$memory->addAttribute('Total', $this->_sys->getMemTotal());$memory->addAttribute('Percent', $this->_sys->getMemPercentUsed());if (($this->_sys->getMemApplication() !== null) || ($this->_sys->getMemBuffer() !== null) || ($this->_sys->getMemCache() !== null)) {$details = $memory->addChild('Details');if ($this->_sys->getMemApplication() !== null) {$details->addAttribute('App', $this->_sys->getMemApplication());$details->addAttribute('AppPercent', $this->_sys->getMemPercentApplication());}if ($this->_sys->getMemBuffer() !== null) {$details->addAttribute('Buffers', $this->_sys->getMemBuffer());$details->addAttribute('BuffersPercent', $this->_sys->getMemPercentBuffer());}if ($this->_sys->getMemCache() !== null) {$details->addAttribute('Cached', $this->_sys->getMemCache());$details->addAttribute('CachedPercent', $this->_sys->getMemPercentCache());}}if (count($this->_sys->getSwapDevices()) > 0) {$swap = $memory->addChild('Swap');$swap->addAttribute('Free', $this->_sys->getSwapFree());$swap->addAttribute('Used', $this->_sys->getSwapUsed());$swap->addAttribute('Total', $this->_sys->getSwapTotal());$swap->addAttribute('Percent', $this->_sys->getSwapPercentUsed());$i = 1;foreach ($this->_sys->getSwapDevices() as $dev) {$swapMount = $swap->addChild('Mount');$this->_fillDevice($swapMount, $dev, $i++);}}}/*** fill a xml element with atrributes from a disk device** @param SimpleXmlExtended $mount Xml-Element* @param DiskDevice $dev DiskDevice* @param int $i counter** @return void*/private function _fillDevice(SimpleXMLExtended $mount, DiskDevice $dev, $i){$mount->addAttribute('MountPointID', $i);if ($dev->getFsType()!=="") {$mount->addAttribute('FSType', $dev->getFsType());}$mount->addAttribute('Name', $dev->getName());$mount->addAttribute('Free', sprintf("%.0f", $dev->getFree()));$mount->addAttribute('Used', sprintf("%.0f", $dev->getUsed()));$mount->addAttribute('Total', sprintf("%.0f", $dev->getTotal()));$percentUsed = $dev->getPercentUsed();$mount->addAttribute('Percent', $percentUsed);if ($dev->getPercentInodesUsed() !== null) {$mount->addAttribute('Inodes', $dev->getPercentInodesUsed());}if ($dev->getIgnore() > 0) $mount->addAttribute('Ignore', $dev->getIgnore());if (PSI_SHOW_MOUNT_OPTION) {if ($dev->getOptions() !== null) {$mount->addAttribute('MountOptions', preg_replace("/,/", ", ", $dev->getOptions()));}}if (PSI_SHOW_MOUNT_POINT && ($dev->getMountPoint() !== null)) {$mount->addAttribute('MountPoint', $dev->getMountPoint());}}/*** generate the filesysteminformation** @return void*/private function _buildFilesystems(){$hideMounts = $hideFstypes = $hideDisks = $ignoreFree = $ignoreTotal = $ignoreUsage = $ignoreThreshold = array();if (defined('PSI_HIDE_MOUNTS') && is_string(PSI_HIDE_MOUNTS)) {if (preg_match(ARRAY_EXP, PSI_HIDE_MOUNTS)) {$hideMounts = eval(PSI_HIDE_MOUNTS);} else {$hideMounts = array(PSI_HIDE_MOUNTS);}}if (defined('PSI_HIDE_FS_TYPES') && is_string(PSI_HIDE_FS_TYPES)) {if (preg_match(ARRAY_EXP, PSI_HIDE_FS_TYPES)) {$hideFstypes = eval(PSI_HIDE_FS_TYPES);} else {$hideFstypes = array(PSI_HIDE_FS_TYPES);}}if (defined('PSI_HIDE_DISKS')) {if (is_string(PSI_HIDE_DISKS)) {if (preg_match(ARRAY_EXP, PSI_HIDE_DISKS)) {$hideDisks = eval(PSI_HIDE_DISKS);} else {$hideDisks = array(PSI_HIDE_DISKS);}} elseif (PSI_HIDE_DISKS === true) {return;}}if (defined('PSI_IGNORE_FREE') && is_string(PSI_IGNORE_FREE)) {if (preg_match(ARRAY_EXP, PSI_IGNORE_FREE)) {$ignoreFree = eval(PSI_IGNORE_FREE);} else {$ignoreFree = array(PSI_IGNORE_FREE);}}if (defined('PSI_IGNORE_TOTAL') && is_string(PSI_IGNORE_TOTAL)) {if (preg_match(ARRAY_EXP, PSI_IGNORE_TOTAL)) {$ignoreTotal = eval(PSI_IGNORE_TOTAL);} else {$ignoreTotal = array(PSI_IGNORE_TOTAL);}}if (defined('PSI_IGNORE_USAGE') && is_string(PSI_IGNORE_USAGE)) {if (preg_match(ARRAY_EXP, PSI_IGNORE_USAGE)) {$ignoreUsage = eval(PSI_IGNORE_USAGE);} else {$ignoreUsage = array(PSI_IGNORE_USAGE);}}if (defined('PSI_IGNORE_THRESHOLD_FS_TYPES') && is_string(PSI_IGNORE_THRESHOLD_FS_TYPES)) {if (preg_match(ARRAY_EXP, PSI_IGNORE_THRESHOLD_FS_TYPES)) {$ignoreThreshold = eval(PSI_IGNORE_THRESHOLD_FS_TYPES);} else {$ignoreThreshold = array(PSI_IGNORE_THRESHOLD_FS_TYPES);}}$fs = $this->_xml->addChild('FileSystem');$i = 1;foreach ($this->_sys->getDiskDevices() as $disk) {if (!in_array($disk->getMountPoint(), $hideMounts, true) && !in_array($disk->getFsType(), $hideFstypes, true) && !in_array($disk->getName(), $hideDisks, true)) {$mount = $fs->addChild('Mount');if (in_array($disk->getFsType(), $ignoreThreshold, true)) {$disk->setIgnore(4);} elseif (in_array($disk->getMountPoint(), $ignoreUsage, true)) {$disk->setIgnore(3);} elseif (in_array($disk->getMountPoint(), $ignoreTotal, true)) {$disk->setIgnore(2);} elseif (in_array($disk->getMountPoint(), $ignoreFree, true)) {$disk->setIgnore(1);}$this->_fillDevice($mount, $disk, $i++);}}}/*** generate the motherboard information** @return void*/private function _buildMbinfo(){$mbinfo = $this->_xml->addChild('MBInfo');$temp = $fan = $volt = $power = $current = $other = null;if (sizeof(unserialize(PSI_MBINFO))>0) {foreach (unserialize(PSI_MBINFO) as $mbinfoclass) {$mbinfo_data = new $mbinfoclass();$mbinfo_detail = $mbinfo_data->getMBInfo();if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='temperature') foreach ($mbinfo_detail->getMbTemp() as $dev) {if ($temp == null) {$temp = $mbinfo->addChild('Temperature');}$item = $temp->addChild('Item');$item->addAttribute('Label', $dev->getName());$item->addAttribute('Value', $dev->getValue());$alarm = false;if ($dev->getMax() !== null) {$item->addAttribute('Max', $dev->getMax());$alarm = true;}if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && ($dev->getEvent() !== "") && (((strtolower($dev->getEvent())) !== "alarm") || $alarm || ($dev->getValue() == 0))) {$item->addAttribute('Event', ucfirst(strtolower($dev->getEvent())));}}if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='fans') foreach ($mbinfo_detail->getMbFan() as $dev) {if ($fan == null) {$fan = $mbinfo->addChild('Fans');}$item = $fan->addChild('Item');$item->addAttribute('Label', $dev->getName());$item->addAttribute('Value', $dev->getValue());$alarm = false;if ($dev->getMin() !== null) {$item->addAttribute('Min', $dev->getMin());$alarm = true;}if ($dev->getUnit() !== "") {$item->addAttribute('Unit', $dev->getUnit());}if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && ($dev->getEvent() !== "") && (((strtolower($dev->getEvent())) !== "alarm") || $alarm || ($dev->getValue() == 0))) {$item->addAttribute('Event', ucfirst(strtolower($dev->getEvent())));}}if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='voltage') foreach ($mbinfo_detail->getMbVolt() as $dev) {if ($volt == null) {$volt = $mbinfo->addChild('Voltage');}$item = $volt->addChild('Item');$item->addAttribute('Label', $dev->getName());$item->addAttribute('Value', $dev->getValue());$alarm = false;if (($dev->getMin() === null) || ($dev->getMin() != 0) || ($dev->getMax() === null) || ($dev->getMax() != 0)) {if ($dev->getMin() !== null) {$item->addAttribute('Min', $dev->getMin());$alarm = true;}if ($dev->getMax() !== null) {$item->addAttribute('Max', $dev->getMax());$alarm = true;}}if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && ($dev->getEvent() !== "") && (((strtolower($dev->getEvent())) !== "alarm") || $alarm || ($dev->getValue() == 0))) {$item->addAttribute('Event', ucfirst(strtolower($dev->getEvent())));}}if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='power') foreach ($mbinfo_detail->getMbPower() as $dev) {if ($power == null) {$power = $mbinfo->addChild('Power');}$item = $power->addChild('Item');$item->addAttribute('Label', $dev->getName());$item->addAttribute('Value', $dev->getValue());$alarm = false;if ($dev->getMax() !== null) {$item->addAttribute('Max', $dev->getMax());$alarm = true;}if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && ($dev->getEvent() !== "") && (((strtolower($dev->getEvent())) !== "alarm") || $alarm || ($dev->getValue() == 0))) {$item->addAttribute('Event', ucfirst(strtolower($dev->getEvent())));}}if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='current') foreach ($mbinfo_detail->getMbCurrent() as $dev) {if ($current == null) {$current = $mbinfo->addChild('Current');}$item = $current->addChild('Item');$item->addAttribute('Label', $dev->getName());$item->addAttribute('Value', $dev->getValue());$alarm = false;if (($dev->getMin() === null) || ($dev->getMin() != 0) || ($dev->getMax() === null) || ($dev->getMax() != 0)) {if ($dev->getMin() !== null) {$item->addAttribute('Min', $dev->getMin());$alarm = true;}if ($dev->getMax() !== null) {$item->addAttribute('Max', $dev->getMax());$alarm = true;}}if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && ($dev->getEvent() !== "") && (((strtolower($dev->getEvent())) !== "alarm") || $alarm || ($dev->getValue() == 0))) {$item->addAttribute('Event', ucfirst(strtolower($dev->getEvent())));}}if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='other') foreach ($mbinfo_detail->getMbOther() as $dev) {if ($other == null) {$other = $mbinfo->addChild('Other');}$item = $other->addChild('Item');$item->addAttribute('Label', $dev->getName());$item->addAttribute('Value', $dev->getValue());if ($dev->getUnit() !== "") {$item->addAttribute('Unit', $dev->getUnit());}if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && $dev->getEvent() !== "") {$item->addAttribute('Event', ucfirst(strtolower($dev->getEvent())));}}}}}/*** generate the ups information** @return void*/private function _buildUpsinfo(){$upsinfo = $this->_xml->addChild('UPSInfo');if (!defined('PSI_EMU_HOSTNAME') && defined('PSI_UPS_APCUPSD_CGI_ENABLE') && PSI_UPS_APCUPSD_CGI_ENABLE) {$upsinfo->addAttribute('ApcupsdCgiLinks', true);}if (sizeof(unserialize(PSI_UPSINFO))>0) {foreach (unserialize(PSI_UPSINFO) as $upsinfoclass) {$upsinfo_data = new $upsinfoclass();$upsinfo_detail = $upsinfo_data->getUPSInfo();foreach ($upsinfo_detail->getUpsDevices() as $ups) {$item = $upsinfo->addChild('UPS');$item->addAttribute('Name', $ups->getName());if ($ups->getModel() !== "") {$item->addAttribute('Model', $ups->getModel());}if ($ups->getMode() !== "") {$item->addAttribute('Mode', $ups->getMode());}if ($ups->getStartTime() !== "") {$item->addAttribute('StartTime', $ups->getStartTime());}$item->addAttribute('Status', $ups->getStatus());if ($ups->getBeeperStatus() !== null) {$item->addAttribute('BeeperStatus', $ups->getBeeperStatus());}if ($ups->getTemperatur() !== null) {$item->addAttribute('Temperature', $ups->getTemperatur());}if ($ups->getOutages() !== null) {$item->addAttribute('OutagesCount', $ups->getOutages());}if ($ups->getLastOutage() !== null) {$item->addAttribute('LastOutage', $ups->getLastOutage());}if ($ups->getLastOutageFinish() !== null) {$item->addAttribute('LastOutageFinish', $ups->getLastOutageFinish());}if ($ups->getLineVoltage() !== null) {$item->addAttribute('LineVoltage', $ups->getLineVoltage());}if ($ups->getLineFrequency() !== null) {$item->addAttribute('LineFrequency', $ups->getLineFrequency());}if ($ups->getLoad() !== null) {$item->addAttribute('LoadPercent', $ups->getLoad());}if ($ups->getBatteryDate() !== null) {$item->addAttribute('BatteryDate', $ups->getBatteryDate());}if ($ups->getBatteryVoltage() !== null) {$item->addAttribute('BatteryVoltage', $ups->getBatteryVoltage());}if ($ups->getBatterCharge() !== null) {$item->addAttribute('BatteryChargePercent', $ups->getBatterCharge());}if ($ups->getTimeLeft() !== null) {$item->addAttribute('TimeLeftMinutes', $ups->getTimeLeft());}}}}}/*** generate the xml document** @return void*/private function _buildXml(){if (($this->_plugin == '') || $this->_complete_request) {if ($this->_sys === null) {if (PSI_DEBUG) {// unstable version checkif (!is_numeric(substr(PSI_VERSION, -1))) {$this->_errors->addWarning("This is an unstable version of phpSysInfo, some things may not work correctly");}// Safe mode check$safe_mode = @ini_get("safe_mode") ? true : false;if ($safe_mode) {$this->_errors->addError("WARN", "PhpSysInfo requires to set off 'safe_mode' in 'php.ini'");}// Include path check$include_path = @ini_get("include_path");if ($include_path && ($include_path!="")) {$include_path = preg_replace("/(:)|(;)/", "\n", $include_path);if (preg_match("/^\.$/m", $include_path)) {$include_path = ".";}}if ($include_path != ".") {$this->_errors->addError("WARN", "PhpSysInfo requires '.' inside the 'include_path' in php.ini");}// popen mode checkif (defined("PSI_MODE_POPEN") && PSI_MODE_POPEN) {$this->_errors->addError("WARN", "Installed version of PHP does not support proc_open() function, popen() is used");}}$this->_sys = $this->_sysinfo->getSys();}if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='vitals') $this->_buildVitals();if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='network') $this->_buildNetwork();if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='hardware') $this->_buildHardware();if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='memory') $this->_buildMemory();if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='filesystem') $this->_buildFilesystems();if (!$this->_sysinfo->getBlockName() || in_array($this->_sysinfo->getBlockName(), array('voltage','current','temperature','fans','power','other'))) $this->_buildMbinfo();if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='ups') $this->_buildUpsinfo();}if (!$this->_sysinfo->getBlockName()) $this->_buildPlugins();$this->_xml->combinexml($this->_errors->errorsAddToXML($this->_sysinfo->getEncoding()));}/*** get the xml object** @return SimpleXmlElement*/public function getXml(){$this->_buildXml();return $this->_xml->getSimpleXmlElement();}/*** include xml-trees of the plugins to the main xml** @return void*/private function _buildPlugins(){$pluginroot = $this->_xml->addChild("Plugins");if ((($this->_plugin != '') || $this->_complete_request) && count($this->_plugins) > 0) {$plugins = array();if ($this->_complete_request) {$plugins = $this->_plugins;}if (($this->_plugin != '')) {$plugins = array($this->_plugin);}foreach ($plugins as $plugin) {if (!$this->_complete_request ||(!defined('PSI_PLUGIN_'.strtoupper($plugin).'_SSH_HOSTNAME') && !defined('PSI_PLUGIN_'.strtoupper($plugin).'_WMI_HOSTNAME')) ||(defined('PSI_SSH_HOSTNAME') && (PSI_SSH_HOSTNAME == constant('PSI_PLUGIN_'.strtoupper($plugin).'_SSH_HOSTNAME'))) ||(defined('PSI_WMI_HOSTNAME') && (PSI_WMI_HOSTNAME == constant('PSI_PLUGIN_'.strtoupper($plugin).'_WMI_HOSTNAME')))) {$object = new $plugin($this->_sysinfo->getEncoding());$object->execute();$oxml = $object->xml();if (sizeof($oxml) > 0) {$pluginroot->combinexml($oxml);}}}}}/*** build the xml structure where the content can be inserted** @return void*/private function _xmlbody(){$dom = new DOMDocument('1.0', 'UTF-8');$root = $dom->createElement("tns:phpsysinfo");$root->setAttribute('xmlns:tns', 'http://phpsysinfo.sourceforge.net/');$root->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');$root->setAttribute('xsi:schemaLocation', 'http://phpsysinfo.sourceforge.net/ phpsysinfo3.xsd');$dom->appendChild($root);$this->_xml = new SimpleXMLExtended(simplexml_import_dom($dom), $this->_sysinfo->getEncoding());$generation = $this->_xml->addChild('Generation');$generation->addAttribute('version', PSI_VERSION_STRING);$generation->addAttribute('timestamp', time());$options = $this->_xml->addChild('Options');$options->addAttribute('tempFormat', defined('PSI_TEMP_FORMAT') ? strtolower(PSI_TEMP_FORMAT) : 'c');$options->addAttribute('byteFormat', defined('PSI_BYTE_FORMAT') ? strtolower(PSI_BYTE_FORMAT) : 'auto_binary');$options->addAttribute('datetimeFormat', defined('PSI_DATETIME_FORMAT') ? strtolower(PSI_DATETIME_FORMAT) : 'utc');if (defined('PSI_REFRESH')) {$options->addAttribute('refresh', max(intval(PSI_REFRESH), 0));} else {$options->addAttribute('refresh', 60000);}if (defined('PSI_FS_USAGE_THRESHOLD')) {if ((($fsut = intval(PSI_FS_USAGE_THRESHOLD)) >= 1) && ($fsut <= 99)) {$options->addAttribute('threshold', $fsut);}} else {$options->addAttribute('threshold', 90);}if (count($this->_plugins) > 0) {if (($this->_plugin != '')) {$plug = $this->_xml->addChild('UsedPlugins');$plug->addChild('Plugin')->addAttribute('name', $this->_plugin);} elseif ($this->_complete_request) {$plug = $this->_xml->addChild('UsedPlugins');foreach ($this->_plugins as $plugin) {$plug->addChild('Plugin')->addAttribute('name', $plugin);}/*} else {$plug = $this->_xml->addChild('UnusedPlugins');foreach ($this->_plugins as $plugin) {$plug->addChild('Plugin')->addAttribute('name', $plugin);}*/}}}}