CC-3346: Recorder: Merge recorder with pypo

- Pypo fech works as msg listner for recroder now.
- recorder is part of pypo and all it does is waiting for msg from pypo
fetch and spwan a show recorder thread.
- added new parameter logger to api client. This way apiclient will log
into specific log file instead of grabbing current log file.
- show recoder is removed from all check system/status page
This commit is contained in:
James 2012-02-24 13:12:50 -05:00
parent 2ef6d230f9
commit 2f689ed583
30 changed files with 419 additions and 856 deletions

View file

@ -24,14 +24,17 @@ import string
AIRTIME_VERSION = "2.1.0"
def api_client_factory(config):
logger = logging.getLogger()
def api_client_factory(config, logger=None):
if logger != None:
temp_logger = logger
else:
temp_logger = logging.getLogger()
if config["api_client"] == "airtime":
return AirTimeApiClient()
return AirTimeApiClient(temp_logger)
elif config["api_client"] == "obp":
return ObpApiClient()
else:
logger.info('API Client "'+config["api_client"]+'" not supported. Please check your config file.\n')
temp_logger.info('API Client "'+config["api_client"]+'" not supported. Please check your config file.\n')
sys.exit()
def to_unicode(obj, encoding='utf-8'):
@ -161,17 +164,20 @@ class ApiClientInterface:
class AirTimeApiClient(ApiClientInterface):
def __init__(self):
def __init__(self, logger=None):
if logger != None:
self.logger = logger
else:
self.logger = logging.getLogger()
# loading config file
try:
self.config = ConfigObj('/etc/airtime/api_client.cfg')
except Exception, e:
logger = logging.getLogger()
logger.error('Error loading config file: %s', e)
self.logger.error('Error loading config file: %s', e)
sys.exit(1)
def get_response_from_server(self, url):
logger = logging.getLogger()
logger = self.logger
successful_response = False
while not successful_response:
@ -191,7 +197,7 @@ class AirTimeApiClient(ApiClientInterface):
def __get_airtime_version(self, verbose = True):
logger = logging.getLogger()
logger = self.logger
url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["version_url"])
logger.debug("Trying to contact %s", url)
url = url.replace("%%api_key%%", self.config["api_key"])
@ -211,7 +217,7 @@ class AirTimeApiClient(ApiClientInterface):
return version
def test(self):
logger = logging.getLogger()
logger = self.logger
status, items = self.get_schedule('2010-01-01-00-00-00', '2011-01-01-00-00-00')
schedule = items["playlists"]
logger.debug("Number of playlists found: %s", str(len(schedule)))
@ -227,7 +233,7 @@ class AirTimeApiClient(ApiClientInterface):
def is_server_compatible(self, verbose = True):
logger = logging.getLogger()
logger = self.logger
version = self.__get_airtime_version(verbose)
if (version == -1):
if (verbose):
@ -246,7 +252,7 @@ class AirTimeApiClient(ApiClientInterface):
def get_schedule(self, start=None, end=None):
logger = logging.getLogger()
logger = self.logger
# Construct the URL
export_url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["export_url"])
@ -267,7 +273,7 @@ class AirTimeApiClient(ApiClientInterface):
def get_media(self, uri, dst):
logger = logging.getLogger()
logger = self.logger
try:
src = uri + "/api_key/%%api_key%%"
@ -284,7 +290,7 @@ class AirTimeApiClient(ApiClientInterface):
Tell server that the scheduled *playlist* has started.
"""
def notify_scheduled_item_start_playing(self, pkey, schedule):
logger = logging.getLogger()
logger = self.logger
playlist = schedule[pkey]
schedule_id = playlist["schedule_id"]
url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["update_item_url"])
@ -311,7 +317,7 @@ class AirTimeApiClient(ApiClientInterface):
liquidsoap in get_liquidsoap_data().
"""
def notify_media_item_start_playing(self, data, media_id):
logger = logging.getLogger()
logger = self.logger
response = ''
try:
schedule_id = data
@ -331,7 +337,7 @@ class AirTimeApiClient(ApiClientInterface):
return response
def get_liquidsoap_data(self, pkey, schedule):
logger = logging.getLogger()
logger = self.logger
playlist = schedule[pkey]
data = dict()
try:
@ -341,13 +347,12 @@ class AirTimeApiClient(ApiClientInterface):
return data
def get_shows_to_record(self):
logger = logging.getLogger()
logger = self.logger
response = None
try:
url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["show_schedule_url"])
logger.debug(url)
url = url.replace("%%api_key%%", self.config["api_key"])
response = self.get_response_from_server(url)
response = json.loads(response)
@ -360,7 +365,7 @@ class AirTimeApiClient(ApiClientInterface):
return response
def upload_recorded_show(self, data, headers):
logger = logging.getLogger()
logger = self.logger
response = ''
retries = int(self.config["upload_retries"])
@ -394,7 +399,7 @@ class AirTimeApiClient(ApiClientInterface):
return response
def setup_media_monitor(self):
logger = logging.getLogger()
logger = self.logger
response = None
try:
@ -411,7 +416,7 @@ class AirTimeApiClient(ApiClientInterface):
return response
def update_media_metadata(self, md, mode, is_record=False):
logger = logging.getLogger()
logger = self.logger
response = None
try:
@ -456,7 +461,7 @@ class AirTimeApiClient(ApiClientInterface):
#Note that these are relative paths to the given directory. The full
#path is not returned.
def list_all_db_files(self, dir_id):
logger = logging.getLogger()
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["list_all_db_files"])
@ -473,7 +478,7 @@ class AirTimeApiClient(ApiClientInterface):
return response
def list_all_watched_dirs(self):
logger = logging.getLogger()
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["list_all_watched_dirs"])
@ -489,7 +494,7 @@ class AirTimeApiClient(ApiClientInterface):
return response
def add_watched_dir(self, path):
logger = logging.getLogger()
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["add_watched_dir"])
@ -506,7 +511,7 @@ class AirTimeApiClient(ApiClientInterface):
return response
def remove_watched_dir(self, path):
logger = logging.getLogger()
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["remove_watched_dir"])
@ -523,7 +528,7 @@ class AirTimeApiClient(ApiClientInterface):
return response
def set_storage_dir(self, path):
logger = logging.getLogger()
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["set_storage_dir"])
@ -540,7 +545,7 @@ class AirTimeApiClient(ApiClientInterface):
return response
def get_stream_setting(self):
logger = logging.getLogger()
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_stream_setting"])
@ -561,7 +566,7 @@ class AirTimeApiClient(ApiClientInterface):
via a http server.
"""
def register_component(self, component):
logger = logging.getLogger()
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["register_component"])
@ -573,7 +578,7 @@ class AirTimeApiClient(ApiClientInterface):
logger.error("Exception: %s", e)
def notify_liquidsoap_status(self, msg, stream_id, time):
logger = logging.getLogger()
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["update_liquidsoap_status"])