diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 60cd776a8..07559124b 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -23,6 +23,8 @@ class ApiController extends Zend_Controller_Action ->addActionContext('get-stream-setting', 'json') ->addActionContext('status', 'json') ->addActionContext('register-component', 'json') + ->addActionContext('update-liquidsoap-error', 'json') + ->addActionContext('update-liquidsoap-connection', 'json') ->initContext(); } @@ -696,5 +698,21 @@ class ApiController extends Zend_Controller_Action Application_Model_ServiceRegister::Register($component, $remoteAddr); } + + public function updateLiquidsoapErrorAction(){ + $request = $this->getRequest(); + + $error_msg = $request->getParam('error_msg'); + $stream_id = $request->getParam('stream_id'); + Application_Model_StreamSetting::setLiquidsoapError($stream_id, $error_msg); + } + + public function updateLiquidsoapConnectionAction(){ + $request = $this->getRequest(); + + $stream_id = $request->getParam('stream_id'); + // setting error_msg as "" when there is no error_msg + Application_Model_StreamSetting::setLiquidsoapError($stream_id, ""); + } } diff --git a/airtime_mvc/application/models/StreamSetting.php b/airtime_mvc/application/models/StreamSetting.php index eea87ba0a..1febaf042 100644 --- a/airtime_mvc/application/models/StreamSetting.php +++ b/airtime_mvc/application/models/StreamSetting.php @@ -43,7 +43,8 @@ class Application_Model_StreamSetting { public static function getStreamSetting(){ global $CC_DBC; $sql = "SELECT *" - ." FROM cc_stream_setting"; + ." FROM cc_stream_setting" + ." WHERE keyname not like '%_error'"; $rows = $CC_DBC->getAll($sql); return $rows; @@ -74,4 +75,33 @@ class Application_Model_StreamSetting { } } } + + public static function setLiquidsoapError($stream_id, $msg){ + global $CC_DBC; + + $keyname = "s".$stream_id."_liquidsoap_error"; + $sql = "SELECT COUNT(*) FROM cc_stream_setting" + ." WHERE keyname = '$keyname'"; + $result = $CC_DBC->GetOne($sql); + + if ($result == 1){ + $sql = "UPDATE cc_stream_setting" + ." SET value = '$value'" + ." WHERE keyname = '$keyname'"; + }else{ + $sql = "INSERT INTO cc_stream_setting (keyname, value, type)" + ." VALUES ($keyname, '$msg', 'string')"; + } + } + + public static function getLiquidsoapError($stream_id){ + global $CC_DBC; + + $keyname = "s".$stream_id."_liquidsoap_error"; + $sql = "SELECT value FROM cc_stream_setting" + ." WHERE keyname = '$key'"; + $result = $CC_DBC->GetOne($sql); + + return $result; + } } diff --git a/python_apps/api_clients/api_client.cfg b/python_apps/api_clients/api_client.cfg index bf04dcc26..3457db2e3 100644 --- a/python_apps/api_clients/api_client.cfg +++ b/python_apps/api_clients/api_client.cfg @@ -92,6 +92,12 @@ generate_range_url = 'generate_range_dp.php' # URL to tell Airtime we want to get stream setting get_stream_setting = 'get-stream-setting/format/json/api_key/%%api_key%%/' +#URL to update liquidsoap error msg +update_liquidsoap_error = 'update-liquidsoap-error/format/json/api_key/%%api_key%%/error_msg/%%error_msg%%/stream_id/%%stream_id%%' + +#URL to update liquidsoap connection +update_liquidsoap_connection = 'update-liquidsoap-connection/format/json/api_key/%%api_key%%/stream_id/%%stream_id%%' + ############## # OBP config # ############## diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index 8509a7c9f..5fb9aa7b4 100755 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -140,6 +140,12 @@ class ApiClientInterface: def register_component(self): pass + def notify_liquidsoap_error(self, error_msg, stream_id): + pass + + def notify_liquidsoap_connection(self, stream_id): + pass + # Put here whatever tests you want to run to make sure your API is working def test(self): pass @@ -564,7 +570,34 @@ class AirTimeApiClient(ApiClientInterface): response = urllib2.urlopen(req).read() except Exception, e: logger.error("Exception: %s", e) - + + def notify_liquidsoap_error(self, error_msg, stream_id): + logger = logging.getLogger() + try: + url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["update_liquidsoap_error"]) + + url = url.replace("%%api_key%%", self.config["api_key"]) + url = url.replace("%%error_msg%%", error_msg) + url = url.replace("%%stream_id%%", stream_id) + logger.debug(url) + req = urllib2.Request(url) + response = urllib2.urlopen(req).read() + except Exception, e: + logger.error("Exception: %s", e) + + def notify_liquidsoap_connection(self, stream_id): + logger = logging.getLogger() + try: + url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["update_liquidsoap_connection"]) + + url = url.replace("%%api_key%%", self.config["api_key"]) + url = url.replace("%%stream_id%%", stream_id) + logger.debug(url) + req = urllib2.Request(url) + response = urllib2.urlopen(req).read() + except Exception, e: + logger.error("Exception: %s", e) + ################################################################################ # OpenBroadcast API Client ################################################################################ diff --git a/python_apps/pypo/liquidsoap_scripts/ls_lib.liq b/python_apps/pypo/liquidsoap_scripts/ls_lib.liq index c59a211f0..f10c9c207 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_lib.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_lib.liq @@ -37,7 +37,17 @@ def to_live(old,new) = end -def output_to(output_type, type, bitrate, host, port, pass, mount_point, url, description, genre, user, s) = +def output_to(output_type, type, bitrate, host, port, pass, mount_point, url, description, genre, user, s, stream) = + def on_error(msg) + system("airtime-check-system > ~/temp/temp1.log 2>&1") + system("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --error='#{msg}' --stream-id=#{stream} > ~/temp/temp.log 2>&1") + log("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --error='#{msg}' --stream-id=#{stream}") + 5. + end + def on_connect() + system("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --connect --stream-id=#{stream}") + log("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh --connect --stream-id=#{stream}") + end if output_type == "icecast" then user_ref = ref user if user == "" then @@ -52,7 +62,9 @@ def output_to(output_type, type, bitrate, host, port, pass, mount_point, url, de url = url, description = description, genre = genre, - user = !user_ref) + user = !user_ref, + on_error = on_error, + on_connect = on_connect) if type == "mp3" then if bitrate == 24 then ignore(output(%mp3(bitrate = 24),s)) diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index 1ea328c86..80b4dca26 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -56,17 +56,18 @@ end if s1_output != "disabled" then #output_to(output_type, type, bitrate, host, port, pass, mount_point, url, description, genre, s) - output_to(s1_output, s1_type, s1_bitrate, s1_host, s1_port, s1_pass, s1_mount, s1_url, s1_description, s1_genre, s1_user, s) + output_to(s1_output, s1_type, s1_bitrate, s1_host, s1_port, s1_pass, s1_mount, s1_url, s1_description, s1_genre, s1_user, s, "1") end if s2_output != "disabled" then #output_to(output_type, type, bitrate, host, port, pass, mount_point, url, description, genre, s) - output_to(s2_output, s2_type, s2_bitrate, s2_host, s2_port, s2_pass, s2_mount, s2_url, s2_description, s2_genre, s2_user, s) + output_to(s2_output, s2_type, s2_bitrate, s2_host, s2_port, s2_pass, s2_mount, s2_url, s2_description, s2_genre, s2_user, s, "2") + end if s3_output != "disabled" then #output_to(output_type, type, bitrate, host, port, pass, mount_point, url, description, genre, s) - output_to(s3_output, s3_type, s3_bitrate, s3_host, s3_port, s3_pass, s3_mount, s3_url, s3_description, s3_genre, s3_user, s) + output_to(s3_output, s3_type, s3_bitrate, s3_host, s3_port, s3_pass, s3_mount, s3_url, s3_description, s3_genre, s3_user, s, "3") end ignore(output.dummy(blank())) diff --git a/python_apps/pypo/pypo-notify.py b/python_apps/pypo/pypo-notify.py index 45461f8b3..e1416a8d8 100644 --- a/python_apps/pypo/pypo-notify.py +++ b/python_apps/pypo/pypo-notify.py @@ -47,6 +47,9 @@ parser = OptionParser(usage=usage) # Options parser.add_option("-d", "--data", help="Pass JSON data from liquidsoap into this script.", metavar="data") parser.add_option("-m", "--media-id", help="ID of the file that is currently playing.", metavar="media_id") +parser.add_option("-e", "--error", help="liquidsoap error msg.", metavar="error_msg") +parser.add_option("-s", "--stream-id", help="ID stream", metavar="stream_id") +parser.add_option("-c", "--connect", help="liquidsoap connected", action="store_true", metavar="connect") # parse options (options, args) = parser.parse_args() @@ -76,8 +79,26 @@ class Notify: logger.debug('data = '+ str(data)) response = self.api_client.notify_media_item_start_playing(data, media_id) logger.debug("Response: "+json.dumps(response)) - - + + def notify_liquidsoap_error(self, error_msg, stream_id): + logger = logging.getLogger() + + logger.debug('#################################################') + logger.debug('# Calling server to update liquidsoap error #') + logger.debug('#################################################') + logger.debug('error msg = '+ str(error_msg)) + response = self.api_client.notify_liquidsoap_error(error_msg, stream_id) + logger.debug("Response: "+json.dumps(response)) + + def notify_liquidsoap_connection(self, stream_id): + logger = logging.getLogger() + + logger.debug('#################################################') + logger.debug('# Calling server to update liquidsoap connection#') + logger.debug('#################################################') + response = self.api_client.notify_liquidsoap_connection(stream_id) + logger.debug("Response: "+json.dumps(response)) + if __name__ == '__main__': print print '#########################################' @@ -87,17 +108,30 @@ if __name__ == '__main__': # initialize logger = logging.getLogger() - - if not options.data: - print "NOTICE: 'data' command-line argument not given." - sys.exit() - if not options.media_id: - print "NOTICE: 'media_id' command-line argument not given." - sys.exit() - - try: - n = Notify() - n.notify_media_start_playing(options.data, options.media_id) - except Exception, e: - print e + if options.error_msg and options.stream_id: + try: + n = Notify() + n.notify_liquidsoap_error(options.error_msg, options.stream_id) + except Exception, e: + print e + elif optioins.connect and options.stream_id: + try: + n = Notify() + n.notify_liquidsoap_connection(options.stream_id) + except Exception, e: + print e + else: + if not options.data: + print "NOTICE: 'data' command-line argument not given." + sys.exit() + + if not options.media_id: + print "NOTICE: 'media_id' command-line argument not given." + sys.exit() + + try: + n = Notify() + n.notify_media_start_playing(options.data, options.media_id) + except Exception, e: + print e