From 3ef2c464ac477e398efaafe501d43e232534d1d0 Mon Sep 17 00:00:00 2001 From: wittypluck Date: Sun, 7 Apr 2024 00:13:02 +0200 Subject: [PATCH] Add Glances DiskIO read/write sensors (#114933) --- homeassistant/components/glances/icons.json | 6 + homeassistant/components/glances/sensor.py | 21 +- homeassistant/components/glances/strings.json | 6 + tests/components/glances/__init__.py | 4 + .../glances/snapshots/test_sensor.ambr | 216 ++++++++++++++++++ 5 files changed, 252 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/glances/icons.json b/homeassistant/components/glances/icons.json index 06f8cd98a07..92ef28ad325 100644 --- a/homeassistant/components/glances/icons.json +++ b/homeassistant/components/glances/icons.json @@ -10,6 +10,12 @@ "disk_free": { "default": "mdi:harddisk" }, + "diskio_read": { + "default": "mdi:harddisk" + }, + "diskio_write": { + "default": "mdi:harddisk" + }, "memory_usage": { "default": "mdi:memory" }, diff --git a/homeassistant/components/glances/sensor.py b/homeassistant/components/glances/sensor.py index 5c22154aeef..fc83d297645 100644 --- a/homeassistant/components/glances/sensor.py +++ b/homeassistant/components/glances/sensor.py @@ -14,6 +14,7 @@ from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( PERCENTAGE, REVOLUTIONS_PER_MINUTE, + UnitOfDataRate, UnitOfInformation, UnitOfTemperature, ) @@ -57,6 +58,24 @@ SENSOR_TYPES = { device_class=SensorDeviceClass.DATA_SIZE, state_class=SensorStateClass.MEASUREMENT, ), + ("diskio", "read"): GlancesSensorEntityDescription( + key="read", + type="diskio", + translation_key="diskio_read", + native_unit_of_measurement=UnitOfDataRate.BYTES_PER_SECOND, + suggested_unit_of_measurement=UnitOfDataRate.MEGABYTES_PER_SECOND, + device_class=SensorDeviceClass.DATA_RATE, + state_class=SensorStateClass.MEASUREMENT, + ), + ("diskio", "write"): GlancesSensorEntityDescription( + key="write", + type="diskio", + translation_key="diskio_write", + native_unit_of_measurement=UnitOfDataRate.BYTES_PER_SECOND, + suggested_unit_of_measurement=UnitOfDataRate.MEGABYTES_PER_SECOND, + device_class=SensorDeviceClass.DATA_RATE, + state_class=SensorStateClass.MEASUREMENT, + ), ("mem", "memory_use_percent"): GlancesSensorEntityDescription( key="memory_use_percent", type="mem", @@ -230,7 +249,7 @@ async def async_setup_entry( entities: list[GlancesSensor] = [] for sensor_type, sensors in coordinator.data.items(): - if sensor_type in ["fs", "sensors", "raid"]: + if sensor_type in ["fs", "diskio", "sensors", "raid"]: entities.extend( GlancesSensor( coordinator, diff --git a/homeassistant/components/glances/strings.json b/homeassistant/components/glances/strings.json index 10a4cb7ed00..e2ef185727c 100644 --- a/homeassistant/components/glances/strings.json +++ b/homeassistant/components/glances/strings.json @@ -41,6 +41,12 @@ "disk_free": { "name": "{sensor_label} disk free" }, + "diskio_read": { + "name": "{sensor_label} disk read" + }, + "diskio_write": { + "name": "{sensor_label} disk write" + }, "memory_usage": { "name": "Memory usage" }, diff --git a/tests/components/glances/__init__.py b/tests/components/glances/__init__.py index fd0df3be3a9..c7f2657fb37 100644 --- a/tests/components/glances/__init__.py +++ b/tests/components/glances/__init__.py @@ -181,6 +181,10 @@ HA_SENSOR_DATA: dict[str, Any] = { "/ssl": {"disk_use": 30.7, "disk_use_percent": 6.7, "disk_free": 426.5}, "/media": {"disk_use": 30.7, "disk_use_percent": 6.7, "disk_free": 426.5}, }, + "diskio": { + "nvme0n1": {"read": 184320, "write": 23863296}, + "sda": {"read": 3859, "write": 25954}, + }, "sensors": { "cpu_thermal 1": {"temperature_core": 59}, "err_temp": {"temperature_hdd": "unavailable"}, diff --git a/tests/components/glances/snapshots/test_sensor.ambr b/tests/components/glances/snapshots/test_sensor.ambr index cf74e91f613..d6cccdab4ee 100644 --- a/tests/components/glances/snapshots/test_sensor.ambr +++ b/tests/components/glances/snapshots/test_sensor.ambr @@ -802,6 +802,222 @@ 'state': 'unavailable', }) # --- +# name: test_sensor_states[sensor.0_0_0_0_nvme0n1_disk_read-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.0_0_0_0_nvme0n1_disk_read', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor.private': dict({ + 'suggested_unit_of_measurement': , + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'nvme0n1 disk read', + 'platform': 'glances', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'diskio_read', + 'unique_id': 'test-nvme0n1-read', + 'unit_of_measurement': , + }) +# --- +# name: test_sensor_states[sensor.0_0_0_0_nvme0n1_disk_read-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'data_rate', + 'friendly_name': '0.0.0.0 nvme0n1 disk read', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.0_0_0_0_nvme0n1_disk_read', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.184320', + }) +# --- +# name: test_sensor_states[sensor.0_0_0_0_nvme0n1_disk_write-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.0_0_0_0_nvme0n1_disk_write', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor.private': dict({ + 'suggested_unit_of_measurement': , + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'nvme0n1 disk write', + 'platform': 'glances', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'diskio_write', + 'unique_id': 'test-nvme0n1-write', + 'unit_of_measurement': , + }) +# --- +# name: test_sensor_states[sensor.0_0_0_0_nvme0n1_disk_write-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'data_rate', + 'friendly_name': '0.0.0.0 nvme0n1 disk write', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.0_0_0_0_nvme0n1_disk_write', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '23.863296', + }) +# --- +# name: test_sensor_states[sensor.0_0_0_0_sda_disk_read-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.0_0_0_0_sda_disk_read', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor.private': dict({ + 'suggested_unit_of_measurement': , + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'sda disk read', + 'platform': 'glances', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'diskio_read', + 'unique_id': 'test-sda-read', + 'unit_of_measurement': , + }) +# --- +# name: test_sensor_states[sensor.0_0_0_0_sda_disk_read-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'data_rate', + 'friendly_name': '0.0.0.0 sda disk read', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.0_0_0_0_sda_disk_read', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.003859', + }) +# --- +# name: test_sensor_states[sensor.0_0_0_0_sda_disk_write-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.0_0_0_0_sda_disk_write', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor.private': dict({ + 'suggested_unit_of_measurement': , + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'sda disk write', + 'platform': 'glances', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'diskio_write', + 'unique_id': 'test-sda-write', + 'unit_of_measurement': , + }) +# --- +# name: test_sensor_states[sensor.0_0_0_0_sda_disk_write-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'data_rate', + 'friendly_name': '0.0.0.0 sda disk write', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.0_0_0_0_sda_disk_write', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.025954', + }) +# --- # name: test_sensor_states[sensor.0_0_0_0_ssl_disk_free-entry] EntityRegistryEntrySnapshot({ 'aliases': set({