예제 #1
0
def _create_new_result(
        is_details: bool,
        legacy_state: int,
        legacy_text: str,
        legacy_metrics: Union[Tuple, List] = (),
) -> Generator[Union[Metric, Result], None, bool]:
    result_state = state(legacy_state)

    if legacy_state or legacy_text:  # skip "Null"-Result
        if is_details:
            summary: Optional[str] = None
            details: Optional[str] = legacy_text
        else:
            is_details = "\n" in legacy_text
            summary, details = legacy_text.split("\n", 1) if is_details else (legacy_text, None)
        yield Result(
            state=result_state,
            summary=summary or None,
            details=details or None,
        )

    for metric in legacy_metrics:
        # fill up with None:
        name, value, warn, crit, min_, max_ = (
            v for v, _ in itertools.zip_longest(metric, range(6)))
        yield Metric(name, value, levels=(warn, crit), boundaries=(min_, max_))

    return is_details
예제 #2
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
예제 #3
0
def _aggregate_results(subresults: CheckGenerator) -> ServiceCheckResult:

    perfdata, results = _consume_and_dispatch_result_types(subresults)
    needs_marker = len(results) > 1

    summaries: List[str] = []
    details: List[str] = []
    status = checking_classes.state(0)
    for result in results:
        status = checking_classes.state.worst(status, result.state)
        state_marker = check_api_utils.state_markers[int(
            result.state)] if needs_marker else ""

        if result.summary:
            summaries.append(_add_state_marker(
                result.summary,
                state_marker,
            ))

        details.append(_add_state_marker(
            result.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
예제 #4
0
def test_state():
    assert int(state.OK) == 0
    assert int(state.WARN) == 1
    assert int(state.CRIT) == 2
    assert int(state.UNKNOWN) == 3

    assert state.worst(state.WARN, state.UNKNOWN, state.CRIT) is state.CRIT
    assert state.worst(state.OK, state.WARN, state.UNKNOWN) is state.UNKNOWN
    assert state.worst(state.OK, state.WARN) is state.WARN
    assert state.worst(state.OK) is state.OK
    assert state.worst(state.OK, 3) is state.UNKNOWN

    assert state(0) is state.OK
    assert state(1) is state.WARN
    assert state(2) is state.CRIT
    assert state(3) is state.UNKNOWN

    assert state["OK"] is state.OK
    assert state["WARN"] is state.WARN
    assert state["CRIT"] is state.CRIT
    assert state["UNKNOWN"] is state.UNKNOWN

    with pytest.raises(TypeError):
        _ = state.OK < state.WARN  # type: ignore[operator]