Beispiel #1
0
def test_check_temperature_device_levels_ok():

    results = list(
        temperature.check_temperature(
            10.0,
            None,
            unique_name=None,
            value_store=None,
            dev_unit=None,
            dev_levels=(54.0, 70.0),
            dev_levels_lower=None,
            dev_status=None,
            dev_status_name=None,
        ))

    assert isinstance(results[0], Metric)
    assert results[0].name == 'temp'
    assert results[0].value == 10.0
    assert results[0].levels == (54.0, 70.0)
    assert results[0].boundaries == (None, None)

    assert isinstance(results[1], Result)
    assert results[1].state == state.OK
    assert results[1].summary == 'Temperature: 10.0°C'

    assert isinstance(results[2], Result)
    assert results[2].state == state.OK
    assert results[2].summary == ''
    assert results[
        2].details == 'Configuration: prefer user levels over device levels (used device levels)'
Beispiel #2
0
def test_check_temperature_output_unit():

    results = list(
        temperature.check_temperature(
            10.0,
            {
                'output_unit': 'f',
            },
            unique_name=None,
            value_store=None,
            dev_unit=None,
            dev_levels=None,
            dev_levels_lower=None,
            dev_status=None,
            dev_status_name=None,
        ))

    assert isinstance(results[0], Metric)
    assert results[0].name == 'temp'
    assert results[0].value == 10.0
    assert results[0].levels == (None, None)
    assert results[0].boundaries == (None, None)

    assert isinstance(results[1], Result)
    assert results[1].state == state.OK
    assert results[1].summary == 'Temperature: 50.0°F'

    assert isinstance(results[2], Result)
    assert results[2].state == state.OK
    assert results[2].summary == ''
    assert results[
        2].details == 'Configuration: prefer user levels over device levels (no levels found)'
Beispiel #3
0
def test_check_temperature_device_levels_warn_lower():

    results = list(
        temperature.check_temperature(
            0.0,
            None,
            unique_name=None,
            value_store=None,
            dev_unit=None,
            dev_levels=(10.0, 15.0),
            dev_levels_lower=(1.0, -15.0),
            dev_status=None,
            dev_status_name=None,
        ))

    assert isinstance(results[0], Metric)
    assert results[0].name == 'temp'
    assert results[0].value == 0.0
    assert results[0].levels == (10.0, 15.0)
    assert results[0].boundaries == (None, None)

    assert isinstance(results[1], Result)
    assert results[1].state == state.WARN
    assert results[1].summary == 'Temperature: 0.0°C (warn/crit below 1.0°C/-15.0°C)'

    assert isinstance(results[2], Result)
    assert results[2].state == state.OK
    assert results[2].summary == ''
    assert results[
        2].details == 'Configuration: prefer user levels over device levels (used device levels)'
Beispiel #4
0
def test_check_temperature_use_user_levels():

    results = list(
        temperature.check_temperature(
            -20.0,
            {
                'levels': (50.0, 75.0),
                'levels_lower': (-25.0, -30.0),
                'device_levels_handling': 'usr',
            },
            unique_name=None,
            value_store=None,
            dev_unit=None,
            dev_levels=(10.0, 15.0),
            dev_levels_lower=(1.0, -15.0),
            dev_status=None,
            dev_status_name=None,
        ))

    assert isinstance(results[0], Metric)
    assert results[0].name == 'temp'
    assert results[0].value == -20.0
    assert results[0].levels == (50.0, 75.0)
    assert results[0].boundaries == (None, None)

    assert isinstance(results[1], Result)
    assert results[1].state == state.OK
    assert results[1].summary == 'Temperature: -20.0°C'

    assert isinstance(results[2], Result)
    assert results[2].state == state.OK
    assert results[2].summary == ''
    assert results[2].details == 'Configuration: only use user levels'
Beispiel #5
0
def test_check_temperature_default_device_levels():

    results = list(
        temperature.check_temperature(
            -20.0,
            {
                'levels': (50.0, 75.0),
                'levels_lower': (-25.0, -30.0),
                'device_levels_handling': 'devdefault',
            },
            unique_name=None,
            value_store=None,
            dev_unit=None,
            dev_levels=(10.0, 15.0),
            dev_levels_lower=(1.0, -15.0),
            dev_status=None,
            dev_status_name=None,
        ))

    assert isinstance(results[0], Metric)
    assert results[0].name == 'temp'
    assert results[0].value == -20.0
    assert results[0].levels == (10.0, 15.0)
    assert results[0].boundaries == (None, None)

    assert isinstance(results[1], Result)
    assert results[1].state == state.CRIT
    assert results[1].summary == 'Temperature: -20.0°C (warn/crit below 1.0°C/-15.0°C)'

    assert isinstance(results[2], Result)
    assert results[2].state == state.OK
    assert results[2].summary == ''
    assert results[
        2].details == 'Configuration: prefer device levels over user levels (used device levels)'
Beispiel #6
0
def test_check_temperature_user_levels_crit_lower():

    results = list(
        temperature.check_temperature(
            -16.0,
            {
                'levels_lower': (0.0, -15.0),
            },
            unique_name=None,
            value_store=None,
            dev_unit=None,
            dev_levels=None,
            dev_levels_lower=None,
            dev_status=None,
            dev_status_name=None,
        ))

    assert isinstance(results[0], Metric)
    assert results[0].name == 'temp'
    assert results[0].value == -16.0
    assert results[0].levels == (None, None)
    assert results[0].boundaries == (None, None)

    assert isinstance(results[1], Result)
    assert results[1].state == state.CRIT
    assert results[1].summary == 'Temperature: -16.0°C (warn/crit below 0.0°C/-15.0°C)'

    assert isinstance(results[2], Result)
    assert results[2].state == state.OK
    assert results[2].summary == ''
    assert results[
        2].details == 'Configuration: prefer user levels over device levels (used user levels)'
Beispiel #7
0
def test_check_temperature_use_device_default_no_levels():

    results = list(
        temperature.check_temperature(
            -20.0,
            {
                'device_levels_handling': 'devdefault',
            },
            unique_name=None,
            value_store=None,
            dev_unit=None,
            dev_levels=None,
            dev_levels_lower=None,
            dev_status=None,
            dev_status_name=None,
        ))

    assert isinstance(results[0], Metric)
    assert results[0].name == 'temp'
    assert results[0].value == -20.0
    assert results[0].levels == (None, None)
    assert results[0].boundaries == (None, None)

    assert isinstance(results[1], Result)
    assert results[1].state == state.OK
    assert results[1].summary == 'Temperature: -20.0°C'

    assert isinstance(results[2], Result)
    assert results[2].state == state.OK
    assert results[2].summary == ''
    assert results[
        2].details == 'Configuration: prefer device levels over user levels (no levels found)'
Beispiel #8
0
def test_check_temperature_ignores_trend_computation():
    trend_params: temperature.TempParamDict = {"trend_compute": {"period": 30}}
    value_store = mock_value_store()

    # NOTE: We have to suppress the user AND device counter initializations. Although both
    # trends might be off during initialization we ignore this issue for now since the
    # temperatures between two check intervals should not deviate much and the trends should
    # be correct in the long run.
    with contextlib.suppress(GetRateError), freezegun.freeze_time(
            "1970-01-01 00:00:00"):
        list(
            temperature.check_temperature(
                0.0,
                trend_params,
                unique_name=UNIQUE_NAME,
                value_store=value_store,
            ))
    with contextlib.suppress(GetRateError), freezegun.freeze_time(
            "1970-01-01 00:15:00"):
        list(
            temperature.check_temperature(
                10.0,
                trend_params,
                unique_name=UNIQUE_NAME,
                value_store=value_store,
            ))
    with freezegun.freeze_time("1970-01-01 00:30:00"):
        results = list(
            temperature.check_temperature(
                20.0,
                trend_params,
                unique_name=UNIQUE_NAME,
                value_store=value_store,
            ))

    assert results == [
        Metric("temp", 20.0),
        Result(state=state.OK, summary="Temperature: 20.0°C"),
        Result(state=state.OK,
               summary="Temperature trend: +20.0°C per 30 min"),
        Result(
            state=state.OK,
            notice=
            "Configuration: prefer user levels over device levels (no levels found)",
        ),
    ]
Beispiel #9
0
def test_check_temperature_simple():
    results = list(
        temperature.check_temperature(
            23.0,
            None,
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
        ))
    assert results == [
        Metric(name="temp", value=23.0),
        Result(state=state.OK, summary="Temperature: 23.0°C"),
        Result(
            state=state.OK,
            notice=
            "Configuration: prefer user levels over device levels (no levels found)",
        ),
    ]
Beispiel #10
0
def test_check_temperature_device_levels_ok():
    results = list(
        temperature.check_temperature(
            10.0,
            None,
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
            dev_levels=(54.0, 70.0),
        ))
    assert results == [
        Metric("temp", 10.0, levels=(54.0, 70.0)),
        Result(state=state.OK, summary="Temperature: 10.0°C"),
        Result(
            state=state.OK,
            notice=
            "Configuration: prefer user levels over device levels (used device levels)",
        ),
    ]
Beispiel #11
0
def test_check_temperature_input_unit():
    results = list(
        temperature.check_temperature(
            50.0,
            {
                "input_unit": "f",
            },
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
        ))
    assert results == [
        Metric("temp", 10.0),
        Result(state=state.OK, summary="Temperature: 10.0°C"),
        Result(
            state=state.OK,
            notice=
            "Configuration: prefer user levels over device levels (no levels found)",
        ),
    ]
Beispiel #12
0
def test_check_temperature_use_user_levels():
    results = list(
        temperature.check_temperature(
            -20.0,
            {
                "levels": (50.0, 75.0),
                "levels_lower": (-25.0, -30.0),
                "device_levels_handling": "usr",
            },
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
            dev_levels=(10.0, 15.0),
            dev_levels_lower=(1.0, -15.0),
        ))
    assert results == [
        Metric("temp", -20.0, levels=(50.0, 75.0)),
        Result(state=state.OK, summary="Temperature: -20.0°C"),
        Result(state=state.OK, notice="Configuration: only use user levels"),
    ]
Beispiel #13
0
def test_check_temperature_device_levels_crit_upper():
    results = list(
        temperature.check_temperature(
            18.0,
            None,
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
            dev_levels=(10.0, 15.0),
        ))
    assert results == [
        Metric("temp", 18.0, levels=(10.0, 15.0)),
        Result(state=state.CRIT,
               summary="Temperature: 18.0°C (warn/crit at 10.0°C/15.0°C)"),
        Result(
            state=state.OK,
            notice=
            "Configuration: prefer user levels over device levels (used device levels)",
        ),
    ]
Beispiel #14
0
def test_check_temperature_user_levels_ok():
    results = list(
        temperature.check_temperature(
            23.0,
            {
                "levels": (26.0, 30.0),
            },
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
        ))
    assert results == [
        Metric("temp", 23.0, levels=(26.0, 30.0)),
        Result(state=state.OK, summary="Temperature: 23.0°C"),
        Result(
            state=state.OK,
            notice=
            "Configuration: prefer user levels over device levels (used user levels)",
        ),
    ]
Beispiel #15
0
def test_check_temperature_use_user_default_no_levels():
    results = list(
        temperature.check_temperature(
            -20.0,
            {
                "device_levels_handling": "usrdefault",
            },
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
        ))
    assert results == [
        Metric("temp", -20.0),
        Result(state=state.OK, summary="Temperature: -20.0°C"),
        Result(
            state=state.OK,
            notice=
            "Configuration: prefer user levels over device levels (no levels found)",
        ),
    ]
Beispiel #16
0
def test_check_temperature_user_levels_crit_upper():
    results = list(
        temperature.check_temperature(
            30.0,
            {
                "levels": (23.0, 30.0),
            },
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
        ))
    results == [
        Metric("temp", 30.0, levels=(23.0, 30.0)),
        Result(state=state.CRIT,
               summary="Temperature: 30.0°C (warn/crit at 23.0°C/30.0°C)"),
        Result(
            state=state.OK,
            notice=
            "Configuration: prefer user levels over device levels (used user levels)",
        ),
    ]
Beispiel #17
0
def test_check_temperature_user_levels_crit_lower():
    results = list(
        temperature.check_temperature(
            -16.0,
            {
                "levels_lower": (0.0, -15.0),
            },
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
        ))
    assert results == [
        Metric("temp", -16.0),
        Result(state=state.CRIT,
               summary="Temperature: -16.0°C (warn/crit below 0.0°C/-15.0°C)"),
        Result(
            state=state.OK,
            notice=
            "Configuration: prefer user levels over device levels (used user levels)",
        ),
    ]
Beispiel #18
0
def test_check_temperature_show_worst():
    results = list(
        temperature.check_temperature(
            -20.0,
            {
                "levels": (50.0, 75.0),
                "levels_lower": (-25.0, -30.0),
                "device_levels_handling": "worst",
            },
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
            dev_levels=(10.0, 15.0),
            dev_levels_lower=(1.0, -15.0),
        ))
    assert results == [
        Metric("temp", -20.0, levels=(10.0, 15.0)),
        Result(state=state.CRIT,
               summary="Temperature: -20.0°C (warn/crit below 1.0°C/-15.0°C)"),
        Result(state=state.OK,
               notice="Configuration: show most critical state"),
    ]
Beispiel #19
0
def test_check_temperature_use_user_default_device_levels():
    results = list(
        temperature.check_temperature(
            -20.0,
            {
                "device_levels_handling": "usrdefault",
            },
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
            dev_levels_lower=(1.0, -15.0),
        ))
    assert results == [
        Metric("temp", -20.0),
        Result(state=state.CRIT,
               summary="Temperature: -20.0°C (warn/crit below 1.0°C/-15.0°C)"),
        Result(
            state=state.OK,
            notice=
            "Configuration: prefer user levels over device levels (used device levels)",
        ),
    ]
Beispiel #20
0
def test_check_temperature_device_status_override_ok():

    results = list(
        temperature.check_temperature(
            5.0,
            {
                'levels': (5.0, 10.0),
                'levels_lower': (0.0, -10.0),
                'device_levels_handling': 'best',
            },
            unique_name=None,
            value_store=None,
            dev_unit=None,
            dev_levels=(20.0, 25.0),
            dev_levels_lower=(1.0, -15.0),
            dev_status=0,
            dev_status_name='banana',
        ))

    assert isinstance(results[0], Metric)
    assert results[0].name == 'temp'
    assert results[0].value == 5.0
    assert results[0].levels == (20.0, 25.0)
    assert results[0].boundaries == (None, None)

    assert isinstance(results[1], Result)
    assert results[1].state == state.OK
    assert results[1].summary == 'Temperature: 5.0°C'

    assert isinstance(results[2], Result)
    assert results[2].state == state.OK
    assert results[2].summary == ''
    assert results[2].details == 'State on device: banana'

    assert isinstance(results[3], Result)
    assert results[3].state == state.OK
    assert results[3].summary == ''
    assert results[3].details == 'Configuration: show least critical state'
Beispiel #21
0
def test_check_temperature_device_status_override_ok():
    results = list(
        temperature.check_temperature(
            5.0,
            {
                "levels": (5.0, 10.0),
                "levels_lower": (0.0, -10.0),
                "device_levels_handling": "best",
            },
            unique_name=UNIQUE_NAME,
            value_store=mock_value_store(),
            dev_levels=(20.0, 25.0),
            dev_levels_lower=(1.0, -15.0),
            dev_status=0,
            dev_status_name="banana",
        ))
    assert results == [
        Metric("temp", 5.0, levels=(20.0, 25.0)),
        Result(state=state.OK, summary="Temperature: 5.0°C"),
        Result(state=state.OK, notice="State on device: banana"),
        Result(state=state.OK,
               notice="Configuration: show least critical state"),
    ]
Beispiel #22
0
def check_synology_disks(item: str, params: Mapping[str, Any], section: Section) -> CheckResult:
    disk = section[item]
    yield from temperature.check_temperature(
        reading=disk.temperature,
        params=None,
        unique_name=item,
        value_store=get_value_store(),
    )

    states = {
        1: (State.OK, "OK"),
        2: (State.OK, "OK"),
        3: (State.WARN, "not initialized"),
        4: (State.CRIT, "system partition failed"),
        5: (State.CRIT, "crashed"),
    }
    state, text = states[disk.state]
    if disk.state == 3 and params.get("used_as_cache"):
        text = "used as cache"
        state = State.OK
    yield Result(
        state=state,
        summary=f"Status: {text}, Temperature: {disk.temperature} °C, Model: {disk.model}",
    )
Beispiel #23
0
def test_check_temperature_fails_without_value_store() -> None:
    with pytest.raises(ValueError):
        list(
            temperature.check_temperature(0.2, {'trend_compute': {}},
                                          unique_name='unique_name'))
Beispiel #24
0
    yield from (Service(item=item) for item in section.get('temp', {}))


def check_entity_sensors_temp(
    item: str,
    params: TempParamType,
    section: EntitySensorSection,
) -> CheckResult:
    if not (sensor_reading := section.get('temp', {}).get(item)):
        return

    yield from check_temperature(
        sensor_reading.reading,
        params,
        unique_name="temp",
        value_store=get_value_store(),
        dev_unit=sensor_reading.unit,
        dev_status=int(sensor_reading.state),
        dev_status_name=sensor_reading.status_descr,
    )


register.check_plugin(
    name='entity_sensors_temp',
    sections=['entity_sensors'],
    service_name='Temperature %s',
    discovery_function=discover_entity_sensors_temp,
    check_function=check_entity_sensors_temp,
    check_ruleset_name='temperature',
    check_default_parameters=
    {},  # The check processes ambient and CPU temp sensors,