예제 #1
0
    def test9HistogramAnalysisReceiveAtomNoReport(self):
        """This test case aims to test the functionality of the HistogramAnalysis's receive_atom method, when NO report is expected."""
        description = "Test9HistogramAnalysis"
        start_time = 57600
        end_time = 662600
        diff = 30000

        modulo_time_bin_definition = ModuloTimeBinDefinition(
            86400, 3600, 0, 1, 24, False)
        histogram_data = HistogramData(self.match_crontab,
                                       modulo_time_bin_definition)
        histogram_analysis = HistogramAnalysis(
            self.aminer_config,
            [(histogram_data.property_path, modulo_time_bin_definition)],
            604800, [self.stream_printer_event_handler], True, 'Default')
        self.analysis_context.register_component(histogram_analysis,
                                                 description)
        match_element = MatchElement(self.match_crontab, start_time,
                                     start_time, [])

        t = time.time()
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element),
                           t, histogram_analysis)
        histogram_analysis.receive_atom(log_atom)
        histogram_data.add_value(start_time)
        histogram_data.add_value(end_time)
        match_element = MatchElement(self.match_crontab, end_time, end_time,
                                     [])
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element),
                           t + diff, histogram_analysis)
        histogram_analysis.receive_atom(log_atom)
        self.assertEqual(self.output_stream.getvalue(), '')

        # resetting the outputStream
        start_time = start_time + 3600
        end_time = end_time + 3600
        self.reset_output_stream()
        t = t + diff

        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element),
                           t, histogram_analysis)
        histogram_analysis.receive_atom(log_atom)

        histogram_data.add_value(start_time)
        histogram_data.add_value(end_time)
        match_element = MatchElement(self.match_crontab, end_time, end_time,
                                     [])
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element),
                           t + diff, histogram_analysis)
        histogram_analysis.receive_atom(log_atom)
        self.assertEqual(self.output_stream.getvalue(), '')
    def test10_histogram_analysis_receive_atom_report_expected(self):
        """This test case aims to test the functionality of the HistogramAnalysis's receive_atom method, when A report is expected."""
        description = "Test10HistogramAnalysis"
        start_time = 57600
        end_time = 662600
        diff = 605000

        modulo_time_bin_definition = ModuloTimeBinDefinition(86400, 3600, 0, 1, 24, False)
        histogram_data = HistogramData(self.match_crontab, modulo_time_bin_definition)
        histogram_analysis = HistogramAnalysis(self.aminer_config, [(histogram_data.property_path, modulo_time_bin_definition)], 604800,
                                               [self.stream_printer_event_handler], True, 'Default')
        self.analysis_context.register_component(histogram_analysis, description)
        match_element = MatchElement(self.match_crontab, str(start_time).encode(), start_time, None)

        t = time.time()
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t, histogram_analysis)
        histogram_analysis.receive_atom(log_atom)
        histogram_data.add_value(start_time)
        histogram_data.add_value(end_time)
        match_element = MatchElement(self.match_crontab, str(end_time).encode(), end_time, None)
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t + diff, histogram_analysis)
        histogram_analysis.receive_atom(log_atom)

        self.assertEqual(self.output_stream.getvalue(), self.__expected_string_histogram_analysis % (
            datetime.fromtimestamp(t + diff).strftime(self.datetime_format_string), histogram_analysis.__class__.__name__, description, 2,
            datetime.fromtimestamp(t).strftime(self.datetime_format_string),
            datetime.fromtimestamp(t + diff).strftime(self.datetime_format_string),
            'Property "match/crontab" (2 elements):\n  * [16-17]: 2 (ratio = 1.00e+00, p = 1.74e-03)'))

        # resetting the outputStream
        start_time = start_time + 3600
        end_time = end_time + 3600
        self.reset_output_stream()
        t = t + diff

        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t, histogram_analysis)
        histogram_analysis.receive_atom(log_atom)
        histogram_data.add_value(start_time)
        histogram_data.add_value(end_time)
        match_element = MatchElement(self.match_crontab, str(end_time).encode(), end_time, None)

        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t + diff, histogram_analysis)
        histogram_analysis.receive_atom(log_atom)

        self.assertEqual(self.output_stream.getvalue(), self.__expected_string_histogram_analysis % (
            datetime.fromtimestamp(t + diff).strftime(self.datetime_format_string), histogram_analysis.__class__.__name__, description, 2,
            datetime.fromtimestamp(t).strftime(self.datetime_format_string),
            datetime.fromtimestamp(t + diff).strftime(self.datetime_format_string),
            'Property "match/crontab" (2 elements):\n  * [16-17]: 1 (ratio = 5.00e-01, p = 8.16e-02)\n  * [17-18]: 1 '
            '(ratio = 5.00e-01, p = 8.16e-02)'))
    def run_histogram_analysis(self, number_of_pathes, amplifier):
        results = [None] * self.iterations
        avg = 0
        z = 0
        while z < self.iterations:
            modulo_time_bin_definition = ModuloTimeBinDefinition(
                86400, 86400 / number_of_pathes, 0, 1, number_of_pathes, False)
            histogram_data = HistogramData('match/crontab',
                                           modulo_time_bin_definition)
            histogram_analysis = HistogramAnalysis(
                self.aminer_config,
                [(histogram_data.property_path, modulo_time_bin_definition)],
                amplifier * self.waiting_time,
                [self.stream_printer_event_handler], False, 'Default')

            i = 0
            seconds = time.time()
            t = seconds
            while int(time.time() - seconds) < self.waiting_time:
                p = process_time()
                rand = random.randint(0, 100000)
                seconds = seconds + process_time() - p
                match_element = MatchElement('match/crontab', t + rand,
                                             t + rand, [])
                log_atom = LogAtom(histogram_data.bin_data,
                                   ParserMatch(match_element), t + i,
                                   histogram_analysis)
                histogram_analysis.receive_atom(log_atom)
                i = i + 1
            results[z] = i
            z = z + 1
            avg = avg + i
        avg = avg / self.iterations
        type(self).result = self.result + self.result_string % (
            histogram_analysis.__class__.__name__, avg, results,
            '%d bin(s) and output after %d elements.' %
            (number_of_pathes, amplifier * self.waiting_time))