#!/usr/bin/env python from dm.common.utility.osUtility import OsUtility from watchdog.observers.polling import PollingObserver from fileSystemObserverAgent import FileSystemObserverAgent from dmFileSystemEventHandler import DmFileSystemEventHandler class WatchdogFileSystemObserverAgent(FileSystemObserverAgent): DAQ_PERMISSIONS_MODE = 0777 def __init__(self): FileSystemObserverAgent.__init__(self) self.observer = PollingObserver() self.observedWatchDict = {} def createDirectory(self, dataDirectory): try: OsUtility.createDir(dataDirectory, mode=self.DAQ_PERMISSIONS_MODE) except Exception, ex: self.logger.warn('Unable to create directory %s: %s' % (dataDirectory, ex)) def getFiles(self, dataDirectory): return OsUtility.findFilesAsDict(dataDirectory) def startObservingPath(self, dataDirectory, experiment): self.logger.debug('Starting observer for %s' % dataDirectory) eventHandler = DmFileSystemEventHandler(self.fileSystemObserver, dataDirectory, experiment) observedWatch = self.observer.schedule(eventHandler, dataDirectory, recursive=True) self.observedWatchDict[dataDirectory] = observedWatch def stopObservingPath(self, dataDirectory, experiment): observedWatch = self.observedWatchDict.get(dataDirectory) if observedWatch: self.logger.debug('Stopping observer for %s' % dataDirectory) self.observer.unschedule(observedWatch) del self.observedWatchDict[dataDirectory] else: self.logger.debug('Observer for %s is not active' % dataDirectory) def start(self): self.logger.debug('Starting watchdog observer agent') self.observer.start() def stop(self): self.logger.debug('Stopping watchdog observer agent') self.observer.stop() self.observer.join()