loadXML($result); $docRoot = $xmlDoc->documentElement; } return $docRoot; } public static function ExtractServiceInformation($p_docRoot, $p_serviceName){ $starting = array( "name"=>"", "process_id"=>"STARTING...", "uptime_seconds"=>"-1", "status"=>true, "memory_perc"=>"0%", "memory_kb"=>"0", "cpu_perc"=>"0%"); $notRunning = array( "name"=>$p_serviceName, "process_id"=>"FAILED", "uptime_seconds"=>"-1", "status"=>false, "memory_perc"=>"0%", "memory_kb"=>"0", "cpu_perc"=>"0%" ); $data = $notRunning; if (!is_null($p_docRoot)){ foreach ($p_docRoot->getElementsByTagName("service") AS $item) { if ($item->getElementsByTagName("name")->item(0)->nodeValue == $p_serviceName){ $monitor = $item->getElementsByTagName("monitor"); if ($monitor->length > 0){ $status = $monitor->item(0)->nodeValue; if ($status == "2"){ $data = $starting; } else if ($status == 0){ $data = $notRunning; } } $process_id = $item->getElementsByTagName("name"); if ($process_id->length > 0){ $data["name"] = $process_id->item(0)->nodeValue; } $process_id = $item->getElementsByTagName("pid"); if ($process_id->length > 0){ $data["process_id"] = $process_id->item(0)->nodeValue; $data["status"] = true; } $uptime = $item->getElementsByTagName("uptime"); if ($uptime->length > 0){ $data["uptime_seconds"] = $uptime->item(0)->nodeValue; } $memory = $item->getElementsByTagName("memory"); if ($memory->length > 0){ $data["memory_perc"] = $memory->item(0)->getElementsByTagName("percenttotal")->item(0)->nodeValue."%"; $data["memory_kb"] = $memory->item(0)->getElementsByTagName("kilobytetotal")->item(0)->nodeValue; } $cpu = $item->getElementsByTagName("cpu"); if ($cpu->length > 0){ $data["cpu_perc"] = $cpu->item(0)->getElementsByTagName("percent")->item(0)->nodeValue."%"; } break; } } } return $data; } public static function GetPlatformInfo(){ $keys = array("release", "machine", "memory", "swap"); foreach($keys as $key) { $data[$key] = "UNKNOWN"; } $docRoot = self::GetMonitStatus("localhost"); if (!is_null($docRoot)){ foreach ($docRoot->getElementsByTagName("platform") AS $item) { foreach($keys as $key) { $keyElement = $item->getElementsByTagName($key); if($keyElement->length > 0) { $data[$key] = $keyElement->item(0)->nodeValue; } } } } return $data; } public static function GetPypoStatus(){ $component = CcServiceRegisterQuery::create()->findOneByDbName("pypo"); if (is_null($component)){ return null; } else { $ip = $component->getDbIp(); $docRoot = self::GetMonitStatus($ip); $data = self::ExtractServiceInformation($docRoot, "airtime-playout"); return $data; } } public static function GetLiquidsoapStatus(){ $component = CcServiceRegisterQuery::create()->findOneByDbName("pypo"); if (is_null($component)){ return null; } else { $ip = $component->getDbIp(); $docRoot = self::GetMonitStatus($ip); $data = self::ExtractServiceInformation($docRoot, "airtime-liquidsoap"); return $data; } } public static function GetMediaMonitorStatus(){ $component = CcServiceRegisterQuery::create()->findOneByDbName("media-monitor"); if (is_null($component)){ return null; } else { $ip = $component->getDbIp(); $docRoot = self::GetMonitStatus($ip); $data = self::ExtractServiceInformation($docRoot, "airtime-media-monitor"); return $data; } } public static function GetIcecastStatus(){ $docRoot = self::GetMonitStatus("localhost"); $data = self::ExtractServiceInformation($docRoot, "icecast2"); return $data; } public static function GetRabbitMqStatus(){ if (isset($_SERVER["RABBITMQ_HOST"])){ $rabbitmq_host = $_SERVER["RABBITMQ_HOST"]; } else { $rabbitmq_host = "localhost"; } $docRoot = self::GetMonitStatus($rabbitmq_host); $data = self::ExtractServiceInformation($docRoot, "rabbitmq-server"); return $data; } public static function GetDiskInfo(){ $partions = array(); if (isset($_SERVER['AIRTIME_SRV'])){ //connect to DB and find how much total space user has allocated. $totalSpace = Application_Model_Preference::GetDiskQuota(); $storPath = Application_Model_MusicDir::getStorDir()->getDirectory(); list($usedSpace,) = preg_split("/[\s]+/", exec("du -bs $storPath")); $partitions[$totalSpace]->totalSpace = $totalSpace; $partitions[$totalSpace]->totalFreeSpace = $totalSpace - $usedSpace; Logging::log($partitions[$totalSpace]->totalFreeSpace); } else { /* First lets get all the watched directories. Then we can group them * into the same partitions by comparing the partition sizes. */ $musicDirs = Application_Model_MusicDir::getWatchedDirs(); $musicDirs[] = Application_Model_MusicDir::getStorDir(); foreach($musicDirs as $md){ $totalSpace = disk_total_space($md->getDirectory()); if (!isset($partitions[$totalSpace])){ $partitions[$totalSpace] = new StdClass; $partitions[$totalSpace]->totalSpace = $totalSpace; $partitions[$totalSpace]->totalFreeSpace = disk_free_space($md->getDirectory()); } $partitions[$totalSpace]->dirs[] = $md->getDirectory(); } } return array_values($partitions); } }