Example #1
0
    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))
Example #2
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
 def __construct_rotatable_file(self, position = -1 ):
     self.rotatable_file = RotatableFileReader(filepath = TEST_LOG_FILE, position=position)
     self.rotatable_file.open()
class test_rotatable_file(unittest.TestCase):
    def test_can_pass_filename(self):
        self.assertEqual(TEST_LOG_FILE, self.rotatable_file.getFilePath())

    def test_can_tail_one_line(self):
        self.__insert_one_line(LINE_ONE)
        line = self.rotatable_file.getLine()
        self.assertEqual(LINE_ONE, line)

    def test_can_tail_two_lines(self):
        self.__insert_one_line(LINE_ONE)
        line_one = self.rotatable_file.getLine()
        self.assertEqual(LINE_ONE, line_one)

        self.__insert_one_line(LINE_TWO)
        line_two = self.rotatable_file.getLine()
        self.assertEqual(LINE_TWO, line_two)

    def test_can_tail_when_rotate(self):
        self.__insert_one_line(LINE_ONE)
        line_one = self.rotatable_file.getLine()
        self.assertEqual(LINE_ONE, line_one)

        self.__rotate_test_file()

        self.__insert_one_line(LINE_TWO)
        line_two = self.rotatable_file.getLine()
        self.assertEqual(LINE_TWO, line_two)

    def test_is_starts_from_bottom(self):
        self.__insert_one_line(LINE_ONE)
        self.__construct_rotatable_file()
        self.__insert_one_line(LINE_TWO)
        line = self.rotatable_file.getLine()
        self.assertEqual(LINE_TWO, line)

    def test_read_from_0_position(self):
        self.__insert_one_line(LINE_ONE)
        self.__insert_one_line(LINE_TWO)
        self.__construct_rotatable_file(position=0)
        line_one = self.rotatable_file.getLine()
        second_line = self.rotatable_file.getLine()
        self.assertEqual(line_one, LINE_ONE)
        self.assertEqual(second_line, LINE_TWO)

    def setUp(self):
        self.__open_test_file()
        self.__construct_rotatable_file()

    def tearDown(self):
        test_helper.tearDown()

    def __construct_rotatable_file(self, position = -1 ):
        self.rotatable_file = RotatableFileReader(filepath = TEST_LOG_FILE, position=position)
        self.rotatable_file.open()

    def __insert_one_line(self, line):
        self.test_file.write(line + END_LINE)
        self.test_file.flush()

    def __rotate_test_file(self):
        self.test_file.close()
        os.remove(TEST_LOG_FILE)
        self.__open_test_file()

    def __open_test_file(self):
        self.test_file = open(TEST_LOG_FILE,"w")