예제 #1
0
class FileWatcher(gevent.Greenlet):
    def __init__(self, file, logQueue):
        self.__file = file

        self.__startposition = START_FROM_END
        if file.get('startposition') == 'top':
            self.__startposition = START_FROM_TOP

        self.__move_on_EOF = False
        if file.get('moveoneof'):
            self.__move_on_EOF = True

        self.__shutdown = False
        self.__logQueue = logQueue
        gevent.Greenlet.__init__(self)


    def get_file(self):
        return self.__file

    def run(self):
        if self.__move_on_EOF:
            self.__fd = TextFileReader(self.__file['filepath'], position=self.__startposition,
                moveinfo=self.__file.get('moveoneof'))
        else:
            self.__fd = RotatableFileReader(self.__file['filepath'], position=self.__startposition)

        while 1:
            if self.__shutdown:
                break
            line = self.__fd.getLine()
            if line == '' or line == '\0':
                gevent.sleep(SLEEP_TIME)
                continue
                #TODO: handle queue full
            self.__logQueue.put((self.__file['processor'], line))

    def shutdown(self):
        self.__shutdown = True