def get_result(self): metric_result = MetricResult() metric_result.name = self.name metric_result.unit = self.unit metric_result.mode = self.mode metric_result.status = self.status.status metric_result.series = [] metric_result.groundtruth.available = self.groundtruth.available metric_result.groundtruth.data = self.groundtruth.data metric_result.groundtruth.epsilon = self.groundtruth.epsilon if self.status.status != TestblockStatus.SUCCEEDED: metric_result.groundtruth.result = Groundtruth.FAILED metric_result.groundtruth.error_message = metrics_helper.extract_error_message(self.status) return metric_result # check if result is available if len(self.series) == 0: # let the analyzer know that this test failed metric_result.groundtruth.result = Groundtruth.FAILED metric_result.groundtruth.error_message = "testblock {} stopped without result. " \ "No transforms found between {} & {}".format(self.testblock_name, self.root_frame, self.measured_frame) return metric_result # at this point we're sure that any result is available # set series if self.series_mode != None: metric_result.series = self.series # calculate metric data [metric_result.data, metric_result.min, metric_result.max, metric_result.mean, metric_result.std] = metrics_helper.calculate_metric_data(metric_result.name, metric_result.mode, self.series) # fill details as KeyValue messages details = [] details.append(KeyValue("root_frame", self.root_frame)) details.append(KeyValue("measured_frame", self.measured_frame)) metric_result.details = details # evaluate metric data if metric_result.groundtruth.available: # groundtruth available if math.fabs(metric_result.groundtruth.data - metric_result.data.data) <= metric_result.groundtruth.epsilon: metric_result.groundtruth.result = Groundtruth.SUCCEEDED metric_result.groundtruth.error_message = "all OK" else: metric_result.groundtruth.result = Groundtruth.FAILED metric_result.groundtruth.error_message = "groundtruth missmatch: %f not within %f+-%f"%(metric_result.data.data, metric_result.groundtruth.data, metric_result.groundtruth.epsilon) else: # groundtruth not available metric_result.groundtruth.result = Groundtruth.SUCCEEDED metric_result.groundtruth.error_message = "all OK (no groundtruth available)" return metric_result
def get_result(self): metric_result = MetricResult() metric_result.name = self.name metric_result.status = self.status.status if self.status.status != TestblockStatus.SUCCEEDED: metric_result.groundtruth.result = Groundtruth.FAILED metric_result.groundtruth.error_message = metrics_helper.extract_error_message( self.status) return metric_result # check if result is available if self.metric_result.groundtruth.result == Groundtruth.UNSET and not self.groundtruth.available: # let the analyzer know that this test failed metric_result.groundtruth.result = Groundtruth.FAILED metric_result.groundtruth.error_message = "testblock %s stopped without user_result" % self.testblock_name return metric_result # at this point we're sure that any user_result is available # overwrite user_result data with mandatory ATF fields metric_result = self.metric_result metric_result.name = self.name metric_result.status = self.status.status # evaluate metric data if self.groundtruth.available: # groundtruth available # overwrite grundtruth with data from yaml file metric_result.groundtruth = self.groundtruth if math.fabs(metric_result.groundtruth.data - metric_result.data.data ) <= metric_result.groundtruth.epsilon: metric_result.groundtruth.result = Groundtruth.SUCCEEDED metric_result.groundtruth.error_message = "all OK" else: metric_result.groundtruth.result = Groundtruth.FAILED metric_result.groundtruth.error_message = "groundtruth missmatch: %f not within %f+-%f" % ( metric_result.data.data, metric_result.groundtruth.data, metric_result.groundtruth.epsilon) else: # groundtruth not available # we'll keep what is set in self.metric_result: user_result set by user pass return metric_result