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)
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)
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
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
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