Example #1
0
class LogAnalyzerTest(unittest.TestCase):
    def setUp(self):
        self.analyzer = LogAnalyzer(None)
        self.log_generator1 = log_generator(
            './test/nginx-access-ui.log-20170630.log', log_parser, RE_LOG_LINE)
        self.log_generator2 = log_generator(
            './test/nginx-access-ui.log-20170630.log', log_parser, RE_LOG_LINE)
        self.calc_generator = LogAnalyzer(self.log_generator1).calc()
        self.true_analyzer = LogAnalyzer(self.log_generator2)
        self.true_analyzer.get_data()

    def tearDown(self):
        self.log_generator1.close()
        self.log_generator2.close()
        self.calc_generator.close()

    @cases([([0.9, 1.2, 1.23, 1.4], 1.215), ([0.0], 0.0), ([0.3], 0.3),
            ([0.30, 0.75, 0.8], 0.75)])
    def test_median(self, args):
        first = self.analyzer.median(args[0])
        self.assertAlmostEqual(first, args[1], delta=0.001)

    @cases([{
        'count': 2,
        'time_avg': 0.021,
        'time_max': 0.021,
        'time_sum': 0.042,
        'url': '/api/v2/test/auth/',
        'time_med': 0.021,
        'time_perc': 0.021902035324854106,
        'count_perc': 0.5813953488372093
    }, {
        'count': 24,
        'time_avg': 0.0027083333333333347,
        'time_max': 0.006,
        'time_sum': 0.06500000000000003,
        'url': '/export/appinstall_raw/2017-06-29/',
        'time_med': 0.003,
        'time_perc': 0.03389600705036946,
        'count_perc': 6.976744186046512
    }, {
        'count': 25,
        'time_avg': 0.0009200000000000006,
        'time_max': 0.001,
        'time_sum': 0.023000000000000013,
        'url': '/export/appinstall_raw/2017-06-30/',
        'time_med': 0.001,
        'time_perc': 0.011993971725515348,
        'count_perc': 7.267441860465116
    }])
    def test_calculation(self, kwargs):
        url = kwargs['url']
        count = len(self.true_analyzer.time_sum_buf[url])
        time_sum = sum(self.true_analyzer.time_sum_buf[url])
        self.true_analyzer.time_sum_buf[url].sort()
        count_perc = self.true_analyzer.count_perc(count)
        time_perc = self.true_analyzer.time_perc_sum(time_sum)
        time_avg = time_sum / count
        time_max = self.true_analyzer.time_sum_buf[url][-1]
        time_med = self.true_analyzer.median(
            self.true_analyzer.time_sum_buf[url])

        self.assertEqual(kwargs['count'], count)
        self.assertEqual(kwargs['url'], url)
        self.assertAlmostEqual(kwargs['time_avg'], time_avg, delta=0.001)
        self.assertAlmostEqual(kwargs['time_max'], time_max, delta=0.001)
        self.assertAlmostEqual(kwargs['time_sum'], time_sum, delta=0.001)
        self.assertAlmostEqual(kwargs['time_med'], time_med, delta=0.001)
        self.assertAlmostEqual(kwargs['time_perc'], time_perc, delta=0.001)
        self.assertAlmostEqual(kwargs['count_perc'], count_perc, delta=0.001)

    @cases([{
        'count': 1,
        'time_avg': 0.145,
        'time_max': 0.145,
        'time_sum': 0.145,
        'url': '/api/v2/banner/1717161',
        'time_med': 0.145,
        'time_perc': 0.07561416957390106,
        'count_perc': 0.29069767441860467
    }, {
        'count': 1,
        'time_avg': 0.183,
        'time_max': 0.183,
        'time_sum': 0.183,
        'url': '/api/1/campaigns/?id=7952462',
        'time_med': 0.183,
        'time_perc': 0.0954302967725786,
        'count_perc': 0.29069767441860467
    }, {
        'count': 1,
        'time_avg': 0.386,
        'time_max': 0.386,
        'time_sum': 0.386,
        'url': '/api/v2/group/7843268/banners',
        'time_med': 0.386,
        'time_perc': 0.2012901341760401,
        'count_perc': 0.29069767441860467
    }, {
        'count': 1,
        'time_avg': 0.142,
        'time_max': 0.142,
        'time_sum': 0.142,
        'url': '/api/v2/banner/16168711',
        'time_med': 0.142,
        'time_perc': 0.07404973847926863,
        'count_perc': 0.29069767441860467
    }, {
        'count': 1,
        'time_avg': 0.068,
        'time_max': 0.068,
        'time_sum': 0.068,
        'url':
        '/api/v2/banner/26624919/statistic/?date_from=2017-06-29&date_to=2017-06-29',
        'time_med': 0.068,
        'time_perc': 0.03546043814500188,
        'count_perc': 0.29069767441860467
    }, {
        'count': 1,
        'time_avg': 0.587,
        'time_max': 0.587,
        'time_sum': 0.587,
        'url': '/api/v2/group/7861864/banners',
        'time_med': 0.587,
        'time_perc': 0.3061070175164133,
        'count_perc': 0.29069767441860467
    }, {
        'count': 1,
        'time_avg': 0.061,
        'time_max': 0.061,
        'time_sum': 0.061,
        'url':
        '/api/v2/group/6812420/statistic/sites/?date_type=day&date_from=2017-06-29&date_to=2017-06-29',
        'time_med': 0.061,
        'time_perc': 0.03181009892419286,
        'count_perc': 0.29069767441860467
    }, {
        'count': 1,
        'time_avg': 1.991,
        'time_max': 1.991,
        'time_sum': 1.991,
        'url': '/api/v2/banner/21542368',
        'time_med': 1.991,
        'time_perc': 1.0382607698043935,
        'count_perc': 0.29069767441860467
    }, {
        'count':
        1,
        'time_avg':
        0.178,
        'time_max':
        0.178,
        'time_sum':
        0.178,
        'url':
        '/api/v2/internal/revenue_share/service/276/partner/1114631/statistic/v2?date_from=2017-06-23'
        '&date_to=2017-06-29&date_type=day',
        'time_med':
        0.178,
        'time_perc':
        0.09282291161485787,
        'count_perc':
        0.29069767441860467
    }, {
        'count': 1,
        'time_avg': 0.096,
        'time_max': 0.096,
        'time_sum': 0.096,
        'url':
        '/api/v2/group/7181748/statistic/sites/?date_type=day&date_from=2017-06-29&date_to=2017-06-29',
        'time_med': 0.096,
        'time_perc': 0.050061795028237946,
        'count_perc': 0.29069767441860467
    }])
    def test_analyzer(self, kwargs):
        data = next(self.calc_generator)
        self.assertEqual(data['count'], kwargs['count'])
        self.assertEqual(data['url'], kwargs['url'])
        self.assertAlmostEqual(data['time_avg'],
                               kwargs['time_avg'],
                               delta=0.001)
        self.assertAlmostEqual(data['time_max'],
                               kwargs['time_max'],
                               delta=0.001)
        self.assertAlmostEqual(data['time_sum'],
                               kwargs['time_sum'],
                               delta=0.001)
        self.assertAlmostEqual(data['time_med'],
                               kwargs['time_med'],
                               delta=0.001)
        self.assertAlmostEqual(data['time_perc'],
                               kwargs['time_perc'],
                               delta=0.001)
        self.assertAlmostEqual(data['count_perc'],
                               kwargs['count_perc'],
                               delta=0.001)

    def test_get_last_log(self):
        path = log_analyzer.get_last_log('./test')[0]
        name = path.split(os.path.sep)[-1]
        self.assertEqual(name, 'nginx-access-ui.log-20170630.log')

    @cases([('unknown', {}),
            ('log_analyzer.conf', {
                "REPORT_TEMPLATE": "./report.html",
                "TS_FILE": "/var/tmp/log_analyzer.ts"
            })])
    def test_open_config(self, args):
        self.assertEqual(log_analyzer.open_config(args[0]), args[1])