CC-2284: Create script that verifies all required processes are running. Changes: made the output more pretty, added output for the status of apache, added ability to add in human readable messages, added detection of restarting processes, show output of logs if a process is restarting, and made the key names more human readable.

This commit is contained in:
paul.baranowski 2011-05-20 23:36:30 -04:00
parent bac9f270e2
commit a4188d44db

View file

@ -28,17 +28,29 @@ AirtimeCheck::CheckPypoRunning();
AirtimeCheck::CheckLiquidsoapRunning(); AirtimeCheck::CheckLiquidsoapRunning();
AirtimeCheck::CheckIcecastRunning(); AirtimeCheck::CheckIcecastRunning();
echo PHP_EOL;
if (AirtimeCheck::$check_system_ok){ if (AirtimeCheck::$check_system_ok){
echo PHP_EOL."System setup looks OK!".PHP_EOL; output_msg("System setup looks OK!");
} else { } else {
echo PHP_EOL."There appears to be problems with your setup. Please visit ".PHP_EOL output_msg("There appears to be problems with your setup. Please visit");
."http://wiki.sourcefabric.org/x/HABQ for troubleshooting info.".PHP_EOL; output_msg("http://wiki.sourcefabric.org/x/HABQ for troubleshooting info.");
} }
echo PHP_EOL; echo PHP_EOL;
function output_status($key, $value)
{
echo sprintf("%-31s= %s", $key, $value).PHP_EOL;
}
class AirtimeCheck{ function output_msg($msg)
{
//echo " -- ".PHP_EOL;
echo " -- $msg".PHP_EOL;
//echo " -- ".PHP_EOL;
}
class AirtimeCheck {
const CHECK_OK = "OK"; const CHECK_OK = "OK";
const CHECK_FAILED = "FAILED"; const CHECK_FAILED = "FAILED";
@ -59,7 +71,8 @@ class AirtimeCheck{
} }
} }
public static function CheckPypoRunning(){ public static function CheckPypoRunning()
{
$command = "sudo svstat /etc/service/pypo"; $command = "sudo svstat /etc/service/pypo";
exec($command, $output, $result); exec($command, $output, $result);
@ -77,7 +90,7 @@ class AirtimeCheck{
self::$check_system_ok = false; self::$check_system_ok = false;
} }
echo "PYPO_PID=".$status.PHP_EOL; output_status("PLAYOUT_ENGINE_PROCESS_ID", $status);
$status = AirtimeCheck::CHECK_FAILED; $status = AirtimeCheck::CHECK_FAILED;
$pos = strpos($value, ")"); $pos = strpos($value, ")");
@ -88,11 +101,20 @@ class AirtimeCheck{
} else { } else {
self::$check_system_ok = false; self::$check_system_ok = false;
} }
output_status("PLAYOUT_ENGINE_RUNNING_SECONDS", $status);
echo "PYPO_RUNNING_SECONDS=".$status.PHP_EOL; if ((int)$status < 3) {
self::$check_system_ok = false;
output_msg("WARNING! It looks like the playout engine is continually restarting.");
$command = "tail -10 /var/log/airtime/pypo/main/current";
exec($command, $output, $result);
foreach ($output as $line) {
output_msg($line);
}
}
} }
public static function CheckLiquidsoapRunning(){ public static function CheckLiquidsoapRunning()
{
$command = "sudo svstat /etc/service/pypo-liquidsoap"; $command = "sudo svstat /etc/service/pypo-liquidsoap";
exec($command, $output, $result); exec($command, $output, $result);
@ -109,7 +131,7 @@ class AirtimeCheck{
self::$check_system_ok = false; self::$check_system_ok = false;
} }
echo "LIQUIDSOAP_PID=".$status.PHP_EOL; output_status("LIQUIDSOAP_PROCESS_ID", $status);
$status = AirtimeCheck::CHECK_FAILED; $status = AirtimeCheck::CHECK_FAILED;
$pos = strpos($value, ")"); $pos = strpos($value, ")");
@ -121,10 +143,20 @@ class AirtimeCheck{
self::$check_system_ok = false; self::$check_system_ok = false;
} }
echo "LIQUIDSOAP_RUNNING_SECONDS=".$status.PHP_EOL; output_status("LIQUIDSOAP_RUNNING_SECONDS", $status);
if ((int)$status < 3) {
self::$check_system_ok = false;
output_msg("WARNING! It looks like liquidsoap is continually restarting.");
$command = "tail -10 /var/log/airtime/pypo-liquidsoap/main/current";
exec($command, $output, $result);
foreach ($output as $line) {
output_msg($line);
}
}
} }
public static function CheckIcecastRunning(){ public static function CheckIcecastRunning()
{
$command = "ps aux | grep \"^icecast2\""; $command = "ps aux | grep \"^icecast2\"";
exec($command, $output, $result); exec($command, $output, $result);
@ -135,10 +167,11 @@ class AirtimeCheck{
} else { } else {
self::$check_system_ok = false; self::$check_system_ok = false;
} }
echo "ICECAST_PID=$status".PHP_EOL; output_status("ICECAST_PROCESS_ID", $status);
} }
public static function CheckConfigFilesExist(){ 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", $confFiles = array("airtime.conf",
"liquidsoap.cfg", "liquidsoap.cfg",
@ -155,11 +188,12 @@ class AirtimeCheck{
} }
} }
echo "AIRTIME_CONFIG_FILES=$allFound".PHP_EOL; output_status("AIRTIME_CONFIG_FILES", $allFound);
} }
public static function GetAirtimeConf(){ public static function GetAirtimeConf()
{
$ini = parse_ini_file("/etc/airtime/airtime.conf", true); $ini = parse_ini_file("/etc/airtime/airtime.conf", true);
if ($ini === false){ if ($ini === false){
@ -170,7 +204,8 @@ class AirtimeCheck{
return $ini; return $ini;
} }
public static function GetPypoCfg(){ public static function GetPypoCfg()
{
$ini = parse_ini_file("/etc/airtime/pypo.cfg", false); $ini = parse_ini_file("/etc/airtime/pypo.cfg", false);
if ($ini === false){ if ($ini === false){
@ -181,7 +216,8 @@ class AirtimeCheck{
return $ini; return $ini;
} }
public static function GetDbConnection($airtimeIni){ public static function GetDbConnection($airtimeIni)
{
$host = $airtimeIni["database"]["host"]; $host = $airtimeIni["database"]["host"];
$dbname = $airtimeIni["database"]["dbname"]; $dbname = $airtimeIni["database"]["dbname"];
$dbuser = $airtimeIni["database"]["dbuser"]; $dbuser = $airtimeIni["database"]["dbuser"];
@ -196,10 +232,11 @@ class AirtimeCheck{
$status = AirtimeCheck::CHECK_OK; $status = AirtimeCheck::CHECK_OK;
} }
echo "PGSQL_DATABASE=$status".PHP_EOL; output_status("POSTGRESQL_DATABASE", $status);
} }
public static function PythonLibrariesInstalled(){ public static function PythonLibrariesInstalled()
{
$command = "pip freeze | grep kombu"; $command = "pip freeze | grep kombu";
exec($command, $output, $result); exec($command, $output, $result);
@ -211,7 +248,7 @@ class AirtimeCheck{
self::$check_system_ok = false; self::$check_system_ok = false;
} }
echo "PYTHON_KOMBU_VERSION=$status".PHP_EOL; output_status("PYTHON_KOMBU_VERSION", $status);
unset($output); unset($output);
$command = "pip freeze | grep poster"; $command = "pip freeze | grep poster";
@ -225,10 +262,11 @@ class AirtimeCheck{
self::$check_system_ok = false; self::$check_system_ok = false;
} }
echo "PYTHON_POSTER_VERSION=$status".PHP_EOL; output_status("PYTHON_POSTER_VERSION", $status);
} }
public static function CheckDbTables(){ public static function CheckDbTables()
{
} }
@ -259,7 +297,8 @@ class AirtimeCheck{
} }
* */ * */
public static function CheckRabbitMqConnection($airtimeIni){ public static function CheckRabbitMqConnection($airtimeIni)
{
try { try {
$status = AirtimeCheck::CHECK_OK; $status = AirtimeCheck::CHECK_OK;
$conn = new AMQPConnection($airtimeIni["rabbitmq"]["host"], $conn = new AMQPConnection($airtimeIni["rabbitmq"]["host"],
@ -271,32 +310,37 @@ class AirtimeCheck{
self::$check_system_ok = false; self::$check_system_ok = false;
} }
echo "RABBITMQ_SERVER=$status".PHP_EOL; output_status("RABBITMQ_SERVER", $status);
} }
public static function GetAirtimeServerVersion($pypoCfg){ public static function GetAirtimeServerVersion($pypoCfg)
{
$baseUrl = $pypoCfg["base_url"]; $baseUrl = $pypoCfg["base_url"];
$basePort = $pypoCfg["base_port"]; $basePort = $pypoCfg["base_port"];
$apiKey = "%%api_key%%"; $apiKey = "%%api_key%%";
$url = "http://$baseUrl:$basePort/api/version/api_key/$apiKey"; $url = "http://$baseUrl:$basePort/api/version/api_key/$apiKey";
echo "AIRTIME_VERSION_URL=$url".PHP_EOL; output_status("AIRTIME_VERSION_URL", $url);
$apiKey = $pypoCfg["api_key"]; $apiKey = $pypoCfg["api_key"];
$url = "http://$baseUrl:$basePort/api/version/api_key/$apiKey"; $url = "http://$baseUrl:$basePort/api/version/api_key/$apiKey";
$rh = fopen($url, "r"); $rh = fopen($url, "r");
if ($rh !== false){ $version = "Could not contact server";
if ($rh !== false) {
output_status("APACHE_CONFIGURED", "YES");
while (($buffer = fgets($rh)) !== false) { while (($buffer = fgets($rh)) !== false) {
$json = json_decode(trim($buffer), true); $json = json_decode(trim($buffer), true);
if (!is_null($json)){ if (!is_null($json)){
$version = $json["version"]; $version = $json["version"];
echo "AIRTIME_VERSION_STRING=$version".PHP_EOL;
} }
} }
} else {
output_status("APACHE_CONFIGURED", "NO");
} }
output_status("AIRTIME_VERSION", $version);
} }
public static function CheckApacheVHostFiles(){ public static function CheckApacheVHostFiles(){
@ -350,7 +394,7 @@ class AirtimeCheck{
$os_string = "Unknown"; $os_string = "Unknown";
} }
echo "OS_TYPE=$os_string".PHP_EOL; output_status("OS", $os_string);
} }
} }