Пример #1
0
    def test_get_task_status(self):
        # FIXME: Actually setup celery tasks instead of a dummy class?
        test_tasks = []

        (status, num_complete) = TaskUtil.get_task_status(test_tasks)
        self.assertTrue(status is None and num_complete == 0)

        test_tasks2 = [VarType() for i in range(5)]
        for task in test_tasks2:
            task.status = "SUCCESS"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks2)
        self.assertTrue(status == "SUCCESS" and num_complete == 5)

        test_tasks3 = test_tasks2
        test_tasks3[3].status = "FAILURE"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks3)
        self.assertTrue(status == "FAILURE" and num_complete == 3)

        test_tasks4 = test_tasks3
        test_tasks4[2].status = "REVOKED"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks4)
        self.assertTrue(status == "REVOKED" and num_complete == 2)

        test_tasks5 = test_tasks4
        test_tasks5[1].status = "RETRY"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks5)
        self.assertTrue(status == "RETRY" and num_complete == 1)

        test_tasks6 = [VarType() for i in range(10)]
        for i, task in enumerate(test_tasks6):
            task.status = "PENDING" if i % 2 == 0 else "SUCCESS"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks6)
        self.assertTrue(status == "PENDING" and num_complete == 5)

        test_tasks7 = test_tasks6
        test_tasks7[9].status = "STARTED"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks7)
        self.assertTrue(status == "STARTED" and num_complete == 4)

        test_tasks8 = test_tasks7
        test_tasks8[9].status = "RECEIVED"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks8)
        self.assertTrue(status == "RECEIVED" and num_complete == 4)

        with self.assertRaises(Exception):
            test_tasks9 = [VarType() for i in range(1)]
            test_tasks9[0].status = "attemped"
            TaskUtil.get_task_status(test_tasks9)
Пример #2
0
    def test_get_task_status(self):
        # FIXME: Actually setup celery tasks instead of a dummy class?
        test_tasks = []

        (status, num_complete) = TaskUtil.get_task_status(test_tasks, 1)
        self.assertTrue(status == 'UNAVAILABLE' and num_complete == 0)

        (status, num_complete) = TaskUtil.get_task_status(test_tasks, 0)
        self.assertTrue(status == 'UNAVAILABLE' and num_complete == 0)

        test_tasks2 = [VarType() for i in range(5)]
        for task in test_tasks2:
            task.status = "SUCCESS"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks2, 5)
        self.assertTrue(status == "SUCCESS" and num_complete == 5)

        test_tasks3 = test_tasks2
        test_tasks3[3].status = "FAILURE"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks3, 5)
        self.assertTrue(status == "FAILURE" and num_complete == 3)

        test_tasks4 = test_tasks3
        test_tasks4[2].status = "REVOKED"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks4, 5)
        self.assertTrue(status == "REVOKED" and num_complete == 2)

        test_tasks5 = test_tasks4
        test_tasks5[1].status = "RETRY"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks5, 5)
        self.assertTrue(status == "RETRY" and num_complete == 1)

        test_tasks6 = [VarType() for i in range(10)]
        for i, task in enumerate(test_tasks6):
            task.status = "PENDING" if i % 2 == 0 else "SUCCESS"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks6, 10)
        self.assertTrue(status == "PENDING" and num_complete == 5)

        test_tasks7 = test_tasks6
        test_tasks7[9].status = "STARTED"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks7, 10)
        self.assertTrue(status == "STARTED" and num_complete == 4)

        test_tasks8 = test_tasks7
        test_tasks8[9].status = "RECEIVED"

        (status, num_complete) = TaskUtil.get_task_status(test_tasks8, 10)
        self.assertTrue(status == "RECEIVED" and num_complete == 4)
Пример #3
0
    def convert_dbms_metrics(self, metrics, observation_time,
                             target_objective):
        metric_data = {}
        # Same as metric_data except COUNTER metrics are not divided by the time
        base_metric_data = {}
        numeric_metric_catalog = MetricCatalog.objects.filter(
            dbms__id=self.dbms_id, metric_type__in=MetricType.numeric())

        for metadata in numeric_metric_catalog:
            name = metadata.name
            value = metrics[name]

            if metadata.vartype == VarType.INTEGER:
                converted = float(self.convert_integer(value, metadata))
            elif metadata.vartype == VarType.REAL:
                converted = self.convert_real(value, metadata)
            else:
                raise ValueError(
                    ("Found non-numeric metric '{}' in the numeric "
                     "metric catalog: value={}, type={}").format(
                         name, value, VarType.name(metadata.vartype)))

            if metadata.metric_type == MetricType.COUNTER:
                assert isinstance(converted, float)
                base_metric_data[name] = converted
                metric_data[name] = converted / observation_time
            elif metadata.metric_type == MetricType.STATISTICS:
                assert isinstance(converted, float)
                base_metric_data[name] = converted
                metric_data[name] = converted
            else:
                raise ValueError('Unknown metric type for {}: {}'.format(
                    name, metadata.metric_type))

        target_list = target_objectives.get_all(self.dbms_id)
        if target_objective not in target_list:
            raise ValueError(
                "Invalid target objective '{}'. Expected one of: {}.".format(
                    target_objective, ', '.join(target_list.keys())))

        for target_name, target_instance in target_list.items():
            metric_data[target_name] = target_instance.compute(
                base_metric_data, observation_time)

        return metric_data
Пример #4
0
    def convert_dbms_metrics(self, metrics, observation_time,
                             target_objective):
        base_metric_data = {}
        metric_data = {}
        numeric_metric_catalog = MetricCatalog.objects.filter(
            dbms__id=self.dbms_id, metric_type__in=MetricType.numeric())
        for name, value in list(metrics.items()):
            prt_name = self.partial_name(name)
            metadata = numeric_metric_catalog.filter(name=prt_name).first()

            if metadata:
                if metadata.vartype == VarType.INTEGER:
                    converted = float(self.convert_integer(value, metadata))
                elif metadata.vartype == VarType.REAL:
                    converted = self.convert_real(value, metadata)
                else:
                    raise ValueError(
                        ("Found non-numeric metric '{}' in the numeric "
                         "metric catalog: value={}, type={}").format(
                             name, value, VarType.name(metadata.vartype)))

                if metadata.metric_type == MetricType.COUNTER:
                    assert isinstance(converted, float)
                    base_metric_data[name] = converted
                    metric_data[name] = converted / observation_time
                elif metadata.metric_type == MetricType.STATISTICS:
                    assert isinstance(converted, float)
                    base_metric_data[name] = converted
                    metric_data[name] = converted
                else:
                    raise ValueError('Unknown metric type for {}: {}'.format(
                        name, metadata.metric_type))

        target_objective_instance = target_objectives.get_instance(
            self.dbms_id, target_objective)
        metric_data[target_objective] = target_objective_instance.compute(
            base_metric_data, observation_time)

        return metric_data
Пример #5
0
    def convert_dbms_metrics(self, metrics, observation_time,
                             target_objective):
        metric_data = {}
        # Same as metric_data except COUNTER metrics are not divided by the time
        base_metric_data = {}

        for name, metadata in self.numeric_metric_catalog_.items():
            value = metrics[name]

            if metadata.vartype == VarType.INTEGER:
                converted = float(self.convert_integer(value, metadata))
            elif metadata.vartype == VarType.REAL:
                converted = self.convert_real(value, metadata)
            else:
                raise ValueError(
                    ("Found non-numeric metric '{}' in the numeric "
                     "metric catalog: value={}, type={}").format(
                         name, value, VarType.name(metadata.vartype)))

            if metadata.metric_type == MetricType.COUNTER:
                assert isinstance(converted, float)
                base_metric_data[name] = converted
                metric_data[name] = converted / observation_time
            elif metadata.metric_type == MetricType.STATISTICS:
                assert isinstance(converted, float)
                base_metric_data[name] = converted
                metric_data[name] = converted
            else:
                raise ValueError('Unknown metric type for {}: {}'.format(
                    name, metadata.metric_type))

        target_objective_instance = target_objectives.get_instance(
            self.dbms_id, target_objective)
        metric_data[target_objective] = target_objective_instance.compute(
            base_metric_data, observation_time)

        return metric_data