#!/usr/local/bin/python import time import logging import logging.config import sys import os import signal from multiprocessing import Process, Queue as mpQueue from airtimefilemonitor.airtimenotifier import AirtimeNotifier from airtimefilemonitor.airtimeprocessevent import AirtimeProcessEvent from airtimefilemonitor.mediaconfig import AirtimeMediaConfig from airtimefilemonitor.airtimemediamonitorbootstrap import AirtimeMediaMonitorBootstrap def handleSigTERM(signum, frame): logger = logging.getLogger() logger.info("Main Process Shutdown, TERM signal caught.") for p in processes: logger.info("Killed process. %d", p.pid) p.terminate() sys.exit(0) # configure logging try: logging.config.fileConfig("logging.cfg") except Exception, e: print 'Error configuring logging: ', e sys.exit(1) logger = logging.getLogger() processes = [] try: config = AirtimeMediaConfig(logger) multi_queue = mpQueue() logger.info("Initializing event processor") pe = AirtimeProcessEvent(queue=multi_queue, airtime_config=config) notifier = AirtimeNotifier(pe.wm, pe, read_freq=1, timeout=0, airtime_config=config) notifier.coalesce_events() logger.info("Setting up monitor") response = None while response is None: response = notifier.api_client.setup_media_monitor() time.sleep(5) storage_directory = response["stor"].encode('utf-8') logger.info("Storage Directory is: %s", storage_directory) config.storage_directory = storage_directory config.imported_directory = storage_directory + '/imported' bootstrap = AirtimeMediaMonitorBootstrap(logger, multi_queue, pe, config) bootstrap.scan() #create 5 worker processes for i in range(5): p = Process(target=notifier.process_file_events, args=(multi_queue,)) processes.append(p) p.start() wdd = pe.watch_directory(storage_directory) logger.info("Added watch to %s", storage_directory) logger.info("wdd result %s", wdd[storage_directory]) signal.signal(signal.SIGTERM, handleSigTERM) notifier.loop(callback=pe.notifier_loop_callback) except KeyboardInterrupt: notifier.stop() logger.info("Keyboard Interrupt") except Exception, e: logger.error('Exception: %s', e)