mirror of
https://github.com/home-assistant/core.git
synced 2025-07-29 18:28:14 +02:00
Add tests for System Monitor (#107891)
* Add tests * no coordinator * Coverage * processes * test init * util * test icon * Add tests * Mod tests * Add tests * Test attributes * snapshots * icon * test disk mounts * fixes * svmem * cache_clear * test icon * reset icon test * test_processor_temperature * fix tests on macos --------- Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
@ -4,12 +4,12 @@ from __future__ import annotations
|
||||
import asyncio
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timedelta
|
||||
from functools import cache
|
||||
from functools import cache, lru_cache
|
||||
import logging
|
||||
import os
|
||||
import socket
|
||||
import sys
|
||||
from typing import Any
|
||||
from typing import Any, Literal
|
||||
|
||||
import psutil
|
||||
import voluptuous as vol
|
||||
@ -56,10 +56,6 @@ _LOGGER = logging.getLogger(__name__)
|
||||
|
||||
CONF_ARG = "arg"
|
||||
|
||||
if sys.maxsize > 2**32:
|
||||
CPU_ICON = "mdi:cpu-64-bit"
|
||||
else:
|
||||
CPU_ICON = "mdi:cpu-32-bit"
|
||||
|
||||
SENSOR_TYPE_NAME = 0
|
||||
SENSOR_TYPE_UOM = 1
|
||||
@ -70,6 +66,14 @@ SENSOR_TYPE_MANDATORY_ARG = 4
|
||||
SIGNAL_SYSTEMMONITOR_UPDATE = "systemmonitor_update"
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_cpu_icon() -> Literal["mdi:cpu-64-bit", "mdi:cpu-32-bit"]:
|
||||
"""Return cpu icon."""
|
||||
if sys.maxsize > 2**32:
|
||||
return "mdi:cpu-64-bit"
|
||||
return "mdi:cpu-32-bit"
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class SysMonitorSensorEntityDescription(SensorEntityDescription):
|
||||
"""Description for System Monitor sensor entities."""
|
||||
@ -121,19 +125,19 @@ SENSOR_TYPES: dict[str, SysMonitorSensorEntityDescription] = {
|
||||
"load_15m": SysMonitorSensorEntityDescription(
|
||||
key="load_15m",
|
||||
name="Load (15m)",
|
||||
icon=CPU_ICON,
|
||||
icon=get_cpu_icon(),
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
"load_1m": SysMonitorSensorEntityDescription(
|
||||
key="load_1m",
|
||||
name="Load (1m)",
|
||||
icon=CPU_ICON,
|
||||
icon=get_cpu_icon(),
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
"load_5m": SysMonitorSensorEntityDescription(
|
||||
key="load_5m",
|
||||
name="Load (5m)",
|
||||
icon=CPU_ICON,
|
||||
icon=get_cpu_icon(),
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
"memory_free": SysMonitorSensorEntityDescription(
|
||||
@ -210,14 +214,14 @@ SENSOR_TYPES: dict[str, SysMonitorSensorEntityDescription] = {
|
||||
"process": SysMonitorSensorEntityDescription(
|
||||
key="process",
|
||||
name="Process",
|
||||
icon=CPU_ICON,
|
||||
icon=get_cpu_icon(),
|
||||
mandatory_arg=True,
|
||||
),
|
||||
"processor_use": SysMonitorSensorEntityDescription(
|
||||
key="processor_use",
|
||||
name="Processor use",
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
icon=CPU_ICON,
|
||||
icon=get_cpu_icon(),
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
"processor_temperature": SysMonitorSensorEntityDescription(
|
||||
@ -751,7 +755,11 @@ def _getloadavg() -> tuple[float, float, float]:
|
||||
|
||||
def _read_cpu_temperature() -> float | None:
|
||||
"""Attempt to read CPU / processor temperature."""
|
||||
temps = psutil.sensors_temperatures()
|
||||
try:
|
||||
temps = psutil.sensors_temperatures()
|
||||
except AttributeError:
|
||||
# Linux, macOS
|
||||
return None
|
||||
|
||||
for name, entries in temps.items():
|
||||
for i, entry in enumerate(entries, start=1):
|
||||
|
Reference in New Issue
Block a user