def analyze_line(self, line):
        line = line.strip()
        result = self.log_parser.parse(line)
        # Ignore invalid log
        if not result:
            return
        if self.start_from_datetime and result['request_datetime'] <= self.start_from_datetime:
            return
        request_datetime = result['request_datetime']
        self.last_analyzed_datetime = request_datetime
        groups = self.get_result_group_names(request_datetime)
        if not groups:
            return

        for group in groups:
            if group not in self.data:
                self.data[group] = copy.deepcopy(self.default_data)

        for group in groups:
            self.data[group]['requests_counter']['normal'] += 1
        if result['resp_time'] < self.min_msecs:
            return

        resp_time = result['resp_time']

        # Use url_classifier to classify url
        matched_url_rule = self.url_classifier.classify(result['url_path'])

        for group in groups:
            big_d = self.data[group]['data_details'].setdefault((result['method'], matched_url_rule), {
                'urls': {},
                'duration_agr_data': ValuesAggregation(),
            })

            big_d['duration_agr_data'].add_value(resp_time)
            big_d['urls'].setdefault(result['url'], ValuesAggregation()).add_value(resp_time)
            
            self.data[group]['requests_counter']['slow'] += 1
            self.data[group]['total_slow_duration'] += resp_time
dataset/ETHPy150Open piglei/uwsgi-sloth/uwsgi_sloth/analyzer.py/RealtimeLogAnalyzer.analyze_line/original