示例#1
0
class Watcher(object):
    def __init__(self, logger):
        os.chdir("../")
        self.programPath = os.getcwd()
        os.chdir("app")
        self.__fs = FileSystem(".")
        self.__utils = Utils()
        self.__config = Config(fileSystem=self.__fs)
        self.__db = None
        self.__controller = None
        self.__feeder = None
        self.__webServer = None
        self.__logger = logger
        self.__configWatcher = None
        self.__stompClient = None
        dbName = self.__config.watcher.get("db", "sqlite")
        sys.path.insert(0, "../db/%s" % dbName)
        Database = __import__(dbName).Database
        dbFileName = self.__config.watcher.get("dbFile", "queue.db")

        print "Starting file watcher..."
        #------------------------
        self.__db = Database(dbFileName)
        self.__controller = Controller(self.__db, self.__fs, self.__config, \
                                FileWatcher, WatchDirectory, update=False)
        #self.__controller.configChanged(config)
        #self.__config.addReloadWatcher(self.__controller.configChanged)
        if self.__config.messaging.enabled:
            self.__stompClient = StompClient(self.__config, self.__utils)
            def stompListener(file, eventTime, eventName, isDir):
                if not isDir:
                    try:
                        self.__stompClient.queueUpdate(file, eventName)
                    except Exception, e:
                        msg = "ERROR in stompClient.queueUpdate('%s', '%s) - '%s'"
                        print msg % (file, eventName, str(e))
            self.__controller.addListener(stompListener)
        ## Log events
        def logCallback(file, eventTime, eventName, isDir):
            tStr = time.strftime("%Y%m%dT%H:%M:%S", time.localtime(eventTime))
            print "%s \t%s \t%s \t%s" % (tStr, eventName, isDir, file)
        self.__controller.addListener(logCallback)
        ##
        self.__configWatcher = FileWatcher(self.__config.configFile, self.__fs)
        self.__configWatcher.startWatching()
        def configChanged(file, eventName, **kwargs):
            #file=path, eventTime=eventTime, eventName=eventName, isDir=isDir, walk=False
            if eventName!="del" and file==self.__config.configFile:
                print "configChanged - reloading"
                self.__config.reload()
                self.__controller.configChanged(self.__config)
        self.__configWatcher.addListener(configChanged)

        self.__feeder = Feeder(self.__utils, self.__controller)
        feedservice = self.__config.watcher.get("feedservice", {})
        self.host = feedservice.get("host", "*")
        self.port = feedservice.get("port", 9000)
        s = webServe(self.host, self.port, self.__feeder)
        self.__webServer = s
示例#2
0
class Watcher(object):
    def __init__(self, logger):
        os.chdir("../")
        self.programPath = os.getcwd()
        os.chdir("app")
        self.__fs = FileSystem(".")
        self.__utils = Utils()
        self.__config = Config(fileSystem=self.__fs)
        self.__db = None
        self.__controller = None
        self.__feeder = None
        self.__webServerShutdownMethod = None
        self.__logger = logger
        self.__configWatcher = None
        dbName = self.__config.watcher.get("db", "sqlite")
        sys.path.insert(0, "../db/%s" % dbName)
        Database = __import__(dbName).Database
        dbFileName = self.__config.watcher.get("dbFile", "queue.db")

        print "Starting file watcher..."
        #------------------------
        self.__db = Database(dbFileName)
        self.__controller = Controller(self.__db, self.__fs, self.__config, \
                                FileWatcher, WatchDirectory, update=False)
        #self.__controller.configChanged(config)
        #self.__config.addReloadWatcher(self.__controller.configChanged)
        self.__configWatcher = FileWatcher(self.__config.configFile, self.__fs)
        self.__configWatcher.startWatching()
        def configChanged(file, eventName, **kwargs):
            #file=path, eventTime=eventTime, eventName=eventName, isDir=isDir, walk=False
            if eventName!="del" and file==self.__config.configFile:
                print "configChanged - reloading"
                self.__config.reload()
                self.__controller.configChanged(self.__config)
        self.__configWatcher.addListener(configChanged)

        self.__feeder = Feeder(self.__utils, self.__controller)
        feedservice = self.__config.watcher.get("feedservice", {})
        self.host = feedservice.get("host", "localhost")
        self.port = feedservice.get("port", 9000)
        self.__webServerShutdownMethod = webServe(self.host, self.port, self.__feeder)
        #------------------------
        print "host='%s', port=%s" % (self.host, self.port)


    @property
    def controller(self):
        return self.__controller

    @property
    def config(self):
        return self.__config
    
    @property
    def configFile(self):
        return self.__config.configFile


    def close(self):
        print "FileWatcher closing"
        self.__configWatcher.close()
        self.__controller.close()
        self.__webServerShutdownMethod()
        print "FileWatcher closed"
        #print self.__controller._getRecordsCount()
        #print self.queue.getFromDate(0)


    def __testListener(self, *args, **kwargs):
        path = kwargs.get("path")
        eTime = kwargs.get("eventTime")
        eName = kwargs.get("eventName")
        isDir = kwargs.get("isDir")
        print path, eTime, eName, isDir
示例#3
0
class Watcher(object):
    def __init__(self):
        os.chdir("../")
        self.programPath = os.getcwd()
        os.chdir("app")
        self.__fs = FileSystem(".")
        self.__utils = Utils()
        self.__config = Config(fileSystem=self.__fs)
        self.__dbFullFileame = None
        self.__db = None
        self.__controller = None
        self.__feeder = None
        self.__webServerShutdownMethod = None
        self.__watcherProgDir = self.__fs.absPath(".").rstrip("/app")
        dbName = self.__config.watcher.get("db", "sqlite")
        sys.path.append("../db/%s" % dbName)
        Database = __import__(dbName).Database
        self.__dbFullFileame = self.__config.watcher.get("dbFile", "queue.db")
        self.__dbFullFileame = self.__fs.absPath(self.__dbFullFileame)


        #------------------------
        stdout = sys.stdout
        stderr = sys.stderr
        # Note: must not output any data when running as a windows server.
        class Writer(object):
            def write(self, data):
                #stdout.write("** "+ data)
                # log
                pass
        if self.__config.daemon:
            w = Writer()
            sys.stdout = w
            sys.stderr = w
        #------------------------
        self.__db = Database(self.__dbFullFileame)
        self.__controller = Controller(self.__db, self.__fs, self.__config, \
                                FileWatcher, WatchDirectory, update=False, \
                                globalIgnoreFilter=self.__globalIgnoreFilter)
        #self.__controller.configChanged(config)
        #self.__config.addReloadWatcher(self.__controller.configChanged)
        configFile = self.__fs.absPath(self.__config.configFile)
        configWatcher = FileWatcher(configFile, self.__fs)
        configWatcher.startWatching()
        def configChanged(file, eventName, **kwargs):
            #file=path, eventTime=eventTime, eventName=eventName, isDir=isDir, walk=False
            if eventName!="del" and file==self.__config.configFile:
                print "configChanged - reloading"
                self.__config.reload()
                self.__controller.configChanged(self.__config)
        configWatcher.addListener(configChanged)

        self.__feeder = Feeder(self.__utils, self.__controller)
        feedservice = self.__config.watcher.get("feedservice", {})
        host = feedservice.get("host", "localhost")
        port = feedservice.get("port", 9000)
        self.__webServerShutdownMethod = webServe(host, port, self.__feeder)
        #------------------------
        print "host='%s', port=%s" % (host, port)
        print "Press enter to exit..."
        raw_input()
        configWatcher.close()
        self.__controller.close()
        self.__webServerShutdownMethod()
        #print self.__controller._getRecordsCount()
        #print self.queue.getFromDate(0)
        sys.stdout = stdout
        sys.stderr = stderr


    def __globalIgnoreFilter(self, fullFile):
        if fullFile==self.__dbFullFileame or fullFile.startswith(self.__watcherProgDir):
            return True
        return False


    def __testListener(self, *args, **kwargs):
        path = kwargs.get("path")
        eTime = kwargs.get("eventTime")
        eName = kwargs.get("eventName")
        isDir = kwargs.get("isDir")
        print path, eTime, eName, isDir