From 8d9c0dab1a1faaa3585f8044afce7afb0419ccd0 Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Mon, 13 Jun 2011 12:10:25 +0200 Subject: [PATCH] CC-1799 Put Airtime Storage into a Human Readable File Naming Convention adding setup to get stor folder etc. --- .../application/controllers/ApiController.php | 1 + airtime_mvc/application/models/StoredFile.php | 4 ++- python_apps/api_clients/api_client.py | 19 +++++++++++ python_apps/media-monitor/MediaMonitor.py | 32 ++++++++++++------- python_apps/media-monitor/media-monitor.cfg | 3 ++ 5 files changed, 47 insertions(+), 12 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index f709071c2..1ad510f2d 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -10,6 +10,7 @@ class ApiController extends Zend_Controller_Action $context->addActionContext('version', 'json') ->addActionContext('recorded-shows', 'json') ->addActionContext('upload-recorded', 'json') + ->addActionContext('media-monitor-setup', 'json') ->addActionContext('media-item-status', 'json') ->addActionContext('reload-metadata', 'json') ->initContext(); diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index c8613a052..9f6eb7ad8 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -633,7 +633,6 @@ class StoredFile { header("Pragma: no-cache"); // Settings - //$p_targetDir = ini_get("upload_tmp_dir"); //. DIRECTORY_SEPARATOR . "plupload"; $cleanupTargetDir = false; // Remove old files $maxFileAge = 60 * 60; // Temp file age in seconds @@ -734,6 +733,9 @@ class StoredFile { } } } + else { + + } } diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index 4a21487c6..2b2e85430 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -359,6 +359,25 @@ class AirTimeApiClient(ApiClientInterface): return response + def setup_media_monitor(self): + logger = logging.getLogger() + + response = None + try: + url = "http://%s:%s/%s/%s" % (self.config["base_url"], str(self.config["base_port"]), self.config["api_base"], self.config["media_setup_url"]) + url = url.replace("%%api_key%%", self.config["api_key"]) + logger.debug(url) + + response = urllib.urlopen(url) + response = json.loads(response.read()) + logger.debug("Json Media Setup %s", response) + + except Exception, e: + response = None + logger.error("Exception: %s", e) + + return response + def check_media_status(self, md5): logger = logging.getLogger() diff --git a/python_apps/media-monitor/MediaMonitor.py b/python_apps/media-monitor/MediaMonitor.py index ac455c9b5..dae8549d9 100644 --- a/python_apps/media-monitor/MediaMonitor.py +++ b/python_apps/media-monitor/MediaMonitor.py @@ -29,7 +29,7 @@ MODE_CREATE = "create" MODE_MODIFY = "modify" global storage_directory -storage_directory = "/srv/airtime/stor" +global plupload_directory # configure logging try: @@ -136,7 +136,7 @@ class MediaMonitor(ProcessEvent): connection = BrokerConnection(config["rabbitmq_host"], config["rabbitmq_user"], config["rabbitmq_password"], "/") channel = connection.channel() - self.producer = Producer(channel, exchange=schedule_exchange, serializer="json") + #self.producer = Producer(channel, exchange=schedule_exchange, serializer="json") #producer.publish({"name": "/tmp/lolcat1.avi", "size": 1301013}) def get_md5(self, filepath): @@ -280,9 +280,6 @@ class MediaMonitor(ProcessEvent): else : return False - def setUpMediaMonitor(self, event): - pass - def process_IN_CREATE(self, event): if not event.dir: #file created is a tmp file which will be modified and then moved back to the original filename. @@ -335,7 +332,7 @@ class MediaMonitor(ProcessEvent): def process_IN_DELETE(self, event): - self.producer.publish({"name": "Hi!"}) + #self.producer.publish({"name": "Hi!"}) self.logger.info("%s: %s", event.maskname, event.pathname) @@ -366,14 +363,27 @@ if __name__ == '__main__': pyinotify.IN_DELETE_SELF #mask = pyinotify.ALL_EVENTS - wm = WatchManager() - wdd = wm.add_watch(storage_directory, mask, rec=True, auto_add=True) - logger = logging.getLogger('root') - logger.info("Added watch to %s", storage_directory) - mm = MediaMonitor() + response = None + while response is None: + response = mm.api_client.setup_media_monitor() + time.sleep(5) + + storage_directory = response["stor"] + plupload_directory = response["plupload"] + + wm = WatchManager() + + wdd = wm.add_watch(storage_directory, mask, rec=True, auto_add=True) + logger.info("Added watch to %s", storage_directory) + logger.info("wdd result %s", wdd[storage_directory]) + + wdd = wm.add_watch(plupload_directory, mask, rec=False, auto_add=True) + logger.info("Added watch to %s", plupload_directory) + logger.info("wdd result %s", wdd[plupload_directory]) + notifier = AirtimeNotifier(wm, mm, read_freq=int(config["check_filesystem_events"]), timeout=1) notifier.coalesce_events() notifier.loop(callback=mm.check_rabbit_MQ) diff --git a/python_apps/media-monitor/media-monitor.cfg b/python_apps/media-monitor/media-monitor.cfg index 4a683d130..e1f36619f 100644 --- a/python_apps/media-monitor/media-monitor.cfg +++ b/python_apps/media-monitor/media-monitor.cfg @@ -19,6 +19,9 @@ api_base = 'api' # URL to get the version number of the server API version_url = 'version/api_key/%%api_key%%' +# URL to setup the media monitor +media_setup_url = 'media-monitor-setup/format/json/api_key/%%api_key%%' + # URL to check Airtime's status of a file media_status_url = 'media-item-status/format/json/api_key/%%api_key%%/md5/%%md5%%'