Merge branch '2.3.x' into devel
This commit is contained in:
commit
5ceeb88899
23 changed files with 394 additions and 118 deletions
2
VERSION
2
VERSION
|
@ -1,2 +1,2 @@
|
||||||
PRODUCT_ID=Airtime
|
PRODUCT_ID=Airtime
|
||||||
PRODUCT_RELEASE=2.3.0
|
PRODUCT_RELEASE=2.3.1
|
||||||
|
|
|
@ -698,7 +698,6 @@ class ApiController extends Zend_Controller_Action
|
||||||
"platform"=>Application_Model_Systemstatus::GetPlatformInfo(),
|
"platform"=>Application_Model_Systemstatus::GetPlatformInfo(),
|
||||||
"airtime_version"=>Application_Model_Preference::GetAirtimeVersion(),
|
"airtime_version"=>Application_Model_Preference::GetAirtimeVersion(),
|
||||||
"services"=>array(
|
"services"=>array(
|
||||||
"rabbitmq"=>Application_Model_Systemstatus::GetRabbitMqStatus(),
|
|
||||||
"pypo"=>Application_Model_Systemstatus::GetPypoStatus(),
|
"pypo"=>Application_Model_Systemstatus::GetPypoStatus(),
|
||||||
"liquidsoap"=>Application_Model_Systemstatus::GetLiquidsoapStatus(),
|
"liquidsoap"=>Application_Model_Systemstatus::GetLiquidsoapStatus(),
|
||||||
"media_monitor"=>Application_Model_Systemstatus::GetMediaMonitorStatus()
|
"media_monitor"=>Application_Model_Systemstatus::GetMediaMonitorStatus()
|
||||||
|
@ -996,7 +995,6 @@ class ApiController extends Zend_Controller_Action
|
||||||
$request = $this->getRequest();
|
$request = $this->getRequest();
|
||||||
$data = $request->getParam("data");
|
$data = $request->getParam("data");
|
||||||
$media_id = $request->getParam("media_id");
|
$media_id = $request->getParam("media_id");
|
||||||
|
|
||||||
$data_arr = json_decode($data);
|
$data_arr = json_decode($data);
|
||||||
|
|
||||||
if (!is_null($media_id)) {
|
if (!is_null($media_id)) {
|
||||||
|
|
|
@ -17,7 +17,6 @@ class SystemstatusController extends Zend_Controller_Action
|
||||||
"pypo"=>Application_Model_Systemstatus::GetPypoStatus(),
|
"pypo"=>Application_Model_Systemstatus::GetPypoStatus(),
|
||||||
"liquidsoap"=>Application_Model_Systemstatus::GetLiquidsoapStatus(),
|
"liquidsoap"=>Application_Model_Systemstatus::GetLiquidsoapStatus(),
|
||||||
"media-monitor"=>Application_Model_Systemstatus::GetMediaMonitorStatus(),
|
"media-monitor"=>Application_Model_Systemstatus::GetMediaMonitorStatus(),
|
||||||
"rabbitmq-server"=>Application_Model_Systemstatus::GetRabbitMqStatus()
|
|
||||||
);
|
);
|
||||||
|
|
||||||
$partitions = Application_Model_Systemstatus::GetDiskInfo();
|
$partitions = Application_Model_Systemstatus::GetDiskInfo();
|
||||||
|
|
|
@ -71,7 +71,7 @@ function showForIcecast(ele){
|
||||||
div.find("#outputMountpoint-element").show()
|
div.find("#outputMountpoint-element").show()
|
||||||
div.find("#outputUser-label").show()
|
div.find("#outputUser-label").show()
|
||||||
div.find("#outputUser-element").show()
|
div.find("#outputUser-element").show()
|
||||||
div.find("select[id$=data-type]").find("option[value='ogg']").attr("disabled","");
|
div.find("select[id$=data-type]").find("option[value='ogg']").removeAttr("disabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkLiquidsoapStatus(){
|
function checkLiquidsoapStatus(){
|
||||||
|
|
|
@ -208,14 +208,12 @@ if [ "$mediamonitor" = "t" -o "$pypo" = "t" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
/usr/lib/airtime/utils/rabbitmq-update-pid.sh > /dev/null
|
|
||||||
|
|
||||||
touch /usr/share/airtime/public/index.php
|
touch /usr/share/airtime/public/index.php
|
||||||
|
|
||||||
if [ "$python_service" -eq "0" ]; then
|
if [ "$python_service" -eq "0" ]; then
|
||||||
#only run airtime-check-system if all components were installed
|
#only run airtime-check-system if all components were installed
|
||||||
echo -e "\n*** Verifying your system environment, running airtime-check-system ***"
|
echo -e "\n*** Verifying your system environment, running airtime-check-system ***"
|
||||||
sleep 15
|
sleep 10
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
airtime-check-system --no-color
|
airtime-check-system --no-color
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
define('AIRTIME_VERSION', '2.3.0');
|
define('AIRTIME_VERSION', '2.3.1');
|
||||||
|
|
|
@ -57,7 +57,6 @@ invoke-rc.d monit restart
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
if [ "$mediamonitor" = "t" ]; then
|
if [ "$mediamonitor" = "t" ]; then
|
||||||
monit monitor airtime-media-monitor
|
monit monitor airtime-media-monitor
|
||||||
fi
|
fi
|
||||||
|
@ -65,6 +64,4 @@ if [ "$pypo" = "t" ]; then
|
||||||
monit monitor airtime-playout
|
monit monitor airtime-playout
|
||||||
monit monitor airtime-liquidsoap
|
monit monitor airtime-liquidsoap
|
||||||
fi
|
fi
|
||||||
|
|
||||||
monit monitor rabbitmq-server
|
|
||||||
set -e
|
set -e
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#-e Causes bash script to exit if any of the installers
|
|
||||||
#return with a non-zero return value.
|
|
||||||
|
|
||||||
if [[ $EUID -ne 0 ]]; then
|
if [[ $EUID -ne 0 ]]; then
|
||||||
echo "Please run as root user."
|
echo "Please run as root user."
|
||||||
|
@ -20,17 +18,9 @@ SCRIPTPATH=`dirname $SCRIPT`
|
||||||
|
|
||||||
AIRTIMEROOT=$SCRIPTPATH/../../
|
AIRTIMEROOT=$SCRIPTPATH/../../
|
||||||
|
|
||||||
#rm -f /etc/airtime/airtime.conf
|
|
||||||
#rm -f /etc/airtime/api_client.cfg
|
|
||||||
#rm -f /etc/airtime/recorder.cfg
|
|
||||||
#rm -f /etc/airtime/media-monitor.cfg
|
|
||||||
#rm -f /etc/airtime/pypo.cfg
|
|
||||||
#rm -f /etc/airtime/liquidsoap.cfg
|
|
||||||
|
|
||||||
rm -f /etc/cron.d/airtime-crons
|
rm -f /etc/cron.d/airtime-crons
|
||||||
|
rm -f /etc/monit/conf.d/monit-airtime*
|
||||||
#virtualenv_bin="/usr/lib/airtime/airtime_virtualenv/bin/"
|
rm -f /etc/logrotate.d/airtime-php
|
||||||
#. ${virtualenv_bin}activate
|
|
||||||
|
|
||||||
echo "* API Client"
|
echo "* API Client"
|
||||||
python $AIRTIMEROOT/python_apps/api_clients/install/api_client_uninstall.py
|
python $AIRTIMEROOT/python_apps/api_clients/install/api_client_uninstall.py
|
||||||
|
@ -38,8 +28,6 @@ echo "* Pypo"
|
||||||
python $AIRTIMEROOT/python_apps/pypo/install/pypo-remove-files.py
|
python $AIRTIMEROOT/python_apps/pypo/install/pypo-remove-files.py
|
||||||
echo "* Media-Monitor"
|
echo "* Media-Monitor"
|
||||||
python $AIRTIMEROOT/python_apps/media-monitor/install/media-monitor-remove-files.py
|
python $AIRTIMEROOT/python_apps/media-monitor/install/media-monitor-remove-files.py
|
||||||
#echo "* Show-Recorder"
|
|
||||||
#python $AIRTIMEROOT/python_apps/show-recorder/install/recorder-remove-files.py
|
|
||||||
|
|
||||||
#remove symlinks
|
#remove symlinks
|
||||||
rm -f /usr/bin/airtime-import
|
rm -f /usr/bin/airtime-import
|
||||||
|
@ -48,6 +36,7 @@ rm -f /usr/bin/airtime-check-system
|
||||||
rm -f /usr/bin/airtime-log
|
rm -f /usr/bin/airtime-log
|
||||||
rm -f /usr/bin/airtime-test-soundcard
|
rm -f /usr/bin/airtime-test-soundcard
|
||||||
rm -f /usr/bin/airtime-test-stream
|
rm -f /usr/bin/airtime-test-stream
|
||||||
|
rm -f /usr/bin/airtime-silan
|
||||||
|
|
||||||
rm -rf /usr/lib/airtime
|
rm -rf /usr/lib/airtime
|
||||||
rm -rf /usr/share/airtime
|
rm -rf /usr/share/airtime
|
||||||
|
|
|
@ -19,7 +19,6 @@ set +e
|
||||||
monit unmonitor airtime-media-monitor >/dev/null 2>&1
|
monit unmonitor airtime-media-monitor >/dev/null 2>&1
|
||||||
monit unmonitor airtime-liquidsoap >/dev/null 2>&1
|
monit unmonitor airtime-liquidsoap >/dev/null 2>&1
|
||||||
monit unmonitor airtime-playout >/dev/null 2>&1
|
monit unmonitor airtime-playout >/dev/null 2>&1
|
||||||
monit unmonitor rabbitmq-server
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
#virtualenv_bin="/usr/lib/airtime/airtime_virtualenv/bin/"
|
#virtualenv_bin="/usr/lib/airtime/airtime_virtualenv/bin/"
|
||||||
|
|
|
@ -108,4 +108,8 @@ if (strcmp($version, "2.3.0") < 0) {
|
||||||
passthru("php --php-ini $SCRIPTPATH/../airtime-php.ini $SCRIPTPATH/../upgrades/airtime-2.3.0/airtime-upgrade.php");
|
passthru("php --php-ini $SCRIPTPATH/../airtime-php.ini $SCRIPTPATH/../upgrades/airtime-2.3.0/airtime-upgrade.php");
|
||||||
pause();
|
pause();
|
||||||
}
|
}
|
||||||
|
if (strcmp($version, "2.3.1") < 0) {
|
||||||
|
passthru("php --php-ini $SCRIPTPATH/../airtime-php.ini $SCRIPTPATH/../upgrades/airtime-2.3.1/airtime-upgrade.php");
|
||||||
|
pause();
|
||||||
|
}
|
||||||
echo "******************************* Upgrade Complete *******************************".PHP_EOL;
|
echo "******************************* Upgrade Complete *******************************".PHP_EOL;
|
||||||
|
|
25
install_minimal/upgrades/airtime-2.3.1/DbUpgrade.php
Normal file
25
install_minimal/upgrades/airtime-2.3.1/DbUpgrade.php
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/* All functions other than start() should be marked as
|
||||||
|
* private.
|
||||||
|
*/
|
||||||
|
class AirtimeDatabaseUpgrade {
|
||||||
|
|
||||||
|
public static function start($p_dbValues){
|
||||||
|
echo "* Updating Database".PHP_EOL;
|
||||||
|
self::task0($p_dbValues);
|
||||||
|
echo " * Complete".PHP_EOL;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function task0($p_dbValues){
|
||||||
|
|
||||||
|
$username = $p_dbValues['database']['dbuser'];
|
||||||
|
$password = $p_dbValues['database']['dbpass'];
|
||||||
|
$host = $p_dbValues['database']['host'];
|
||||||
|
$database = $p_dbValues['database']['dbname'];
|
||||||
|
$dir = __DIR__;
|
||||||
|
|
||||||
|
//passthru("export PGPASSWORD=$password && psql -h $host -U $username -q -f $dir/data/schema.sql $database 2>&1 | grep -v \"will create implicit index\"");
|
||||||
|
passthru("export PGPASSWORD=$password && psql -h $host -U $username -q -f $dir/data/upgrade.sql $database 2>&1 | grep -v \"will create implicit index\"");
|
||||||
|
}
|
||||||
|
}
|
15
install_minimal/upgrades/airtime-2.3.1/airtime-upgrade.php
Normal file
15
install_minimal/upgrades/airtime-2.3.1/airtime-upgrade.php
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once 'DbUpgrade.php';
|
||||||
|
require_once 'common/UpgradeCommon.php';
|
||||||
|
|
||||||
|
$filename = "/etc/airtime/airtime.conf";
|
||||||
|
$values = parse_ini_file($filename, true);
|
||||||
|
|
||||||
|
//CC-5001: remove /etc/monit/conf.d/monit-airtime-rabbitmq-server.cfg on 2.3.1 upgrade
|
||||||
|
$file = "/etc/monit/conf.d/monit-airtime-rabbitmq-server.cfg";
|
||||||
|
if (file_exists($file)) {
|
||||||
|
unlink($file);
|
||||||
|
}
|
||||||
|
|
||||||
|
AirtimeDatabaseUpgrade::start($values);
|
312
install_minimal/upgrades/airtime-2.3.1/common/UpgradeCommon.php
Normal file
312
install_minimal/upgrades/airtime-2.3.1/common/UpgradeCommon.php
Normal file
|
@ -0,0 +1,312 @@
|
||||||
|
<?php
|
||||||
|
/* These are helper functions that are common to each upgrade such as
|
||||||
|
* creating connections to a database, backing up config files etc.
|
||||||
|
*/
|
||||||
|
class UpgradeCommon{
|
||||||
|
const CONF_FILE_AIRTIME = "/etc/airtime/airtime.conf";
|
||||||
|
const CONF_FILE_PYPO = "/etc/airtime/pypo.cfg";
|
||||||
|
const CONF_FILE_LIQUIDSOAP = "/etc/airtime/liquidsoap.cfg";
|
||||||
|
const CONF_FILE_MEDIAMONITOR = "/etc/airtime/media-monitor.cfg";
|
||||||
|
const CONF_FILE_API_CLIENT = "/etc/airtime/api_client.cfg";
|
||||||
|
|
||||||
|
const CONF_PYPO_GRP = "pypo";
|
||||||
|
const CONF_WWW_DATA_GRP = "www-data";
|
||||||
|
const CONF_BACKUP_SUFFIX = "231";
|
||||||
|
const VERSION_NUMBER = "2.3.1";
|
||||||
|
|
||||||
|
public static function SetDefaultTimezone()
|
||||||
|
{
|
||||||
|
$sql = "SELECT valstr from cc_pref WHERE keystr = 'timezone'";
|
||||||
|
|
||||||
|
$result = self::queryDb($sql);
|
||||||
|
$timezone = $result->fetchColumn();
|
||||||
|
|
||||||
|
date_default_timezone_set($timezone);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function connectToDatabase($p_exitOnError = true)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$con = Propel::getConnection();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo $e->getMessage().PHP_EOL;
|
||||||
|
echo "Database connection problem.".PHP_EOL;
|
||||||
|
echo "Check if database exists with corresponding permissions.".PHP_EOL;
|
||||||
|
if ($p_exitOnError) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static function DbTableExists($p_name)
|
||||||
|
{
|
||||||
|
$con = Propel::getConnection();
|
||||||
|
try {
|
||||||
|
$sql = "SELECT * FROM ".$p_name." LIMIT 1";
|
||||||
|
$con->query($sql);
|
||||||
|
} catch (PDOException $e){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function GetAirtimeSrcDir()
|
||||||
|
{
|
||||||
|
return __DIR__."/../../../../airtime_mvc";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function MigrateTablesToVersion($dir, $version)
|
||||||
|
{
|
||||||
|
echo "Upgrading database, may take several minutes, please wait".PHP_EOL;
|
||||||
|
|
||||||
|
$appDir = self::GetAirtimeSrcDir();
|
||||||
|
$command = "php --php-ini $dir/../../airtime-php.ini ".
|
||||||
|
"$appDir/library/doctrine/migrations/doctrine-migrations.phar ".
|
||||||
|
"--configuration=$dir/common/migrations.xml ".
|
||||||
|
"--db-configuration=$appDir/library/doctrine/migrations/migrations-db.php ".
|
||||||
|
"--no-interaction migrations:migrate $version";
|
||||||
|
system($command);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function BypassMigrations($dir, $version)
|
||||||
|
{
|
||||||
|
$appDir = self::GetAirtimeSrcDir();
|
||||||
|
$command = "php --php-ini $dir/../../airtime-php.ini ".
|
||||||
|
"$appDir/library/doctrine/migrations/doctrine-migrations.phar ".
|
||||||
|
"--configuration=$dir/common/migrations.xml ".
|
||||||
|
"--db-configuration=$appDir/library/doctrine/migrations/migrations-db.php ".
|
||||||
|
"--no-interaction --add migrations:version $version";
|
||||||
|
system($command);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function upgradeConfigFiles(){
|
||||||
|
|
||||||
|
$configFiles = array(UpgradeCommon::CONF_FILE_AIRTIME,
|
||||||
|
UpgradeCommon::CONF_FILE_PYPO,
|
||||||
|
//this is not necessary because liquidsoap configs
|
||||||
|
//are automatically generated
|
||||||
|
//UpgradeCommon::CONF_FILE_LIQUIDSOAP,
|
||||||
|
UpgradeCommon::CONF_FILE_MEDIAMONITOR,
|
||||||
|
UpgradeCommon::CONF_FILE_API_CLIENT);
|
||||||
|
|
||||||
|
// Backup the config files
|
||||||
|
$suffix = date("Ymdhis")."-".UpgradeCommon::VERSION_NUMBER;
|
||||||
|
foreach ($configFiles as $conf) {
|
||||||
|
// do not back up monit cfg -- ok?? not being done anyway
|
||||||
|
if (file_exists($conf)) {
|
||||||
|
echo "Backing up $conf to $conf$suffix.bak".PHP_EOL;
|
||||||
|
//copy($conf, $conf.$suffix.".bak");
|
||||||
|
exec("cp -p $conf $conf$suffix.bak"); //use cli version to preserve file attributes
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self::CreateIniFiles(UpgradeCommon::CONF_BACKUP_SUFFIX);
|
||||||
|
self::MergeConfigFiles($configFiles, $suffix);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function creates the /etc/airtime configuration folder
|
||||||
|
* and copies the default config files to it.
|
||||||
|
*/
|
||||||
|
public static function CreateIniFiles($suffix)
|
||||||
|
{
|
||||||
|
if (!file_exists("/etc/airtime/")){
|
||||||
|
if (!mkdir("/etc/airtime/", 0755, true)){
|
||||||
|
echo "Could not create /etc/airtime/ directory. Exiting.";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$config_copy = array(
|
||||||
|
"../etc/airtime.conf" => self::CONF_FILE_AIRTIME,
|
||||||
|
"../etc/pypo.cfg" => self::CONF_FILE_PYPO,
|
||||||
|
"../etc/media-monitor.cfg" => self::CONF_FILE_MEDIAMONITOR,
|
||||||
|
"../etc/api_client.cfg" => self::CONF_FILE_API_CLIENT
|
||||||
|
);
|
||||||
|
|
||||||
|
echo "Copying configs:\n";
|
||||||
|
foreach ($config_copy as $path_part => $destination) {
|
||||||
|
$full_path = OsPath::normpath(OsPath::join(__DIR__,
|
||||||
|
"$path_part.$suffix"));
|
||||||
|
echo "'$full_path' --> '$destination'\n";
|
||||||
|
if(!copy($full_path, $destination)) {
|
||||||
|
echo "Failed on the copying operation above\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function MergeConfigFiles(array $configFiles, $suffix) {
|
||||||
|
foreach ($configFiles as $conf) {
|
||||||
|
if (file_exists("$conf$suffix.bak")) {
|
||||||
|
|
||||||
|
if($conf === self::CONF_FILE_AIRTIME) {
|
||||||
|
// Parse with sections
|
||||||
|
$newSettings = parse_ini_file($conf, true);
|
||||||
|
$oldSettings = parse_ini_file("$conf$suffix.bak", true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$newSettings = self::ReadPythonConfig($conf);
|
||||||
|
$oldSettings = self::ReadPythonConfig("$conf$suffix.bak");
|
||||||
|
}
|
||||||
|
|
||||||
|
$settings = array_keys($newSettings);
|
||||||
|
|
||||||
|
foreach($settings as $section) {
|
||||||
|
if(isset($oldSettings[$section])) {
|
||||||
|
if(is_array($oldSettings[$section])) {
|
||||||
|
$sectionKeys = array_keys($newSettings[$section]);
|
||||||
|
foreach($sectionKeys as $sectionKey) {
|
||||||
|
|
||||||
|
if(isset($oldSettings[$section][$sectionKey])) {
|
||||||
|
self::UpdateIniValue($conf, $sectionKey,
|
||||||
|
$oldSettings[$section][$sectionKey]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self::UpdateIniValue($conf, $section,
|
||||||
|
$oldSettings[$section]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function ReadPythonConfig($p_filename)
|
||||||
|
{
|
||||||
|
$values = array();
|
||||||
|
|
||||||
|
$fh = fopen($p_filename, 'r');
|
||||||
|
|
||||||
|
while(!feof($fh)){
|
||||||
|
$line = fgets($fh);
|
||||||
|
if(substr(trim($line), 0, 1) == '#' || trim($line) == ""){
|
||||||
|
continue;
|
||||||
|
}else{
|
||||||
|
$info = explode('=', $line, 2);
|
||||||
|
$values[trim($info[0])] = trim($info[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function updates an INI style config file.
|
||||||
|
*
|
||||||
|
* A property and the value the property should be changed to are
|
||||||
|
* supplied. If the property is not found, then no changes are made.
|
||||||
|
*
|
||||||
|
* @param string $p_filename
|
||||||
|
* The path the to the file.
|
||||||
|
* @param string $p_property
|
||||||
|
* The property to look for in order to change its value.
|
||||||
|
* @param string $p_value
|
||||||
|
* The value the property should be changed to.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static function UpdateIniValue($p_filename, $p_property, $p_value)
|
||||||
|
{
|
||||||
|
$lines = file($p_filename);
|
||||||
|
$n = count($lines);
|
||||||
|
foreach ($lines as &$line) {
|
||||||
|
if ($line[0] != "#"){
|
||||||
|
$key_value = explode("=", $line);
|
||||||
|
$key = trim($key_value[0]);
|
||||||
|
|
||||||
|
if ($key == $p_property){
|
||||||
|
$line = "$p_property = $p_value".PHP_EOL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$fp=fopen($p_filename, 'w');
|
||||||
|
for($i=0; $i<$n; $i++){
|
||||||
|
fwrite($fp, $lines[$i]);
|
||||||
|
}
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function queryDb($p_sql){
|
||||||
|
$con = Propel::getConnection();
|
||||||
|
|
||||||
|
try {
|
||||||
|
$result = $con->query($p_sql);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo "Error executing $p_sql. Exiting.";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class OsPath {
|
||||||
|
// this function is from http://stackoverflow.com/questions/2670299/is-there-a-php-equivalent-function-to-the-python-os-path-normpath
|
||||||
|
public static function normpath($path)
|
||||||
|
{
|
||||||
|
if (empty($path))
|
||||||
|
return '.';
|
||||||
|
|
||||||
|
if (strpos($path, '/') === 0)
|
||||||
|
$initial_slashes = true;
|
||||||
|
else
|
||||||
|
$initial_slashes = false;
|
||||||
|
if (
|
||||||
|
($initial_slashes) &&
|
||||||
|
(strpos($path, '//') === 0) &&
|
||||||
|
(strpos($path, '///') === false)
|
||||||
|
)
|
||||||
|
$initial_slashes = 2;
|
||||||
|
$initial_slashes = (int) $initial_slashes;
|
||||||
|
|
||||||
|
$comps = explode('/', $path);
|
||||||
|
$new_comps = array();
|
||||||
|
foreach ($comps as $comp)
|
||||||
|
{
|
||||||
|
if (in_array($comp, array('', '.')))
|
||||||
|
continue;
|
||||||
|
if (
|
||||||
|
($comp != '..') ||
|
||||||
|
(!$initial_slashes && !$new_comps) ||
|
||||||
|
($new_comps && (end($new_comps) == '..'))
|
||||||
|
)
|
||||||
|
array_push($new_comps, $comp);
|
||||||
|
elseif ($new_comps)
|
||||||
|
array_pop($new_comps);
|
||||||
|
}
|
||||||
|
$comps = $new_comps;
|
||||||
|
$path = implode('/', $comps);
|
||||||
|
if ($initial_slashes)
|
||||||
|
$path = str_repeat('/', $initial_slashes) . $path;
|
||||||
|
if ($path)
|
||||||
|
return $path;
|
||||||
|
else
|
||||||
|
return '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Similar to the os.path.join python method
|
||||||
|
* http://stackoverflow.com/a/1782990/276949 */
|
||||||
|
public static function join() {
|
||||||
|
$args = func_get_args();
|
||||||
|
$paths = array();
|
||||||
|
|
||||||
|
foreach($args as $arg) {
|
||||||
|
$paths = array_merge($paths, (array)$arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach($paths as &$path) {
|
||||||
|
$path = trim($path, DIRECTORY_SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($args[0], 0, 1) == DIRECTORY_SEPARATOR) {
|
||||||
|
$paths[0] = DIRECTORY_SEPARATOR . $paths[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return join(DIRECTORY_SEPARATOR, $paths);
|
||||||
|
}
|
||||||
|
}
|
2
install_minimal/upgrades/airtime-2.3.1/data/upgrade.sql
Normal file
2
install_minimal/upgrades/airtime-2.3.1/data/upgrade.sql
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
DELETE FROM cc_pref WHERE keystr = 'system_version';
|
||||||
|
INSERT INTO cc_pref (keystr, valstr) VALUES ('system_version', '2.3.1');
|
|
@ -15,7 +15,7 @@ import json
|
||||||
import base64
|
import base64
|
||||||
from configobj import ConfigObj
|
from configobj import ConfigObj
|
||||||
|
|
||||||
AIRTIME_VERSION = "2.3.0"
|
AIRTIME_VERSION = "2.3.1"
|
||||||
|
|
||||||
|
|
||||||
# TODO : Place these functions in some common module. Right now, media
|
# TODO : Place these functions in some common module. Right now, media
|
||||||
|
|
|
@ -13,5 +13,7 @@ try:
|
||||||
print "OK"
|
print "OK"
|
||||||
else:
|
else:
|
||||||
print "Wasn't running"
|
print "Wasn't running"
|
||||||
|
|
||||||
|
subprocess.call("update-rc.d -f airtime-media-monitor remove".split(" "))
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
print e
|
print e
|
||||||
|
|
|
@ -17,15 +17,7 @@ DAEMON=/usr/lib/airtime/pypo/bin/airtime-liquidsoap
|
||||||
PIDFILE=/var/run/airtime-liquidsoap.pid
|
PIDFILE=/var/run/airtime-liquidsoap.pid
|
||||||
|
|
||||||
start () {
|
start () {
|
||||||
chown pypo:pypo /var/log/airtime/pypo
|
start_no_monit
|
||||||
chown pypo:pypo /var/log/airtime/pypo-liquidsoap
|
|
||||||
|
|
||||||
touch /var/run/airtime-liquidsoap.pid
|
|
||||||
chown pypo:pypo /var/run/airtime-liquidsoap.pid
|
|
||||||
|
|
||||||
start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
|
|
||||||
--pidfile /var/run/airtime-liquidsoap.pid --nicelevel -15 --startas $DAEMON
|
|
||||||
|
|
||||||
monit monitor airtime-liquidsoap >/dev/null 2>&1
|
monit monitor airtime-liquidsoap >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +31,14 @@ stop () {
|
||||||
}
|
}
|
||||||
|
|
||||||
start_no_monit() {
|
start_no_monit() {
|
||||||
start-stop-daemon --start --background --quiet --chuid $USERID:$USERID --make-pidfile --pidfile $PIDFILE --startas $DAEMON
|
chown pypo:pypo /var/log/airtime/pypo
|
||||||
|
chown pypo:pypo /var/log/airtime/pypo-liquidsoap
|
||||||
|
|
||||||
|
touch /var/run/airtime-liquidsoap.pid
|
||||||
|
chown pypo:pypo /var/run/airtime-liquidsoap.pid
|
||||||
|
|
||||||
|
start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
|
||||||
|
--pidfile /var/run/airtime-liquidsoap.pid --nicelevel -15 --startas $DAEMON
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,5 +25,9 @@ try:
|
||||||
print "OK"
|
print "OK"
|
||||||
else:
|
else:
|
||||||
print "Wasn't running"
|
print "Wasn't running"
|
||||||
|
|
||||||
|
subprocess.call("update-rc.d -f airtime-playout remove".split(" "))
|
||||||
|
subprocess.call("update-rc.d -f airtime-liquidsoap remove".split(" "))
|
||||||
|
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
print e
|
print e
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
from configobj import ConfigObj
|
|
||||||
|
|
||||||
if os.geteuid() != 0:
|
|
||||||
print "Please run this as root."
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
PATH_INI_FILE = '/etc/airtime/pypo.cfg'
|
|
||||||
|
|
||||||
def remove_path(path):
|
|
||||||
os.system('rm -rf "%s"' % path)
|
|
||||||
|
|
||||||
def get_current_script_dir():
|
|
||||||
current_script_dir = os.path.realpath(__file__)
|
|
||||||
index = current_script_dir.rindex('/')
|
|
||||||
return current_script_dir[0:index]
|
|
||||||
|
|
||||||
def remove_monit_file():
|
|
||||||
os.system("rm -f /etc/monit/conf.d/monit-airtime-playout.cfg")
|
|
||||||
os.system("rm -f /etc/monit/conf.d/monit-airtime-liquidsoap.cfg")
|
|
||||||
|
|
||||||
try:
|
|
||||||
# load config file
|
|
||||||
try:
|
|
||||||
config = ConfigObj(PATH_INI_FILE)
|
|
||||||
except Exception, e:
|
|
||||||
print 'Error loading config file: ', e
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
os.system("invoke-rc.d airtime-playout stop")
|
|
||||||
os.system("invoke-rc.d airtime-liquidsoap stop")
|
|
||||||
|
|
||||||
os.system("rm -f /etc/init.d/airtime-playout")
|
|
||||||
os.system("rm -f /etc/init.d/airtime-liquidsoap")
|
|
||||||
|
|
||||||
os.system("update-rc.d -f airtime-playout remove >/dev/null 2>&1")
|
|
||||||
os.system("update-rc.d -f airtime-liquidsoap remove >/dev/null 2>&1")
|
|
||||||
|
|
||||||
#remove logrotate script
|
|
||||||
os.system("rm -f /etc/logrotate.d/airtime-liquidsoap")
|
|
||||||
|
|
||||||
print "Removing monit file"
|
|
||||||
remove_monit_file()
|
|
||||||
|
|
||||||
print "Removing cache directories"
|
|
||||||
remove_path(config["cache_base_dir"])
|
|
||||||
|
|
||||||
print "Removing symlinks"
|
|
||||||
os.system("rm -f /usr/bin/airtime-liquidsoap")
|
|
||||||
|
|
||||||
print "Removing pypo files"
|
|
||||||
remove_path(config["bin_dir"])
|
|
||||||
|
|
||||||
print "Pypo uninstall complete."
|
|
||||||
except Exception, e:
|
|
||||||
print "exception:" + str(e)
|
|
|
@ -1,6 +1,6 @@
|
||||||
def notify(m)
|
def notify(m)
|
||||||
#current_media_id := string_of(m['schedule_table_id'])
|
#current_media_id := string_of(m['schedule_table_id'])
|
||||||
command = "/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --data='#{!pypo_data}' --media-id=#{m['schedule_table_id']} &"
|
command = "/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --media-id=#{m['schedule_table_id']} &"
|
||||||
log(command)
|
log(command)
|
||||||
system(command)
|
system(command)
|
||||||
end
|
end
|
||||||
|
@ -78,14 +78,16 @@ def output_to(output_type, type, bitrate, host, port, pass, mount_point, url, de
|
||||||
source = ref s
|
source = ref s
|
||||||
def on_error(msg)
|
def on_error(msg)
|
||||||
connected := "false"
|
connected := "false"
|
||||||
system("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --error='#{msg}' --stream-id=#{stream} --time=#{!time} &")
|
command = "/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --error='#{msg}' --stream-id=#{stream} --time=#{!time} &"
|
||||||
log("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --error='#{msg}' --stream-id=#{stream} --time=#{!time} &")
|
system(command)
|
||||||
|
log(command)
|
||||||
5.
|
5.
|
||||||
end
|
end
|
||||||
def on_connect()
|
def on_connect()
|
||||||
connected := "true"
|
connected := "true"
|
||||||
system("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --connect --stream-id=#{stream} --time=#{!time} &")
|
command = "/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --connect --stream-id=#{stream} --time=#{!time} &"
|
||||||
log("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --connect --stream-id=#{stream} --time=#{!time} &")
|
system(command)
|
||||||
|
log(command)
|
||||||
end
|
end
|
||||||
|
|
||||||
stereo = (channels == "stereo")
|
stereo = (channels == "stereo")
|
||||||
|
|
|
@ -154,8 +154,9 @@ def make_scheduled_play_unavailable()
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_source_status(sourcename, status) =
|
def update_source_status(sourcename, status) =
|
||||||
system("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --source-name=#{sourcename} --source-status=#{status} &")
|
command = "/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --source-name=#{sourcename} --source-status=#{status} &"
|
||||||
log("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --source-name=#{sourcename} --source-status=#{status} &")
|
system(command)
|
||||||
|
log(command)
|
||||||
end
|
end
|
||||||
|
|
||||||
def live_dj_connect(header) =
|
def live_dj_connect(header) =
|
||||||
|
|
|
@ -12,5 +12,5 @@
|
||||||
if failed host localhost port 1234
|
if failed host localhost port 1234
|
||||||
send "version\r\nexit\r\n"
|
send "version\r\nexit\r\n"
|
||||||
expect "Liquidsoap"
|
expect "Liquidsoap"
|
||||||
retry 3
|
with timeout 2 seconds retry 3 for 2 cycles
|
||||||
then restart
|
then restart
|
||||||
|
|
|
@ -205,17 +205,6 @@ class AirtimeCheck {
|
||||||
$log = "/var/log/airtime/media-monitor/media-monitor.log";
|
$log = "/var/log/airtime/media-monitor/media-monitor.log";
|
||||||
self::show_log_file($log);
|
self::show_log_file($log);
|
||||||
}
|
}
|
||||||
if (isset($services->rabbitmq)) {
|
|
||||||
self::output_status("RABBITMQ_PROCESS_ID", $data->services->rabbitmq->process_id);
|
|
||||||
self::output_status("RABBITMQ_RUNNING_SECONDS", $data->services->rabbitmq->uptime_seconds);
|
|
||||||
self::output_status("RABBITMQ_MEM_PERC", $data->services->rabbitmq->memory_perc);
|
|
||||||
self::output_status("RABBITMQ_CPU_PERC", $data->services->rabbitmq->cpu_perc);
|
|
||||||
} else {
|
|
||||||
self::output_status("RABBITMQ_PROCESS_ID", "FAILED");
|
|
||||||
self::output_status("RABBITMQ_RUNNING_SECONDS", "0");
|
|
||||||
self::output_status("RABBITMQ_MEM_PERC", "0%");
|
|
||||||
self::output_status("RABBITMQ_CPU_PERC", "0%");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self::$AIRTIME_STATUS_OK){
|
if (self::$AIRTIME_STATUS_OK){
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue