Add Glances DiskIO read/write sensors (#114933)

This commit is contained in:
wittypluck 2024-04-07 00:13:02 +02:00 committed by GitHub
parent cce8e4839a
commit 3ef2c464ac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 252 additions and 1 deletions

View File

@ -10,6 +10,12 @@
"disk_free": {
"default": "mdi:harddisk"
},
"diskio_read": {
"default": "mdi:harddisk"
},
"diskio_write": {
"default": "mdi:harddisk"
},
"memory_usage": {
"default": "mdi:memory"
},

View File

@ -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,

View File

@ -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"
},

View File

@ -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"},

View File

@ -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': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'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': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_RATE: 'data_rate'>,
'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': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
})
# ---
# 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': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
}),
'context': <ANY>,
'entity_id': 'sensor.0_0_0_0_nvme0n1_disk_read',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'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': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_RATE: 'data_rate'>,
'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': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
})
# ---
# 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': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
}),
'context': <ANY>,
'entity_id': 'sensor.0_0_0_0_nvme0n1_disk_write',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'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': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_RATE: 'data_rate'>,
'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': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
})
# ---
# 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': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
}),
'context': <ANY>,
'entity_id': 'sensor.0_0_0_0_sda_disk_read',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'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': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'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': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_RATE: 'data_rate'>,
'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': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
})
# ---
# 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': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
}),
'context': <ANY>,
'entity_id': 'sensor.0_0_0_0_sda_disk_write',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.025954',
})
# ---
# name: test_sensor_states[sensor.0_0_0_0_ssl_disk_free-entry]
EntityRegistryEntrySnapshot({
'aliases': set({