From a558955f059640991f4ae439f5be12bc2d426d98 Mon Sep 17 00:00:00 2001 From: martin Date: Fri, 20 May 2011 12:09:19 -0400 Subject: [PATCH] CC-2284: Create script that verifies all required processes are running. -Output is more machine-readable now. --- utils/airtime-check-system.php | 165 ++++++++++++++++++++++----------- 1 file changed, 112 insertions(+), 53 deletions(-) diff --git a/utils/airtime-check-system.php b/utils/airtime-check-system.php index 0c05b52ee..d2dbef6f7 100644 --- a/utils/airtime-check-system.php +++ b/utils/airtime-check-system.php @@ -3,7 +3,7 @@ require_once '../airtime_mvc/library/php-amqplib/amqp.inc'; //Step 1: Verify all config files in /etc/airtime/ exist and have size > 0 bytes. -echo "*** Airtime System Check Script ***".PHP_EOL; +//echo "*** Airtime System Check Script ***".PHP_EOL; set_error_handler("myErrorHandler"); @@ -14,41 +14,101 @@ $airtimeIni = AirtimeCheck::GetAirtimeConf(); $pypoCfg = AirtimeCheck::GetPypoCfg(); AirtimeCheck::GetDbConnection($airtimeIni); -AirtimeCheck::CheckRabbitMqVersion(); +//AirtimeCheck::CheckRabbitMqVersion(); AirtimeCheck::CheckRabbitMqConnection($airtimeIni); AirtimeCheck::CheckApacheVHostFiles(); AirtimeCheck::GetAirtimeServerVersion($pypoCfg); +AirtimeCheck::CheckPypoRunning(); +AirtimeCheck::CheckLiquidsoapRunning(); + class AirtimeCheck{ + const CHECK_OK = "OK"; + const CHECK_FAILED = "FAILED"; + public static function CheckPypoRunning(){ //check using svstat + $command = "sudo svstat /etc/service/pypo"; + exec($command, $output, $result); + + + $key_value = split(":", $output[0]); + $value = trim($key_value[1]); + + $status = AirtimeCheck::CHECK_FAILED; + $pos = strpos($value, "pid"); + if ($pos !== false){ + $start = $pos + 4; + $end = strpos($value, ")", $start); + $status = substr($value, $start, $end-$start); + } + + echo "PYPO_PID=".$status.PHP_EOL; + + $status = AirtimeCheck::CHECK_FAILED; + $pos = strpos($value, ")"); + if ($pos !== false){ + $start = $pos + 2; + $end = strpos($value, " ", $start); + $status = substr($value, $start, $end-$start); + } + + echo "PYPO_RUNNING_SECONDS=".$status.PHP_EOL; } public static function CheckLiquidsoapRunning(){ //connect via telnet + $command = "sudo svstat /etc/service/pypo-liquidsoap"; + exec($command, $output, $result); + + $key_value = split(":", $output[0]); + $value = trim($key_value[1]); + + $status = AirtimeCheck::CHECK_FAILED; + $pos = strpos($value, "pid"); + if ($pos !== false){ + $start = $pos + 4; + $end = strpos($value, ")", $start); + $status = substr($value, $start, $end-$start); + } + + echo "LIQUIDSOAP_PID=".$status.PHP_EOL; + + $status = AirtimeCheck::CHECK_FAILED; + $pos = strpos($value, ")"); + if ($pos !== false){ + $start = $pos + 2; + $end = strpos($value, " ", $start); + $status = substr($value, $start, $end-$start); + + } + + echo "LIQUIDSOAP_RUNNING_SECONDS=".$status.PHP_EOL; } public static function CheckConfigFilesExist(){ - echo PHP_EOL."Verifying Config Files in /etc/airtime".PHP_EOL; + //echo PHP_EOL."Verifying Config Files in /etc/airtime".PHP_EOL; $confFiles = array("airtime.conf", "liquidsoap.cfg", "pypo.cfg", "recorder.cfg"); + $allFound = AirtimeCheck::CHECK_OK; + foreach ($confFiles as $cf){ $fullPath = "/etc/airtime/$cf"; - echo "\t".$fullPath." ... "; - if (file_exists($fullPath)){ - echo "[OK]".PHP_EOL; - } else { - echo "Not Found!".PHP_EOL; - exit; + //echo "\t".$fullPath." ... "; + if (!file_exists($fullPath)){ + $allFound = AirtimeCheck::CHECK_FAILED; } } + + echo "AIRTIME_CONFIG=$allFound".PHP_EOL; + } public static function GetAirtimeConf(){ @@ -81,14 +141,15 @@ class AirtimeCheck{ $dbconn = pg_connect("host=$host port=5432 dbname=$dbname user=$dbuser password=$dbpass"); - echo PHP_EOL."Verifying Airtime Database".PHP_EOL; + //echo PHP_EOL."Verifying Airtime Database".PHP_EOL; if ($dbconn === false){ - echo "\tConnection ... [Failed!]".PHP_EOL; - exit; + $status = AirtimeCheck::CHECK_FAILED; } else { - echo "\tConnection ... [OK]".PHP_EOL; + $status = AirtimeCheck::CHECK_OK; } + + echo "TEST_PGSQL_DATABASE=$status".PHP_EOL; } public static function CheckDbTables(){ @@ -100,6 +161,7 @@ class AirtimeCheck{ * and this function will fail to detect it! Unfortunately there * seems to be no other way to check RabbitMQ version. Will update * this function if I find a more universal solution. */ + /* public static function CheckRabbitMqVersion(){ echo PHP_EOL."Checking RabbitMQ Version".PHP_EOL; @@ -119,80 +181,78 @@ class AirtimeCheck{ echo "\trabbitmq-server package not found. [Failed!]".PHP_EOL; } } + * */ public static function CheckRabbitMqConnection($airtimeIni){ - echo PHP_EOL."Verifying RabbitMQ Service".PHP_EOL; + //echo PHP_EOL."Verifying RabbitMQ Service".PHP_EOL; try { + $status = AirtimeCheck::CHECK_OK; $conn = new AMQPConnection($airtimeIni["rabbitmq"]["host"], $airtimeIni["rabbitmq"]["port"], $airtimeIni["rabbitmq"]["user"], $airtimeIni["rabbitmq"]["password"]); } catch (Exception $e){ - echo "\tConnection ... [Failed!]".PHP_EOL; - exit; + //echo "\tConnection ... [Failed!]".PHP_EOL; + //exit; + $status = AirtimeCheck::CHECK_FAILED; } - echo "\tConnection ... [OK]".PHP_EOL; + //echo "\tConnection ... [OK]".PHP_EOL; + + echo "TEST_RABBITMQ_SERVER=$status".PHP_EOL; } public static function GetAirtimeServerVersion($pypoCfg){ - echo PHP_EOL."Checking Airtime Server Version".PHP_EOL; - echo "\tConnecting to http://localhost/api/version".PHP_EOL; + //echo PHP_EOL."Checking Airtime Server Version".PHP_EOL; $baseUrl = $pypoCfg["base_url"]; $basePort = $pypoCfg["base_port"]; + $apiKey = "%%api_key%%"; + + $url = "http://$baseUrl:$basePort/api/version/api_key/$apiKey"; + echo "AIRTIME_VERSION_URL=$url".PHP_EOL; + $apiKey = $pypoCfg["api_key"]; + $url = "http://$baseUrl:$basePort/api/version/api_key/$apiKey"; - $rh = fopen("http://$baseUrl:$basePort/api/version/api_key/$apiKey", "r"); + $rh = fopen($url, "r"); if ($rh !== false){ while (($buffer = fgets($rh)) !== false) { $json = json_decode(trim($buffer), true); - if (is_null($json)){ - echo "NULL STRING".PHP_EOL; - - } else { - echo "\t\tAirtime Version ".$json["version"]." ... [OK] ".PHP_EOL; + if (!is_null($json)){ + //echo "\t\tAirtime Version ".$json["version"]." ... [OK] ".PHP_EOL; + $version = $json["version"]; + echo "AIRTIME_VERSION_STRING=$version".PHP_EOL; } } } else { - echo "\t\tConnection ... [Failed!]".PHP_EOL; - exit; - } - - function handleError($errno, $errstr,$error_file,$error_line) - { - echo "Error: [$errno] $errstr - $error_file:$error_line"; - echo "
"; - echo "Terminating PHP Script"; - die(); - } - + //echo "\t\tConnection ... [Failed!]".PHP_EOL; + //exit; + } } public static function CheckApacheVHostFiles(){ - echo PHP_EOL."Checking for Airtime Apache config files".PHP_EOL; + //echo PHP_EOL."Checking for Airtime Apache config files".PHP_EOL; $fileNames = array("/etc/apache2/sites-available/airtime", "/etc/apache2/sites-enabled/airtime"); + $status = AirtimeCheck::CHECK_OK; + foreach ($fileNames as $fn){ - echo "\tChecking $fn ... "; - if (file_exists($fn)){ - echo '[OK]'.PHP_EOL; - } else { - echo "[Failed!]".PHP_EOL; - exit; + if (!file_exists($fn)){ + $status = AirtimeCheck::CHECK_FAILED; } } //Since apache2 loads config files in alphabetical order //from the sites-enabled directory, we need to check if //airtime is lexically the first file in this directory. - //get sorted array of files $arr = scandir("/etc/apache2/sites-enabled"); + /* foreach ($arr as $a){ if ($a == "." || $a == ".."){ continue; @@ -204,28 +264,27 @@ class AirtimeCheck{ echo"\t\t /etc/apache2/sites-enabled and preventing airtime from being loaded".PHP_EOL; } } + */ } public static function CheckOsTypeVersion(){ - echo PHP_EOL."Checking operating system.".PHP_EOL; if (file_exists("/etc/lsb-release")){ + //lsb-release existing implies a Ubuntu installation. $ini = parse_ini_file("/etc/lsb-release", false); - - //lsb-release existing implies a Ubuntu installation. - echo "\tUbuntu based distribution found: ".$ini["DISTRIB_DESCRIPTION"].PHP_EOL; + $os_string = $ini["DISTRIB_DESCRIPTION"]; } else if (file_exists("/etc/debian_version")) { //if lsb-release does not exist, lets check if we are //running on Debian. Look for file /etc/debian_version $handler = fopen("/etc/debian_version", "r"); - - $version = trim(fgets($handler)); + $os_string = trim(fgets($handler)); - echo "\tDebian based distribution found: ".$version.PHP_EOL; } else { - echo "\tWARNING: Unknown OS Type".PHP_EOL; + $os_string = "Unknown"; } + + echo "OS_TYPE=$os_string".PHP_EOL; } }