Ejemplo n.º 1
0
    def test_overlap(self):
        """
        2 dogs can watch the same file
        """
        DOGS = {
            'test1': {
                'paths': ['a.log'],
                'includes': ['error', 'wrong'],
                'handler': self.handler
            },
            'test2': {
                'paths': ['a.log'],
                'includes': ['warning', 'wrong'],
                'handler': self.handler
            }
        }
        f = self.open('a.log')
        logdogs = LogDogs(DOGS)

        self.write(f, 'an error\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['an error\n'])

        self.write(f, 'a warning\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['a warning\n'])

        self.assertTrue(self.q.empty())

        self.write(f, 'something wrong\n')
        logdogs.process()
        # received 2 times
        self.assertEqual(self.q.get_nowait(), ['something wrong\n'])
        self.assertEqual(self.q.get_nowait(), ['something wrong\n'])
Ejemplo n.º 2
0
    def test_1_file(self):
        """
        the simplest case
        """
        DOGS = {
            'test': {
                'paths': ['a.log'],
                'includes': ['wrong'],
                'excludes': ['long'],
                'handler': self.handler
            }
        }
        f = self.open('a.log')
        logdogs = LogDogs(DOGS)

        self.write(f, 'hello world\n')
        logdogs.process()
        self.assertTrue(self.q.empty())

        self.write(f, 'something wrong\nwhats wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(),
                         ['something wrong\n', 'whats wrong\n'])

        self.write(f, 'a long wrong answer\n')
        logdogs.process()
        self.assertTrue(self.q.empty())
Ejemplo n.º 3
0
    def test_2_not_exists(self):
        """
        bug: the same dog watch the same path(.) twice
        """
        DOGS = {
            'test': {
                'paths': ['a.log', 'b.log'],
                'includes': ['wrong'],
                'handler': self.handler
            }
        }
        logdogs = LogDogs(DOGS)

        # create file after watch
        f = self.open('a.log')
        self.write(f, 'something wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['something wrong\n'])
Ejemplo n.º 4
0
    def test_not_exists(self):
        """
        log file is not required to exist before watch
        """
        DOGS = {
            'test': {
                'paths': ['a.log'],
                'includes': ['wrong'],
                'handler': self.handler
            }
        }
        logdogs = LogDogs(DOGS)

        # create file after watch
        f = self.open('a.log')

        self.write(f, 'something wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['something wrong\n'])
Ejemplo n.º 5
0
    def test_2_files(self):
        """
        a dog can watch more than 1 files
        """
        DOGS = {
            'test': {
                'paths': ['a.log', 'b.log'],
                'includes': ['wrong'],
                'handler': self.handler
            }
        }
        f1 = self.open('a.log')
        f2 = self.open('b.log')
        logdogs = LogDogs(DOGS)

        self.write(f1, 'something wrong\n')
        self.write(f2, 'whats wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['something wrong\n'])
        self.assertEqual(self.q.get_nowait(), ['whats wrong\n'])
Ejemplo n.º 6
0
    def test_rotate(self):
        """
        log file is moved and a new one is created
        """
        DOGS = {
            'test': {
                'paths': ['a.log'],
                'includes': ['wrong'],
                'handler': self.handler
            }
        }
        f = self.open('a.log')
        logdogs = LogDogs(DOGS)

        self.write(f, 'something wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['something wrong\n'])

        shutil.move('a.log', 'b.log')
        self.write(f, 'whats wrong\n')
        # nginx will still log to old log file before reopen signal is handled
        # in some cases the last few logs are missing

        # write to new file immediately
        f = self.open('a.log')
        self.write(f, 'all is wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['whats wrong\n'])
        self.assertEqual(self.q.get_nowait(), ['all is wrong\n'])
Ejemplo n.º 7
0
    def test_glob_recursively(self):
        """
        ** can be used in glob pattern
        """
        DOGS = {
            'test': {
                'paths': ['logs/**/*.log'],
                'includes': ['wrong'],
                'handler': self.handler
            }
        }

        os.makedirs('logs/b')
        os.makedirs('logs/c')
        fa = self.open('logs/a.log')
        fb = self.open('logs/b/b.log')
        logdogs = LogDogs(DOGS)

        self.write(fa, 'something wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['something wrong\n'])

        self.write(fb, 'you are wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['you are wrong\n'])

        # create a new log file
        fc = self.open('logs/c/c.log')
        self.write(fc, 'Am I wrong?\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['Am I wrong?\n'])

        # create a new sub-directory
        os.makedirs('logs/d')
        fd = self.open('logs/d/d.log')
        self.write(fd, 'wrong! wrong! wrong!\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['wrong! wrong! wrong!\n'])
Ejemplo n.º 8
0
    def test_half_line(self):
        """
        bug: half line will be read if the log is being written at the same time
        """
        DOGS = {
            'test': {
                'paths': ['a.log'],
                'includes': ['wrong'],
                'handler': self.handler
            }
        }
        # create an empty file or truncate if it exists
        f = self.open('a.log')
        logdogs = LogDogs(DOGS)

        self.write(f, 'something w')
        logdogs.process()
        self.assertTrue(self.q.empty())

        self.write(f, 'rong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['something wrong\n'])
Ejemplo n.º 9
0
    def test_ignore_old_logs(self):
        """
        old logs in the log file are ignored
        """
        DOGS = {
            'test': {
                'paths': ['a.log'],
                'includes': ['wrong'],
                'handler': self.handler
            }
        }
        f = self.open('a.log')
        self.write(f, 'you are on a wrong way\n')
        logdogs = LogDogs(DOGS)

        self.write(f, 'hello world\n')
        logdogs.process()
        self.assertTrue(self.q.empty())

        self.write(f, 'something wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['something wrong\n'])
Ejemplo n.º 10
0
    def test_glob(self):
        """
        glob pattern can be used in path
        """
        DOGS = {
            'test': {
                'paths': ['logs/*.log'],
                'includes': ['wrong'],
                'handler': self.handler
            }
        }
        os.makedirs('logs')
        f = self.open('logs/a.log')
        logdogs = LogDogs(DOGS)

        self.write(f, 'something wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['something wrong\n'])

        f = self.open('logs/b.log')

        self.write(f, 'whats wrong\n')
        logdogs.process()
        self.assertEqual(self.q.get_nowait(), ['whats wrong\n'])
Ejemplo n.º 11
0
    def __init__(self):
        self.count = 0

    def __call__(self, file, lines):
        self.count += 1
        logger.info('...')
        # Do whatever you want here...


DOGS = {
    "test": {
        "paths": ["a.log", "b.log"],
        "handler": MyHandler(),
        "includes": [r"wrong"],
        "excludes": [r"nothing"]
    },
    "glob": {
        "paths": ["**/*.log"],
        "handler": MyHandler(),
        "includes": [r"wrong"],
    }
}

logdogs = LogDogs(DOGS)
logdogs.run(5,
            daemon=True,
            pid='logdogs.pid',
            stdout='logdogs.out',
            stderr='logdogs.err',
            working_directory=os.path.abspath('.'))