Exemple #1
0
    def discovery_migration_wrapper(section):
        disco_func = check_info_dict.get("inventory_function")
        if not callable(disco_func):  # never discover:
            return

        original_discovery_result = disco_func(section)
        if not original_discovery_result:
            return

        for element in original_discovery_result:
            if isinstance(element, (HostLabel, DiscoveredHostLabels)):
                # these are dealt with in the host_label_function!
                continue

            if isinstance(element, LegacyService):
                yield Service(
                    item=element.item,
                    parameters=wrap_parameters(element.parameters or {}),
                    labels=list(element.service_labels),
                )
            elif isinstance(element, tuple) and len(element) in (2, 3):
                parameters = _resolve_string_parameters(element[-1], check_name, get_check_context)
                service = Service(
                    item=element[0] or None,
                    parameters=wrap_parameters(parameters or {}),
                )
                # nasty hack for nasty plugins:
                # Bypass validation. Item should be None or non-empty string!
                service._item = element[0]  # pylint: disable=protected-access
                yield service
            else:
                # just let it through. Base must deal with bogus return types anyway.
                yield element
    def discovery_migration_wrapper(section):
        disco_func = check_info_dict.get("inventory_function")
        if not callable(disco_func):  # never discover:
            return

        original_discovery_result = disco_func(section)
        if not original_discovery_result:
            return

        for element in original_discovery_result:
            if isinstance(element, tuple) and len(element) in (2, 3):
                parameters = _resolve_string_parameters(
                    element[-1], check_name, get_check_context)
                service = Service(
                    item=element[0] or None,
                    parameters=wrap_parameters(parameters or {}),
                )
                # nasty hack for nasty plugins:
                # Bypass validation. Item should be None or non-empty string!
                service = service._replace(item=element[0])
                yield service
            else:
                try:
                    yield Service(
                        item=element.item,
                        parameters=wrap_parameters(element.parameters or {}),
                        labels=[
                            ServiceLabel(l.name, l.value)
                            for l in element.service_labels
                        ],
                    )
                except AttributeError:
                    # just let it through. Base must deal with bogus return types anyway.
                    yield element
Exemple #3
0
def test_service_features():
    service = Service(
        item="thingy",
        parameters={"size": 42},
        labels=[ServiceLabel("test-thing", "true")],
    )

    assert service.item == "thingy"
    assert service.parameters == {"size": 42}
    assert service.labels == [ServiceLabel("test-thing", "true")]

    assert repr(service) == ("Service(item='thingy', parameters={'size': 42},"
                             " labels=[ServiceLabel('test-thing', 'true')])")

    service = Service()
    assert service.item is None
    assert service.parameters == {}
    assert service.labels == []
    assert repr(service) == "Service(item=None, parameters={}, labels=[])"
Exemple #4
0
def test_discovery():
    section = {
        "mysql": {
            "red": 12,
            "information_schema": 12,
            "performance_schema": 12,
            "mysql": 12,
        }
    }
    assert list(mysql_capacity.discover_capacity(section)) == [
        Service(item="mysql:red")
    ]
Exemple #5
0
    def discovery_migration_wrapper(section):
        disco_func = check_info_dict.get("inventory_function")
        if not callable(disco_func):  # never discover:
            return

        original_discovery_result = disco_func(section)
        if not original_discovery_result:
            return

        for element in original_discovery_result:
            if isinstance(element, tuple) and len(element) in (2, 3):
                item, raw_params = element[0], element[-1]
                if item is not None and not isinstance(item, str):
                    raise ValueError("item must be None or of type `str`")

                parameters = _resolve_string_parameters(
                    raw_params, check_name, get_check_context)
                service = Service(
                    item=None,  # will be replaced
                    parameters=wrap_parameters(parameters or {}),
                )
                # nasty hack for nasty plugins: item = ''
                # Bypass validation. Item should be None or non-empty string!
                service = service._replace(item=item)
                yield service
                continue

            with suppress(AttributeError):
                yield Service(
                    item=element.item,
                    parameters=wrap_parameters(element.parameters or {}),
                    labels=[
                        ServiceLabel(l.name, l.value)
                        for l in element.service_labels
                    ],
                )
                continue

            # just let it through. Base must deal with bogus return types anyway.
            yield element
def test_service_kwargs_only():
    with pytest.raises(TypeError):
        _ = Service(None)  # type: ignore[misc] # pylint: disable=too-many-function-args
def test_service_invalid(item, parameters, labels):
    with pytest.raises(TypeError):
        _ = Service(item=item, parameters=parameters, labels=labels)
Exemple #8
0
def test_cpu_threads_regression(info, check_result):
    section = parse_cpu(info)
    assert section is not None
    params = {"levels": ("levels", (2000, 4000))}
    assert list(discover_cpu_threads(section)) == [Service()]
    assert set(check_cpu_threads(params, section)) == check_result
        current_state="exited",
        description="LSB: OMD sites",
        enabled_status="generated",
    ),
}


@pytest.mark.parametrize(
    "section, discovery_params, discovered_services",
    [
        (
            SECTION,
            [
                {"names": ["~virtualbox.*"]},
            ],
            [Service(item="virtualbox")],
        ),
        (
            SECTION,
            [],
            [],
        ),
        (
            {},
            [
                {"names": ["~virtualbox.*"]},
            ],
            [],
        ),
        (
            SECTION,