CC-2284: Create script that verifies all required processes are running.
-Output is more machine-readable now.
This commit is contained in:
parent
f02795fac3
commit
a558955f05
1 changed files with 112 additions and 53 deletions
|
@ -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.
|
//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");
|
set_error_handler("myErrorHandler");
|
||||||
|
|
||||||
|
@ -14,41 +14,101 @@ $airtimeIni = AirtimeCheck::GetAirtimeConf();
|
||||||
$pypoCfg = AirtimeCheck::GetPypoCfg();
|
$pypoCfg = AirtimeCheck::GetPypoCfg();
|
||||||
|
|
||||||
AirtimeCheck::GetDbConnection($airtimeIni);
|
AirtimeCheck::GetDbConnection($airtimeIni);
|
||||||
AirtimeCheck::CheckRabbitMqVersion();
|
//AirtimeCheck::CheckRabbitMqVersion();
|
||||||
AirtimeCheck::CheckRabbitMqConnection($airtimeIni);
|
AirtimeCheck::CheckRabbitMqConnection($airtimeIni);
|
||||||
|
|
||||||
AirtimeCheck::CheckApacheVHostFiles();
|
AirtimeCheck::CheckApacheVHostFiles();
|
||||||
|
|
||||||
AirtimeCheck::GetAirtimeServerVersion($pypoCfg);
|
AirtimeCheck::GetAirtimeServerVersion($pypoCfg);
|
||||||
|
AirtimeCheck::CheckPypoRunning();
|
||||||
|
AirtimeCheck::CheckLiquidsoapRunning();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class AirtimeCheck{
|
class AirtimeCheck{
|
||||||
|
|
||||||
|
const CHECK_OK = "OK";
|
||||||
|
const CHECK_FAILED = "FAILED";
|
||||||
|
|
||||||
public static function CheckPypoRunning(){
|
public static function CheckPypoRunning(){
|
||||||
//check using svstat
|
//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(){
|
public static function CheckLiquidsoapRunning(){
|
||||||
//connect via telnet
|
//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(){
|
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",
|
||||||
"pypo.cfg",
|
"pypo.cfg",
|
||||||
"recorder.cfg");
|
"recorder.cfg");
|
||||||
|
|
||||||
|
$allFound = AirtimeCheck::CHECK_OK;
|
||||||
|
|
||||||
foreach ($confFiles as $cf){
|
foreach ($confFiles as $cf){
|
||||||
$fullPath = "/etc/airtime/$cf";
|
$fullPath = "/etc/airtime/$cf";
|
||||||
echo "\t".$fullPath." ... ";
|
//echo "\t".$fullPath." ... ";
|
||||||
if (file_exists($fullPath)){
|
if (!file_exists($fullPath)){
|
||||||
echo "[OK]".PHP_EOL;
|
$allFound = AirtimeCheck::CHECK_FAILED;
|
||||||
} else {
|
|
||||||
echo "Not Found!".PHP_EOL;
|
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "AIRTIME_CONFIG=$allFound".PHP_EOL;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function GetAirtimeConf(){
|
public static function GetAirtimeConf(){
|
||||||
|
@ -81,14 +141,15 @@ class AirtimeCheck{
|
||||||
|
|
||||||
$dbconn = pg_connect("host=$host port=5432 dbname=$dbname user=$dbuser password=$dbpass");
|
$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){
|
if ($dbconn === false){
|
||||||
echo "\tConnection ... [Failed!]".PHP_EOL;
|
$status = AirtimeCheck::CHECK_FAILED;
|
||||||
exit;
|
|
||||||
} else {
|
} else {
|
||||||
echo "\tConnection ... [OK]".PHP_EOL;
|
$status = AirtimeCheck::CHECK_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "TEST_PGSQL_DATABASE=$status".PHP_EOL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function CheckDbTables(){
|
public static function CheckDbTables(){
|
||||||
|
@ -100,6 +161,7 @@ class AirtimeCheck{
|
||||||
* and this function will fail to detect it! Unfortunately there
|
* and this function will fail to detect it! Unfortunately there
|
||||||
* seems to be no other way to check RabbitMQ version. Will update
|
* seems to be no other way to check RabbitMQ version. Will update
|
||||||
* this function if I find a more universal solution. */
|
* this function if I find a more universal solution. */
|
||||||
|
/*
|
||||||
public static function CheckRabbitMqVersion(){
|
public static function CheckRabbitMqVersion(){
|
||||||
echo PHP_EOL."Checking RabbitMQ Version".PHP_EOL;
|
echo PHP_EOL."Checking RabbitMQ Version".PHP_EOL;
|
||||||
|
|
||||||
|
@ -119,80 +181,78 @@ class AirtimeCheck{
|
||||||
echo "\trabbitmq-server package not found. [Failed!]".PHP_EOL;
|
echo "\trabbitmq-server package not found. [Failed!]".PHP_EOL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
* */
|
||||||
|
|
||||||
public static function CheckRabbitMqConnection($airtimeIni){
|
public static function CheckRabbitMqConnection($airtimeIni){
|
||||||
echo PHP_EOL."Verifying RabbitMQ Service".PHP_EOL;
|
//echo PHP_EOL."Verifying RabbitMQ Service".PHP_EOL;
|
||||||
try {
|
try {
|
||||||
|
$status = AirtimeCheck::CHECK_OK;
|
||||||
$conn = new AMQPConnection($airtimeIni["rabbitmq"]["host"],
|
$conn = new AMQPConnection($airtimeIni["rabbitmq"]["host"],
|
||||||
$airtimeIni["rabbitmq"]["port"],
|
$airtimeIni["rabbitmq"]["port"],
|
||||||
$airtimeIni["rabbitmq"]["user"],
|
$airtimeIni["rabbitmq"]["user"],
|
||||||
$airtimeIni["rabbitmq"]["password"]);
|
$airtimeIni["rabbitmq"]["password"]);
|
||||||
} catch (Exception $e){
|
} catch (Exception $e){
|
||||||
echo "\tConnection ... [Failed!]".PHP_EOL;
|
//echo "\tConnection ... [Failed!]".PHP_EOL;
|
||||||
exit;
|
//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){
|
public static function GetAirtimeServerVersion($pypoCfg){
|
||||||
|
|
||||||
echo PHP_EOL."Checking Airtime Server Version".PHP_EOL;
|
//echo PHP_EOL."Checking Airtime Server Version".PHP_EOL;
|
||||||
echo "\tConnecting to http://localhost/api/version".PHP_EOL;
|
|
||||||
|
|
||||||
$baseUrl = $pypoCfg["base_url"];
|
$baseUrl = $pypoCfg["base_url"];
|
||||||
$basePort = $pypoCfg["base_port"];
|
$basePort = $pypoCfg["base_port"];
|
||||||
$apiKey = $pypoCfg["api_key"];
|
$apiKey = "%%api_key%%";
|
||||||
|
|
||||||
$rh = fopen("http://$baseUrl:$basePort/api/version/api_key/$apiKey", "r");
|
$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($url, "r");
|
||||||
|
|
||||||
if ($rh !== false){
|
if ($rh !== false){
|
||||||
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)){
|
||||||
echo "NULL STRING".PHP_EOL;
|
//echo "\t\tAirtime Version ".$json["version"]." ... [OK] ".PHP_EOL;
|
||||||
|
$version = $json["version"];
|
||||||
} else {
|
echo "AIRTIME_VERSION_STRING=$version".PHP_EOL;
|
||||||
echo "\t\tAirtime Version ".$json["version"]." ... [OK] ".PHP_EOL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
echo "\t\tConnection ... [Failed!]".PHP_EOL;
|
//echo "\t\tConnection ... [Failed!]".PHP_EOL;
|
||||||
exit;
|
//exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleError($errno, $errstr,$error_file,$error_line)
|
|
||||||
{
|
|
||||||
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
|
|
||||||
echo "<br />";
|
|
||||||
echo "Terminating PHP Script";
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function CheckApacheVHostFiles(){
|
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",
|
$fileNames = array("/etc/apache2/sites-available/airtime",
|
||||||
"/etc/apache2/sites-enabled/airtime");
|
"/etc/apache2/sites-enabled/airtime");
|
||||||
|
|
||||||
|
$status = AirtimeCheck::CHECK_OK;
|
||||||
|
|
||||||
foreach ($fileNames as $fn){
|
foreach ($fileNames as $fn){
|
||||||
echo "\tChecking $fn ... ";
|
if (!file_exists($fn)){
|
||||||
if (file_exists($fn)){
|
$status = AirtimeCheck::CHECK_FAILED;
|
||||||
echo '[OK]'.PHP_EOL;
|
|
||||||
} else {
|
|
||||||
echo "[Failed!]".PHP_EOL;
|
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Since apache2 loads config files in alphabetical order
|
//Since apache2 loads config files in alphabetical order
|
||||||
//from the sites-enabled directory, we need to check if
|
//from the sites-enabled directory, we need to check if
|
||||||
//airtime is lexically the first file in this directory.
|
//airtime is lexically the first file in this directory.
|
||||||
|
|
||||||
//get sorted array of files
|
//get sorted array of files
|
||||||
$arr = scandir("/etc/apache2/sites-enabled");
|
$arr = scandir("/etc/apache2/sites-enabled");
|
||||||
|
|
||||||
|
/*
|
||||||
foreach ($arr as $a){
|
foreach ($arr as $a){
|
||||||
if ($a == "." || $a == ".."){
|
if ($a == "." || $a == ".."){
|
||||||
continue;
|
continue;
|
||||||
|
@ -204,28 +264,27 @@ class AirtimeCheck{
|
||||||
echo"\t\t /etc/apache2/sites-enabled and preventing airtime from being loaded".PHP_EOL;
|
echo"\t\t /etc/apache2/sites-enabled and preventing airtime from being loaded".PHP_EOL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function CheckOsTypeVersion(){
|
public static function CheckOsTypeVersion(){
|
||||||
echo PHP_EOL."Checking operating system.".PHP_EOL;
|
|
||||||
|
|
||||||
if (file_exists("/etc/lsb-release")){
|
if (file_exists("/etc/lsb-release")){
|
||||||
|
//lsb-release existing implies a Ubuntu installation.
|
||||||
|
|
||||||
$ini = parse_ini_file("/etc/lsb-release", false);
|
$ini = parse_ini_file("/etc/lsb-release", false);
|
||||||
|
$os_string = $ini["DISTRIB_DESCRIPTION"];
|
||||||
//lsb-release existing implies a Ubuntu installation.
|
|
||||||
echo "\tUbuntu based distribution found: ".$ini["DISTRIB_DESCRIPTION"].PHP_EOL;
|
|
||||||
} else if (file_exists("/etc/debian_version")) {
|
} else if (file_exists("/etc/debian_version")) {
|
||||||
//if lsb-release does not exist, lets check if we are
|
//if lsb-release does not exist, lets check if we are
|
||||||
//running on Debian. Look for file /etc/debian_version
|
//running on Debian. Look for file /etc/debian_version
|
||||||
$handler = fopen("/etc/debian_version", "r");
|
$handler = fopen("/etc/debian_version", "r");
|
||||||
|
$os_string = trim(fgets($handler));
|
||||||
|
|
||||||
$version = trim(fgets($handler));
|
|
||||||
|
|
||||||
echo "\tDebian based distribution found: ".$version.PHP_EOL;
|
|
||||||
} else {
|
} else {
|
||||||
echo "\tWARNING: Unknown OS Type".PHP_EOL;
|
$os_string = "Unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "OS_TYPE=$os_string".PHP_EOL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue