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)'
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)'
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)'
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'
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)'
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)'
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)'
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)", ), ]
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)", ), ]
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)", ), ]
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)", ), ]
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"), ]
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)", ), ]
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)", ), ]
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)", ), ]
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)", ), ]
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)", ), ]
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"), ]
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)", ), ]
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'
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"), ]
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}", )
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'))
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,