Beispiel #1
0
 def __init__(self):
     self.wm = pyinotify.WatchManager()
     # These two instance variables are assumed to be constant
     self.watch_channel    = getsig('watch')
     self.organize_channel = getsig('organize')
     self.watch_listener   = StoreWatchListener(signal = self.watch_channel)
     self.__timeout_thread = ManagerTimeout(self)
     self.__timeout_thread.daemon = True
     self.__timeout_thread.start()
     self.organize = {
         'organize_path'      : None,
         'imported_path'      : None,
         'recorded_path'      : None,
         'problem_files_path' : None,
         'organizer'          : None,
         'problem_handler'    : None,
         'organize_listener'  : OrganizeListener(signal=
             self.organize_channel),
     }
     def dummy(sender, event): self.watch_move( event.path, sender=sender )
     dispatcher.connect(dummy, signal=getsig('watch_move'), 
             sender=dispatcher.Any, weak=False)
     def subwatch_add(sender, directory):
         self.__add_watch(directory, self.watch_listener)
     dispatcher.connect(subwatch_add, signal=getsig('add_subwatch'),
             sender=dispatcher.Any, weak=False)
     # A private mapping path => watch_descriptor
     # we use the same dictionary for organize, watch, store wd events.
     # this is a little hacky because we are unable to have multiple wd's
     # on the same path.
     self.__wd_path = {}
     # The following set isn't really necessary anymore. Should be
     # removed...
     self.watched_directories = set([])
Beispiel #2
0
 def __init__(self):
     self.wm = pyinotify.WatchManager()
     # These two instance variables are assumed to be constant
     self.watch_channel    = getsig('watch')
     self.organize_channel = getsig('organize')
     self.watch_listener   = StoreWatchListener(signal = self.watch_channel)
     self.__timeout_thread = ManagerTimeout(self)
     self.__timeout_thread.daemon = True
     self.__timeout_thread.start()
     self.organize = {
         'organize_path'      : None,
         'imported_path'      : None,
         'recorded_path'      : None,
         'problem_files_path' : None,
         'organizer'          : None,
         'problem_handler'    : None,
         'organize_listener'  : OrganizeListener(signal=
             self.organize_channel),
     }
     def dummy(sender, event): self.watch_move( event.path, sender=sender )
     dispatcher.connect(dummy, signal=getsig('watch_move'), 
             sender=dispatcher.Any, weak=False)
     def subwatch_add(sender, directory):
         self.__add_watch(directory, self.watch_listener)
     dispatcher.connect(subwatch_add, signal=getsig('add_subwatch'),
             sender=dispatcher.Any, weak=False)
     # A private mapping path => watch_descriptor
     # we use the same dictionary for organize, watch, store wd events.
     # this is a little hacky because we are unable to have multiple wd's
     # on the same path.
     self.__wd_path = {}
     # The following set isn't really necessary anymore. Should be
     # removed...
     self.watched_directories = set([])
Beispiel #3
0
    def __init__(self, signal, weak=False):
        self.signal = getsig(signal)
        self.report_signal = getsig("badfile")

        def dummy(sender, event):
            self.handle(sender, event)

        dispatcher.connect(dummy,
                           signal=self.signal,
                           sender=dispatcher.Any,
                           weak=weak)
Beispiel #4
0
 def __init__(self, db, watch_signal):
     """
     db - AirtimeDB object; small layer over api client
     last_ran - last time the program was ran.
     watch_signal - the signals should send events for every file on.
     """
     self.db = db
     self.watch_signal = getsig(watch_signal)
Beispiel #5
0
 def __init__(self,db,watch_signal):
     """
     db - AirtimeDB object; small layer over api client
     last_ran - last time the program was ran.
     watch_signal - the signals should send events for every file on.
     """
     self.db           = db
     self.watch_signal = getsig(watch_signal)
Beispiel #6
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
 def __init__(self, channel, **kwargs):
     self.channel = channel
     self.signal = getsig(self.channel.signal)
     self.problem_dir = self.channel.path
     def dummy(sender, event, exception):
         self.handle(sender, event, exception)
     dispatcher.connect(dummy, signal=self.signal, sender=dispatcher.Any,
             weak=False)
     mmp.create_dir( self.problem_dir )
     self.logger.info("Initialized problem file handler. Problem dir: '%s'" %
             self.problem_dir)
Beispiel #9
0
 def flush_events(self, path):
     """
     organize the whole directory at path. (pretty much by doing what
     handle does to every file
     """
     flushed = 0
     for f in mmp.walk_supported(path, clean_empties=True):
         self.logger.info("Bootstrapping: File in 'organize' directory: \
                 '%s'" % f)
         if not mmp.file_locked(f):
             dispatcher.send(signal=getsig(self.signal), sender=self,
                     event=OrganizeFile(f))
         flushed += 1
Beispiel #10
0
    def __init__(self, signal, chunking_number = 100, timeout=15):
        self.timeout          = float(timeout)
        self.chunking_number  = int(chunking_number)
        self.request_running  = False
        self.__current_thread = None
        self.__requests       = []
        self.contractor       = EventContractor()
        self.__reset_queue()

        tc = TimeoutWatcher(self, self.timeout)
        tc.daemon = True
        tc.start()
        super(WatchSyncer, self).__init__(signal=getsig(signal))
Beispiel #11
0
 def flush_events(self, path):
     """
     walk over path and send a NewFile event for every file in this
     directory.  Not to be confused with bootstrapping which is a more
     careful process that involved figuring out what's in the database
     first.
     """
     # Songs is a dictionary where every key is the watched the directory
     # and the value is a set with all the files in that directory.
     added = 0
     for f in mmp.walk_supported(path, clean_empties=False):
         added += 1
         dispatcher.send( signal=getsig(self.signal), sender=self, event=NewFile(f) )
     self.logger.info( "Flushed watch directory. added = %d" % added )
Beispiel #12
0
 def flush_events(self, path):
     """
     organize the whole directory at path. (pretty much by doing what
     handle does to every file
     """
     flushed = 0
     for f in mmp.walk_supported(path, clean_empties=True):
         self.logger.info("Bootstrapping: File in 'organize' directory: \
                 '%s'" % f)
         if not mmp.file_locked(f):
             dispatcher.send(signal=getsig(self.signal),
                             sender=self,
                             event=OrganizeFile(f))
         flushed += 1
Beispiel #13
0
 def flush_events(self, path):
     """
     walk over path and send a NewFile event for every file in this
     directory.  Not to be confused with bootstrapping which is a more
     careful process that involved figuring out what's in the database
     first.
     """
     # Songs is a dictionary where every key is the watched the directory
     # and the value is a set with all the files in that directory.
     added = 0
     for f in mmp.walk_supported(path, clean_empties=False):
         added += 1
         dispatcher.send(signal=getsig(self.signal),
                         sender=self,
                         event=NewFile(f))
     self.logger.info("Flushed watch directory. added = %d" % added)
Beispiel #14
0
    def __init__(self, channel, **kwargs):
        self.channel = channel
        self.signal = getsig(self.channel.signal)
        self.problem_dir = self.channel.path

        def dummy(sender, event, exception):
            self.handle(sender, event, exception)

        dispatcher.connect(dummy,
                           signal=self.signal,
                           sender=dispatcher.Any,
                           weak=False)
        mmp.create_dir(self.problem_dir)
        self.logger.info(
            "Initialized problem file handler. Problem dir: '%s'" %
            self.problem_dir)
Beispiel #15
0
 def process_delete(self, event):
     evt = None
     if event.dir: evt = DeleteDir(event)
     else: evt = DeleteFile(event)
     dispatcher.send(signal=getsig(self.signal), sender=self, event=evt)
     return evt
Beispiel #16
0
 def __init__(self, signal, weak=False):
     self.signal = getsig(signal)
     self.report_signal = getsig("badfile")
     def dummy(sender, event): self.handle(sender,event)
     dispatcher.connect(dummy, signal=self.signal, sender=dispatcher.Any,
             weak=weak)
Beispiel #17
0
 def process_delete_dir(self, event):
     evt = DeleteDir(event)
     dispatcher.send(signal=getsig(self.signal), sender=self, event=evt)
     return evt
Beispiel #18
0
 def my_init(self, signal):
     self.signal = getsig(signal)
Beispiel #19
0
 def cb():
     dispatcher.send(signal=getsig("add_subwatch"), sender=self,
             directory=d)
Beispiel #20
0
 def __init__(self, signal, path):
     self.signal = getsig(signal)
     self.path = path
Beispiel #21
0
 def __init__(self, channel, target_path, recorded_path):
     self.channel = channel
     self.target_path = target_path
     self.recorded_path = recorded_path
     super(Organizer, self).__init__(signal=getsig(self.channel),
                                     weak=False)
Beispiel #22
0
 def delete_watch_dir(self, event):
     e = DeleteDirWatch(event)
     dispatcher.send(signal=getsig('watch_move'), sender=self, event=e)
     dispatcher.send(signal=getsig(self.signal), sender=self, event=e)
Beispiel #23
0
 def set_problem_files_path(self, new_path):
     """ Set the path where problem files should go """
     self.organize["problem_files_path"] = new_path
     self.organize["problem_handler"] = ProblemFileHandler(PathChannel(signal=getsig("badfile"), path=new_path))
Beispiel #24
0
 def set_problem_files_path(self, new_path):
     """ Set the path where problem files should go """
     self.organize['problem_files_path'] = new_path
     self.organize['problem_handler'] = \
         ProblemFileHandler( PathChannel(signal=getsig('badfile'),
             path=new_path) )
Beispiel #25
0
 def process_create(self, event):
     evt = NewFile(event)
     dispatcher.send(signal=getsig(self.signal), sender=self, event=evt)
     return evt
Beispiel #26
0
 def delete_watch_dir(self, event):
     e = DeleteDirWatch(event)
     dispatcher.send(signal=getsig('watch_move'), sender=self, event=e)
     dispatcher.send(signal=getsig(self.signal), sender=self, event=e)
Beispiel #27
0
 def set_problem_files_path(self, new_path):
     """ Set the path where problem files should go """
     self.organize['problem_files_path'] = new_path
     self.organize['problem_handler'] = \
         ProblemFileHandler( PathChannel(signal=getsig('badfile'),
             path=new_path) )
Beispiel #28
0
 def process_to_organize(self, event):
     dispatcher.send(signal=getsig(self.signal),
                     sender=self,
                     event=OrganizeFile(event))
Beispiel #29
0
 def process_create(self, event):
     evt = NewFile(event)
     dispatcher.send(signal=getsig(self.signal), sender=self, event=evt)
     return evt
Beispiel #30
0
    def my_init(self, signal): self.signal = getsig(signal)

class OrganizeListener(BaseListener, pyinotify.ProcessEvent, Loggable):
Beispiel #31
0
 def cb():
     dispatcher.send(signal=getsig("add_subwatch"),
                     sender=self,
                     directory=d)
Beispiel #32
0
 def cb():
     self.logger.debug('cb(%s)' % d)
     dispatcher.send(signal=getsig("add_subwatch"), sender=self,
             directory=d)
Beispiel #33
0
 def __init__(self, channel, target_path, recorded_path):
     self.channel       = channel
     self.target_path   = target_path
     self.recorded_path = recorded_path
     super(Organizer, self).__init__(signal=getsig(self.channel), weak=False)
Beispiel #34
0
 def process_to_organize(self, event):
     dispatcher.send(signal=getsig(self.signal), sender=self,
             event=OrganizeFile(event))
Beispiel #35
0
 def process_modify(self, event):
     evt = ModifyFile(event)
     dispatcher.send(signal=getsig(self.signal), sender=self, event=evt)
     return evt
Beispiel #36
0
 def __init__(self, signal, path):
     self.signal = getsig(signal)
     self.path   = path
Beispiel #37
0
 def watch_signal(self):
     """ Return the signal string our watch_listener is reading
     events from """
     return getsig(self.watch_listener.signal)
Beispiel #38
0
 def process_delete(self, event):
     evt = None
     if event.dir : evt = DeleteDir(event)
     else         : evt = DeleteFile(event)
     dispatcher.send(signal=getsig(self.signal), sender=self, event=evt)
     return evt
Beispiel #39
0
 def watch_signal(self):
     """ Return the signal string our watch_listener is reading
     events from """
     return getsig(self.watch_listener.signal)
Beispiel #40
0
 def process_delete_dir(self, event):
     evt = DeleteDir(event)
     dispatcher.send(signal=getsig(self.signal), sender=self, event=evt)
     return evt