def run(self): self.index_create() manager = Manager() apiclient = apc() config = user().mm_config WatchSyncer(signal=getsig('watch'), chunking_number=config['chunking_number'], timeout=config['request_max_wait']) airtime_receiver = AirtimeMessageReceiver(config, manager) airtime_notifier = AirtimeNotifier(config, airtime_receiver) adb = AirtimeDB(apiclient) store = { u'stor': adb.storage_path(), u'watched_dirs': adb.list_watched(), } self.logger.info("initializing mm with directories: %s" % str(store)) self.logger.info("Initing with the following airtime response:%s" % str(store)) airtime_receiver.change_storage({'directory': store[u'stor']}) for watch_dir in store[u'watched_dirs']: if not os.path.exists(watch_dir): # Create the watch_directory here try: os.makedirs(watch_dir) except Exception: self.logger.error("Could not create watch directory: '%s' \ (given from the database)." % watch_dir) if os.path.exists(watch_dir): airtime_receiver.new_watch({'directory': watch_dir}, restart=True) else: self.logger.info("Failed to add watch on %s" % str(watch_dir)) EventDrainer(airtime_notifier, interval=float(config['rmq_event_wait'])) # Launch the toucher that updates the last time when the script was # ran every n seconds. # TODO : verify that this does not interfere with bootstrapping because the # toucher thread might update the last_ran variable too fast ToucherThread(path=user().touch_file_path(), interval=int(config['touch_interval'])) success = False while not success: try: apiclient.register_component('media-monitor') success = True except Exception, e: self.logger.error(str(e)) import time time.sleep(10)
def test_remove_watch_directory(self): man = Manager() add_paths(man, self.paths) for path in self.paths: self.assertTrue( man.has_watch(path) ) man.remove_watch_directory( path ) self.assertTrue( not man.has_watch(path) )
def setUp(self): # TODO : properly mock this later cfg = {} self.amr = AirtimeMessageReceiver(cfg, Manager())
def main(global_config, api_client_config, log_config, index_create_attempt=False): for cfg in [global_config, api_client_config]: if not os.path.exists(cfg): raise NoConfigFile(cfg) # MMConfig is a proxy around ConfigObj instances. it does not allow # itself users of MMConfig instances to modify any config options # directly through the dictionary. Users of this object muse use the # correct methods designated for modification try: config = MMConfig(global_config) except NoConfigFile as e: print("Cannot run mediamonitor2 without configuration file.") print("Current config path: '%s'" % global_config) sys.exit(1) except Exception as e: print("Unknown error reading configuration file: '%s'" % global_config) print(str(e)) logging.config.fileConfig(log_config) #need to wait for Python 2.7 for this.. #logging.captureWarnings(True) logger = logging.getLogger() LogWriter.override_std_err(logger) logfile = unicode( config['logpath'] ) setup_logging(logfile) log = get_logger() if not index_create_attempt: if not os.path.exists(config['index_path']): log.info("Attempting to create index file:...") try: with open(config['index_path'], 'w') as f: f.write(" ") except Exception as e: log.info("Failed to create index file with exception: %s" % str(e)) else: log.info("Created index file, reloading configuration:") main( global_config, api_client_config, log_config, index_create_attempt=True ) else: log.info("Already tried to create index. Will not try again ") if not os.path.exists(config['index_path']): log.info("Index file does not exist. Terminating") log.info("Attempting to set the locale...") try: mmp.configure_locale(mmp.get_system_locale()) except FailedToSetLocale as e: log.info("Failed to set the locale...") sys.exit(1) except FailedToObtainLocale as e: log.info("Failed to obtain the locale form the default path: \ '/etc/default/locale'") sys.exit(1) except Exception as e: log.info("Failed to set the locale for unknown reason. \ Logging exception.") log.info(str(e)) watch_syncer = WatchSyncer(signal='watch', chunking_number=config['chunking_number'], timeout=config['request_max_wait']) apiclient = apc.AirtimeApiClient.create_right_config(log=log, config_path=api_client_config) ReplayGainUpdater.start_reply_gain(apiclient) sdb = AirtimeDB(apiclient) manager = Manager() airtime_receiver = AirtimeMessageReceiver(config,manager) airtime_notifier = AirtimeNotifier(config, airtime_receiver) store = apiclient.setup_media_monitor() airtime_receiver.change_storage({ 'directory':store[u'stor'] }) for watch_dir in store[u'watched_dirs']: if not os.path.exists(watch_dir): # Create the watch_directory here try: os.makedirs(watch_dir) except Exception as e: log.error("Could not create watch directory: '%s' \ (given from the database)." % watch_dir) if os.path.exists(watch_dir): airtime_receiver.new_watch({ 'directory':watch_dir }, restart=True) bs = Bootstrapper( db=sdb, watch_signal='watch' ) ed = EventDrainer(airtime_notifier.connection, interval=float(config['rmq_event_wait'])) # Launch the toucher that updates the last time when the script was # ran every n seconds. # TODO : verify that this does not interfere with bootstrapping because the # toucher thread might update the last_ran variable too fast tt = ToucherThread(path=config['index_path'], interval=int(config['touch_interval'])) apiclient.register_component('media-monitor') manager.loop()
def test_organize_path(self): man = Manager() man.set_organize_path( self.opath ) self.assertEqual( man.get_organize_path(), self.opath ) man.set_organize_path( self.ppath ) self.assertEqual( man.get_organize_path(), self.ppath )
def test_init(self): man = Manager() self.assertTrue( len(man.watched_directories) == 0 ) self.assertTrue( man.watch_channel is not None ) self.assertTrue( man.organize_channel is not None )