コード例 #1
0
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
コード例 #2
0
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