diff --git a/airtime_mvc/application/models/airtime/CcShowInstances.php b/airtime_mvc/application/models/airtime/CcShowInstances.php index ae442a0b4..bdf6164e3 100644 --- a/airtime_mvc/application/models/airtime/CcShowInstances.php +++ b/airtime_mvc/application/models/airtime/CcShowInstances.php @@ -5,7 +5,7 @@ /** * Skeleton subclass for representing a row from the 'cc_show_instances' table. * - * + * * * You should add additional methods to this class to meet the * application requirements. This class will only be generated as @@ -15,4 +15,25 @@ */ class CcShowInstances extends BaseCcShowInstances { + public function computeDbTimeFilled(PropelPDO $con) + { + $stmt = $con->prepare('SELECT SUM(clip_length) FROM "cc_schedule" WHERE cc_schedule.INSTANCE_ID = :p1'); + $stmt->bindValue(':p1', $this->getDbId()); + $stmt->execute(); + $result = $stmt->fetchColumn(); + + //$result is in the form H:i:s.u + //patch fix for the current problem of > 23:59:59.99 for a show content + //which causes problems with a time without timezone column type + + try { + $dt = new DateTime($result); + } + catch(Exception $e) { + $result = "23:59:59"; + } + + return $result; + } + } // CcShowInstances diff --git a/install_minimal/upgrades/airtime-2.0.0/UpgradeCommon.php b/install_minimal/upgrades/airtime-2.0.0/UpgradeCommon.php index 13836d6cd..ee638adfa 100644 --- a/install_minimal/upgrades/airtime-2.0.0/UpgradeCommon.php +++ b/install_minimal/upgrades/airtime-2.0.0/UpgradeCommon.php @@ -234,4 +234,16 @@ class UpgradeCommon{ } fclose($fp); } + + public static function queryDb($p_sql){ + global $CC_DBC; + + $result = $CC_DBC->query($p_sql); + if (PEAR::isError($result)) { + echo "Error executing $sql. Exiting."; + exit(1); + } + + return $result; + } } diff --git a/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php b/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php index 48f9a6b58..69c35175a 100644 --- a/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php +++ b/install_minimal/upgrades/airtime-2.0.0/airtime-upgrade.php @@ -32,8 +32,10 @@ class AirtimeDatabaseUpgrade{ public static function start(){ self::doDbMigration(); - self::SetDefaultTimezone(); self::setPhpDefaultTimeZoneToSystemTimezone(); + self::SetDefaultTimezone(); + + echo "* Converting database to store all schedule times in UTC. This may take a a while...".PHP_EOL; self::convert_cc_playlist(); self::convert_cc_schedule(); self::convert_cc_show_days(); @@ -69,7 +71,29 @@ class AirtimeDatabaseUpgrade{ } private static function convert_cc_playlist(){ - /* cc_playlist has a field that keeps track of when the playlist was last modified. */ + echo " * Converting playlists to UTC".PHP_EOL; + + $sql = "SELECT * FROM cc_playlist"; + $result = UpgradeCommon::queryDb($sql); + + while ($result->fetchInto($row, DB_FETCHMODE_ASSOC)){ + $dt = new DateTime($row['mtime'], new DateTimeZone(date_default_timezone_get())); + $dt->setTimezone(new DateTimeZone("UTC")); + + $id = $row['id']; + $mtime = $dt->format("Y-m-d H:i:s"); + + $sql = "UPDATE cc_playlist SET mtime = '$mtime' WHERE id = $id"; + UpgradeCommon::queryDb($sql); + //echo "."; + //flush(); + //usleep(100000); + } + + + /* + echo " * Converting playlists to UTC".PHP_EOL; + // cc_playlist has a field that keeps track of when the playlist was last modified. $playlists = CcPlaylistQuery::create()->find(); foreach ($playlists as $pl){ @@ -78,11 +102,39 @@ class AirtimeDatabaseUpgrade{ $pl->setDbMtime($dt); $pl->save(); + } + */ } private static function convert_cc_schedule(){ - /* cc_schedule has start and end fields that need to be changed to UTC. */ + + echo " * Converting schedule to UTC".PHP_EOL; + + $sql = "SELECT * FROM cc_schedule"; + $result = UpgradeCommon::queryDb($sql); + + while ($result->fetchInto($row, DB_FETCHMODE_ASSOC)){ + $dtStarts = new DateTime($row['starts'], new DateTimeZone(date_default_timezone_get())); + $dtStarts->setTimezone(new DateTimeZone("UTC")); + + $dtEnds = new DateTime($row['ends'], new DateTimeZone(date_default_timezone_get())); + $dtEnds->setTimezone(new DateTimeZone("UTC")); + + $id = $row['id']; + $starts = $dtStarts->format("Y-m-d H:i:s"); + $ends = $dtEnds->format("Y-m-d H:i:s"); + + $sql = "UPDATE cc_schedule SET starts = '$starts', ends = '$ends' WHERE id = $id"; + UpgradeCommon::queryDb($sql); + //echo "."; + //flush(); + //usleep(100000); + } + /* + + echo " * Converting schedule to UTC".PHP_EOL; + //cc_schedule has start and end fields that need to be changed to UTC. $schedules = CcScheduleQuery::create()->find(); foreach ($schedules as $s){ @@ -95,35 +147,69 @@ class AirtimeDatabaseUpgrade{ $s->setDbEnds($dt); $s->save(); + echo "."; } + * */ } private static function convert_cc_show_days(){ - /* cc_show_days has first_show, last_show and start_time fields that need to be changed to UTC. */ + + echo " * Converting show days to UTC".PHP_EOL; + + $sql = "SELECT * FROM cc_show_days"; + $result = UpgradeCommon::queryDb($sql); + + while ($result->fetchInto($row, DB_FETCHMODE_ASSOC)){ + + $id = $row['id']; + $timezone = date_default_timezone_get(); + + $sql = "UPDATE cc_show_days SET timezone = '$timezone' WHERE id = $id"; + UpgradeCommon::queryDb($sql); + //echo "."; + //flush(); + //usleep(100000); + } + + /* + // cc_show_days has first_show, last_show and start_time fields that need to be changed to UTC. $showDays = CcShowDaysQuery::create()->find(); - foreach ($showDays as $sd){ - /* - $dt = new DateTime($sd->getDbFirstShow()." ".$sd->getDbStartTime(), new DateTimeZone(date_default_timezone_get())); - $dt->setTimezone(new DateTimeZone("UTC")); - $sd->setDbFirstShow($dt->format("Y-m-d")); - $sd->setDbStartTime($dt->format("H:i:s")); - - $dt = new DateTime($sd->getDbLastShow()." ".$sd->getDbStartTime(), new DateTimeZone(date_default_timezone_get())); - $dt->setTimezone(new DateTimeZone("UTC")); - $sd->setDbLastShow($dt->format("Y-m-d")); - - $sd->save(); - * */ - + foreach ($showDays as $sd){ $sd->setDbTimezone(date_default_timezone_get())->save(); - + echo "."; } + */ } private static function convert_cc_show_instances(){ - /* convert_cc_show_instances has starts and ends fields that need to be changed to UTC. */ + echo " * Converting show instances to UTC".PHP_EOL; + + // convert_cc_show_instances has starts and ends fields that need to be changed to UTC. + + $sql = "SELECT * FROM cc_show_instances"; + $result = UpgradeCommon::queryDb($sql); + + while ($result->fetchInto($row, DB_FETCHMODE_ASSOC)){ + $dtStarts = new DateTime($row['starts'], new DateTimeZone(date_default_timezone_get())); + $dtStarts->setTimezone(new DateTimeZone("UTC")); + + $dtEnds = new DateTime($row['ends'], new DateTimeZone(date_default_timezone_get())); + $dtEnds->setTimezone(new DateTimeZone("UTC")); + + $id = $row['id']; + $starts = $dtStarts->format("Y-m-d H:i:s"); + $ends = $dtEnds->format("Y-m-d H:i:s"); + + $sql = "UPDATE cc_show_instances SET starts = '$starts', ends = '$ends' WHERE id = $id"; + UpgradeCommon::queryDb($sql); + //echo "."; + //flush(); + //usleep(100000); + } + + /* $showInstances = CcShowInstancesQuery::create()->find(); foreach ($showInstances as $si){ @@ -136,7 +222,10 @@ class AirtimeDatabaseUpgrade{ $si->setDbEnds($dt); $si->save(); + + echo "."; } + * */ } private static function doDbMigration(){ @@ -356,9 +445,17 @@ class AirtimeMiscUpgrade{ } } +echo "Pausing Pypo".PHP_EOL; +exec("/etc/init.d/airtime-playout stop"); + +while (@ob_end_flush()); + UpgradeCommon::connectToDatabase(); AirtimeDatabaseUpgrade::start(); AirtimeStorWatchedDirsUpgrade::start(); AirtimeConfigFileUpgrade::start(); AirtimeMiscUpgrade::start(); + +//echo "Resuming Pypo".PHP_EOL; +//exec("/etc/init.d/airtime-playout start"); diff --git a/python_apps/pypo/install/pypo-initialize.py b/python_apps/pypo/install/pypo-initialize.py index 9df8245aa..4fce8f81c 100644 --- a/python_apps/pypo/install/pypo-initialize.py +++ b/python_apps/pypo/install/pypo-initialize.py @@ -106,13 +106,13 @@ try: print "* Waiting for pypo processes to start..." if os.environ["liquidsoap_keep_alive"] == "f": print " * Restarting any previous Liquidsoap instances" - p = Popen("/etc/init.d/airtime-playout stop", shell=True) + p = Popen("/etc/init.d/airtime-playout stop > /dev/null 2>&1", shell=True) sts = os.waitpid(p.pid, 0)[1] else: print " * Keeping any previous Liquidsoap instances running" - p = Popen("/etc/init.d/airtime-playout pypo-stop", shell=True) + p = Popen("/etc/init.d/airtime-playout pypo-stop > /dev/null 2>&1", shell=True) sts = os.waitpid(p.pid, 0)[1] - p = Popen("/etc/init.d/airtime-playout start-no-monit", shell=True) + p = Popen("/etc/init.d/airtime-playout start-no-monit > /dev/null 2>&1", shell=True) sts = os.waitpid(p.pid, 0)[1] except Exception, e: diff --git a/utils/airtime-update-db-settings.py b/utils/airtime-update-db-settings.py index ff292a460..d28322fb1 100644 --- a/utils/airtime-update-db-settings.py +++ b/utils/airtime-update-db-settings.py @@ -2,7 +2,7 @@ The purpose of this script is to consolidate into one location where we need to update database host, dbname, username and password. -This script reads from airtime.conf. +This script reads from /etc/airtime/airtime.conf. """ import os import sys @@ -14,9 +14,11 @@ if os.geteuid() != 0: print "Please run this as root." sys.exit(1) +airtime_conf = '/etc/airtime/airtime.conf' + #Read the universal values parser = ConfigParser.SafeConfigParser() -parser.read('/etc/airtime/airtime.conf') +parser.read(airtime_conf) host = 'resources.db.params.host' dbname = 'resources.db.params.dbname' @@ -24,7 +26,11 @@ username = 'resources.db.params.username' password = 'resources.db.params.password' airtime_dir = parser.get('general', 'airtime_dir') -print 'Airtime root folder found at %s' % airtime_dir +if os.path.exists(airtime_dir): + print 'Airtime root folder found at %s' % airtime_dir +else: + print 'Could not find Airtime root folder specified by "airtime_dir" in %s' % airtime_conf + sys.exit(1) print ("Updating %s/application/configs/application.ini" % airtime_dir) f = file('%s/application/configs/application.ini' % airtime_dir,'r') @@ -47,7 +53,7 @@ f.writelines(file_lines) f.close() -print ("Updating %s/build.properties" % airtime_dir) +print ("Updating %s/build/build.properties" % airtime_dir) f = file('%s/build/build.properties' % airtime_dir, 'r') file_lines = [] @@ -66,7 +72,7 @@ f = file('%s/build/build.properties' % airtime_dir, 'w') f.writelines(file_lines) f.close() -print ("Updating %s/runtime-conf.xml" % airtime_dir) +print ("Updating %s/build/runtime-conf.xml" % airtime_dir) doc = xml.dom.minidom.parse('%s/build/runtime-conf.xml' % airtime_dir) @@ -78,6 +84,4 @@ xml_file = open('%s/build/runtime-conf.xml' % airtime_dir, "w") xml_file.writelines(doc.toxml('utf-8')) xml_file.close() -print 'Regenerating propel-config.php' -os.system('cd %s/build && %s/library/propel/generator/bin/propel-gen' % (airtime_dir, airtime_dir)) - +print "Success!"