_adapter = $adapter; } private function getMemoryInfo($url) { //url에서 맨앞의 /를 없애야함(substr사용) $results = $this->_adapter->get($url); //오류체크 if ($results->DIMMStatus != "GoodInUse") { $this->_health = "ERROR"; } return sprintf( "%s: %s %sMhz %sMB => %s", $results->SocketLocator, $results->DIMMType, $results->MaximumFrequencyMHz, $results->SizeMB, $results->DIMMStatus ); } private function getMemoryInfos(): array { $results = $this->_adapter->get($this->_base_url . "/Systems/1/Memory/"); $memorys = array("\n------Memory------"); foreach ($results->links->Member as $link) { array_push($memorys, $this->getMemoryInfo($link->href)); } return $memorys; } private function getPhysicalDiskInfo($url) { //url에서 맨앞의 /를 없애야함(substr사용) $info = $this->_adapter->get($url); //오류체크 if ($info->Status->Health != "OK") { $this->_health = "ERROR"; } return sprintf( "%s %s %sGB => %s", $info->MediaType, $info->Model, $info->CapacityGB, $info->Status->Health ); } private function getPhysicalDiskInfos(): string { $results = $this->_adapter->get($this->_base_url . "/Systems/1/SmartStorage/ArrayControllers/0/DiskDrives/"); $disks = array("\n------Physical Disk------"); if (isset($results->links->Member)) { foreach ($results->links->Member as $link) { array_push($disks, $this->getPhysicalDiskInfo($link->href)); } } return implode("\n", $disks); } private function getLogicalDiskInfo($url): string { //url에서 맨앞의 /를 없애야함(substr사용) $info = $this->_adapter->get($url); //오류체크 if ($info->Status->Health != "OK") { $this->_health = "ERROR"; } return sprintf( "%s Raid:%s %s_%s %sMB => %s", $info->LogicalDriveType, $info->Raid, $info->Name, $info->Id, number_format($info->CapacityMiB), $info->Status->Health ); } private function getLogicalDiskInfos(): string { $results = $this->_adapter->get($this->_base_url . "/Systems/1/SmartStorage/ArrayControllers/0/LogicalDrives/"); $disks = array("\n------Logical Disk------"); if (isset($results->links->Member)) { foreach ($results->links->Member as $link) { array_push($disks, $this->getLogicalDiskInfo($link->href)); } } return implode("\n", $disks); } private function getFanInfos(): string { $results = $this->_adapter->get($this->_base_url . "/Chassis/1/Thermal/"); $fans = array("\n------Fan------"); foreach ($results->Fans as $fan) { //오류체크 if ($fan->Status->Health != "OK") { $this->_health = "ERROR"; } array_push($fans, sprintf("%s => %s", $fan->FanName, $fan->Status->Health)); } return implode("\n", $fans); } public function console() { // Oem / Hp / Privileges / RemoteConsolePriv $results = $this->_adapter->get($this->_base_url . "/Sessions/"); return $results->Items[0]->Id; // return $this->_adapter->get($results->Oem->Hp->links->MySession->href); } public function reset(string $type) { //resetType : "On","ForceOff","ForceRestart","Nmi","PushPowerButton" switch ($type) { case 'On': $resetType = 'On'; break; case 'Off': $resetType = 'ForceOff'; break; case 'Restart': $resetType = 'ForceRestart'; break; default: throw new \Exception(__FUNCTION__ . "에서 {$type}은 기능은 없습니다."); break; } return $this->_adapter->post($this->_base_url . "/Systems/1", array("Action" => 'Reset', "ResetType" => $resetType)); } public function reload(HPILOEntity $entity): HPILOEntity { //시스템 정보 가져오기 $results = $this->_adapter->get($this->_base_url . "/Systems/1/"); $entity->model = sprintf("%s %s", $results->Model, $results->BiosVersion); $entity->processor = trim($results->Processors->ProcessorFamily) . " * " . $results->Processors->Count; $entity->memory = $results->Memory->TotalSystemMemoryGB; $entity->power = $results->Power; //각 부품별 정보 가져오기 $entity->detail = $this->getMemoryInfos(); $entity->detail .= $this->getPhysicalDiskInfos(); $entity->detail .= $this->getLogicalDiskInfos(); $entity->detail .= $this->getFanInfos(); return $entity; } }