Exemple #1
0
def test_cpu_loads_predictive(mocker):
    # make sure cpu_load check can handle predictive values
    mocker.patch("cmk.base.check_api._prediction.get_levels",
                 return_value=(None, (2.2, 4.2, None, None)))
    # TODO: don't mock this. Use the context managers.
    mocker.patch("cmk.base.plugin_contexts._hostname", value="unittest")
    mocker.patch("cmk.base.plugin_contexts._service_description",
                 value="unittest-sd")
    params = {
        'levels': {
            'period': 'minute',
            'horizon': 1,
            'levels_upper': ('absolute', (2.0, 4.0))
        }
    }
    section = Section(load=Load(0.5, 1.0, 1.5), num_cpus=4, num_threads=123)
    result = set(check_cpu_load(params, section))

    assert result == set((
        Result(state=State.OK,
               summary='15 min load: 1.50 (no reference for prediction yet)'),
        Result(state=State.OK, summary='15 min load per core: 0.38 (4 cores)'),
        Metric('load1', 0.5, boundaries=(0, 4.0)),
        Metric('load5', 1.0, boundaries=(0, 4.0)),
        Metric('load15', 1.5,
               levels=(2.2, 4.2)),  # those are the predicted values
    ))
Exemple #2
0
def test_cpu_loads_predictive(mocker: Mock) -> None:
    # make sure cpu_load check can handle predictive values
    mocker.patch(
        "cmk.base.check_api._prediction.get_levels",
        return_value=(None, (2.2, 4.2, None, None)),
    )
    with current_host("unittest"), current_service(
            CheckPluginName("cpu_loads"), "item"):
        assert list(
            check_cpu_load(
                {
                    "levels": {
                        "period": "minute",
                        "horizon": 1,
                        "levels_upper": ("absolute", (2.0, 4.0)),
                    }
                },
                Section(
                    load=Load(0.5, 1.0, 1.5),
                    num_cpus=4,
                    threads=Threads(count=123),
                ),
            )
        ) == [
            Result(
                state=State.OK,
                summary="15 min load: 1.50 (no reference for prediction yet)"),
            Metric("load15", 1.5,
                   levels=(2.2, 4.2)),  # those are the predicted values
            Result(state=State.OK,
                   summary="15 min load per core: 0.38 (4 cores)"),
            Metric("load1", 0.5, boundaries=(0, 4.0)),
            Metric("load5", 1.0, boundaries=(0, 4.0)),
        ]
Exemple #3
0
def test_cpu_threads():
    section = Section(load=Load(0.1, 0.1, 0.1), num_cpus=4, num_threads=1234)
    params: Dict[str, Any] = {}
    result = set(check_cpu_threads(params, section))
    assert result == {
        Metric("threads", 1234.0),
        Result(state=State.OK, summary="1234"),
    }
Exemple #4
0
def test_cpu_loads_fixed_levels(mocker):
    section = Section(load=Load(0.5, 1.0, 1.5), num_cpus=4, num_threads=123)
    params = {'levels': (2.0, 4.0)}
    result = set(check_cpu_load(params, section))
    assert result == set((
        Result(state=State.OK, summary='15 min load: 1.50'),
        Result(state=State.OK, summary='15 min load per core: 0.38 (4 cores)'),
        Metric('load1', 0.5, boundaries=(0, 4.0)),
        Metric('load5', 1.0, boundaries=(0, 4.0)),
        Metric('load15', 1.5, levels=(8.0, 16.0)),  # levels multiplied by num_cpus
    ))
Exemple #5
0
def test_cpu_threads_max_threads():
    section = Section(load=Load(0.1, 0.1, 0.1),
                      num_cpus=4,
                      num_threads=1234,
                      max_threads=2468)
    params: Dict[str, Any] = {}
    result = set(check_cpu_threads(params, section))
    assert result == {
        Metric('thread_usage', 50.0),
        Metric('threads', 1234.0),
        Result(state=State.OK, summary='1234'),
        Result(state=State.OK, summary='Usage: 50.00%')
    }
Exemple #6
0
def test_parse_statgrab_load() -> None:
    assert parse_statgrab_load([
        ["min1", "2.500000"],
        ["min15", "5.898438"],
        ["min5", "4.191406"],
    ]) == Section(
        load=Load(
            load1=2.500000,
            load5=4.191406,
            load15=5.898438,
        ),
        num_cpus=1,
    )
Exemple #7
0
def test_cpu_threads_max_threads():
    section = Section(
        load=Load(0.1, 0.1, 0.1),
        num_cpus=4,
        threads=Threads(count=1234, max=2468),
    )
    params: Dict[str, Any] = {}
    result = set(check_cpu_threads(params, section))
    assert result == {
        Metric("thread_usage", 50.0),
        Metric("threads", 1234.0),
        Result(state=State.OK, summary="1234"),
        Result(state=State.OK, summary="Usage: 50.00%"),
    }
Exemple #8
0
def test_cpu_loads_fixed_levels() -> None:
    assert list(
        check_cpu_load(
            {"levels": (2.0, 4.0)},
            Section(
                load=Load(0.5, 1.0, 1.5),
                num_cpus=4,
                num_threads=123,
                type=ProcessorType.physical,
            ),
        )) == [
            Result(state=State.OK, summary="15 min load: 1.50"),
            Metric("load15", 1.5,
                   levels=(8.0, 16.0)),  # levels multiplied by num_cpus
            Result(state=State.OK,
                   summary="15 min load per core: 0.38 (4 physical cores)"),
            Metric("load1", 0.5, boundaries=(0, 4.0)),
            Metric("load5", 1.0, boundaries=(0, 4.0)),
        ]
Exemple #9
0
             "average:",
             "0.08,",
             "0.07,",
             "0.06",
         ],
         [
             "32",
             "logical",
             "processors",
             "(4",
             "per",
             "socket)",
         ],
     ],
     Section(
         load=Load(load1=0.08, load5=0.07, load15=0.06),
         num_cpus=32,
     ),
     id="with number of cpus",
 ),
 pytest.param(
     [[
         "10:44am",
         "up",
         "239",
         "days,",
         "19:28,",
         "6",
         "users,",
         "load",
         "average:",
         "0.05,",
# conditions defined in the file COPYING, which is part of this source code package.

import pytest

from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import StringTable
from cmk.base.plugins.agent_based.ucd_cpu_load import parse_ucd_cpu_load
from cmk.base.plugins.agent_based.utils.cpu import Load, Section


@pytest.mark.parametrize(
    ["string_table", "expected_section"],
    [
        pytest.param(
            [["312", "3.123213"], ["280", "2.78897"], ["145", "1.34563546"]],
            Section(
                load=Load(load1=3.123213, load5=2.78897, load15=1.34563546),
                num_cpus=1,
            ),
            id="complete dataset",
        ),
        pytest.param(
            [["", "5,234"], ["234", ""], ["", ""]],
            Section(
                load=Load(load1=5.234, load5=2.34, load15=0),
                num_cpus=1,
            ),
            id="data missing",
        ),
    ],
)
def test_parse_ucd_cpu_load(string_table: StringTable,
                            expected_section: Section) -> None: