123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- <?php
- class Application_Model_Systemstatus
- {
- public static function GetMonitStatus($p_ip)
- {
- $CC_CONFIG = Config::getConfig();
- // $monit_user = $CC_CONFIG['monit_user'];
- // $monit_password = $CC_CONFIG['monit_password'];
- $url = "http://$p_ip:2812/_status?format=xml";
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_URL, $url);
- // curl_setopt($ch, CURLOPT_USERPWD, "$monit_user:$monit_password");
- //wait a max of 3 seconds before aborting connection attempt
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
- $result = curl_exec($ch);
- $info = curl_getinfo($ch);
- curl_close($ch);
- $docRoot = null;
- if ($result !== FALSE && $info["http_code"] === 200) {
- if ($result != "") {
- $xmlDoc = new DOMDocument();
- $xmlDoc->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"=>0,
- "memory_perc"=>"0%",
- "memory_kb"=>"0",
- "cpu_perc"=>"0%");
- $notMonitored = array(
- "name"=>$p_serviceName,
- "process_id"=>"NOT MONITORED",
- "uptime_seconds"=>"1",
- "status"=>1,
- "memory_perc"=>"0%",
- "memory_kb"=>"0",
- "cpu_perc"=>"0%"
- );
- $notRunning = array(
- "name"=>$p_serviceName,
- "process_id"=>"FAILED",
- "uptime_seconds"=>"-1",
- "status"=>0,
- "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;
- } elseif ($status == 1) {
- //is monitored, but is it running?
- $pid = $item->getElementsByTagName("pid");
- if ($pid->length == 0) {
- $data = $notRunning;
- } else {
- //running!
- }
- } elseif ($status == 0) {
- $data = $notMonitored;
- }
- }
- $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"] = 0;
- }
- $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");
- $data = array();
- 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()
- {
- $partitions = array();
- /* 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);
- }
- }
|