CC-3437: Live Stream: Liquidsoap(Pypo) should preserve the last switch status

when it restarts.

- Pypo contacts airtime on bootup and ask what the last switch status was
This commit is contained in:
James 2012-03-14 10:22:41 -04:00
parent 4eefc05366
commit 3c6aff093e
3 changed files with 38 additions and 5 deletions

View File

@ -107,3 +107,5 @@ check_live_stream_auth = 'check-live-stream-auth/format/json/api_key/%%api_key%%
#URL to update source status #URL to update source status
update_source_status = 'update-source-status/format/json/api_key/%%api_key%%/sourcename/%%sourcename%%/status/%%status%%' update_source_status = 'update-source-status/format/json/api_key/%%api_key%%/sourcename/%%sourcename%%/status/%%status%%'
get_switch_status = 'get-switch-status/format/json/api_key/%%api_key%%'

View File

@ -602,7 +602,7 @@ class AirTimeApiClient(ApiClientInterface):
This function updates status of mounted file system information on airtime This function updates status of mounted file system information on airtime
""" """
def update_file_system_mount(self, added_dir, removed_dir): def update_file_system_mount(self, added_dir, removed_dir):
logger = logging.getLogger() logger = self.logger
try: try:
url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["update_fs_mount"]) url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["update_fs_mount"])
@ -629,7 +629,7 @@ class AirTimeApiClient(ApiClientInterface):
and will call appropriate function on Airtime. and will call appropriate function on Airtime.
""" """
def handle_watched_dir_missing(self, dir): def handle_watched_dir_missing(self, dir):
logger = logging.getLogger() logger = self.logger
try: try:
url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["handle_watched_dir_missing"]) url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["handle_watched_dir_missing"])
@ -644,4 +644,25 @@ class AirTimeApiClient(ApiClientInterface):
top = traceback.format_exc() top = traceback.format_exc()
logger.error('Exception: %s', e) logger.error('Exception: %s', e)
logger.error("traceback: %s", top) logger.error("traceback: %s", top)
"""
Retrive current switch status of streams sources
"""
def get_switch_status(self):
logger = self.logger
try:
url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["get_switch_status"])
url = url.replace("%%api_key%%", self.config["api_key"])
req = urllib2.Request(url)
response = urllib2.urlopen(req).read()
response = json.loads(response)
logger.info("Switch status retrieved %s", response)
except Exception, e:
import traceback
top = traceback.format_exc()
logger.error('Exception: %s', e)
logger.error("traceback: %s", top)
return response

View File

@ -125,6 +125,16 @@ class PypoFetch(Thread):
except Exception, e: except Exception, e:
self.logger.debug(e) self.logger.debug(e)
self.logger.debug('Could not connect to liquidsoap') self.logger.debug('Could not connect to liquidsoap')
"""
This check current switch status from Airtime and update the status
"""
def check_switch_status(self):
self.logger.debug('Checking current switch status with Airtime')
switch_status = self.api_client.get_switch_status()
self.logger.debug('switch_status:%s',switch_status)
for k, v in switch_status['status'].iteritems():
self.switch_source(k, v)
def stop_current_show(self): def stop_current_show(self):
self.logger.debug('Notifying Liquidsoap to stop playback.') self.logger.debug('Notifying Liquidsoap to stop playback.')
@ -249,8 +259,7 @@ class PypoFetch(Thread):
""" """
updates the status of liquidsoap connection to the streaming server updates the status of liquidsoap connection to the streaming server
This fucntion updates the bootup time variable in liquidsoap script This fucntion updates the bootup time variable in liquidsoap script
""" """
def update_liquidsoap_connection_status(self):
tn = telnetlib.Telnet(LS_HOST, LS_PORT) tn = telnetlib.Telnet(LS_HOST, LS_PORT)
# update the boot up time of liquidsoap. Since liquidsoap is not restarting, # update the boot up time of liquidsoap. Since liquidsoap is not restarting,
# we are manually adjusting the bootup time variable so the status msg will get # we are manually adjusting the bootup time variable so the status msg will get
@ -512,6 +521,7 @@ class PypoFetch(Thread):
if success: if success:
self.logger.info("Bootstrap schedule received: %s", self.schedule_data) self.logger.info("Bootstrap schedule received: %s", self.schedule_data)
self.process_schedule(self.schedule_data, True) self.process_schedule(self.schedule_data, True)
self.check_switch_status()
loops = 1 loops = 1
while True: while True: