def _aggregate_results(subresults: CheckGenerator) -> ServiceCheckResult: perfdata: List[Metric] = [] summaries: List[str] = [] details: List[str] = [] status = checking_classes.state(0) for subr in list(subresults): # consume *everything* here, before we may raise! if isinstance(subr, checking_classes.IgnoreResults): raise checking_classes.IgnoreResultsError(str(subr)) if isinstance(subr, checking_classes.Metric): perfdata.append((subr.name, subr.value) + subr.levels + subr.boundaries) continue assert isinstance(subr, checking_classes.Result) status = checking_classes.state.worst(status, subr.state) state_marker = check_api_utils.state_markers[int(subr.state)] if subr.summary: summaries.append(subr.summary + state_marker) details.append(subr.details + state_marker) # Empty list? Check returned nothing if not details: return ITEM_NOT_FOUND if not summaries: count = len(details) summaries.append("Everything looks OK - %d detail%s available" % (count, "" if count == 1 else "s")) all_text = [", ".join(summaries)] + details return int(status), "\n".join(all_text).strip(), perfdata
def _consume_and_dispatch_result_types( subresults: checking_classes.CheckResult, ) -> Tuple[List[MetricTuple], List[checking_classes.Result]]: """Consume *all* check results, and *then* raise, if we encountered an IgnoreResults instance. """ ignore_results: List[checking_classes.IgnoreResults] = [] results: List[checking_classes.Result] = [] perfdata: List[MetricTuple] = [] for subr in subresults: if isinstance(subr, checking_classes.IgnoreResults): ignore_results.append(subr) elif isinstance(subr, checking_classes.Metric): perfdata.append((subr.name, subr.value) + subr.levels + subr.boundaries) else: results.append(subr) if ignore_results: raise checking_classes.IgnoreResultsError(str(ignore_results[-1])) return perfdata, results