Limit add-on stats to add-ons that are running (#58479)
This commit is contained in:
parent
8b021ea06b
commit
f15840e7ff
6 changed files with 42 additions and 24 deletions
|
@ -46,6 +46,8 @@ from .const import (
|
||||||
ATTR_PASSWORD,
|
ATTR_PASSWORD,
|
||||||
ATTR_REPOSITORY,
|
ATTR_REPOSITORY,
|
||||||
ATTR_SLUG,
|
ATTR_SLUG,
|
||||||
|
ATTR_STARTED,
|
||||||
|
ATTR_STATE,
|
||||||
ATTR_URL,
|
ATTR_URL,
|
||||||
ATTR_VERSION,
|
ATTR_VERSION,
|
||||||
DATA_KEY_ADDONS,
|
DATA_KEY_ADDONS,
|
||||||
|
@ -539,12 +541,13 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa:
|
||||||
hassio.get_os_info(),
|
hassio.get_os_info(),
|
||||||
)
|
)
|
||||||
|
|
||||||
addon_slugs = [
|
addons = [
|
||||||
addon[ATTR_SLUG]
|
addon
|
||||||
for addon in hass.data[DATA_SUPERVISOR_INFO].get("addons", [])
|
for addon in hass.data[DATA_SUPERVISOR_INFO].get("addons", [])
|
||||||
|
if addon[ATTR_STATE] == ATTR_STARTED
|
||||||
]
|
]
|
||||||
stats_data = await asyncio.gather(
|
stats_data = await asyncio.gather(
|
||||||
*[update_addon_stats(slug) for slug in addon_slugs]
|
*[update_addon_stats(addon[ATTR_SLUG]) for addon in addons]
|
||||||
)
|
)
|
||||||
hass.data[DATA_ADDONS_STATS] = dict(stats_data)
|
hass.data[DATA_ADDONS_STATS] = dict(stats_data)
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,13 @@ from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import ADDONS_COORDINATOR
|
from . import ADDONS_COORDINATOR
|
||||||
from .const import ATTR_STATE, ATTR_UPDATE_AVAILABLE, DATA_KEY_ADDONS, DATA_KEY_OS
|
from .const import (
|
||||||
|
ATTR_STARTED,
|
||||||
|
ATTR_STATE,
|
||||||
|
ATTR_UPDATE_AVAILABLE,
|
||||||
|
DATA_KEY_ADDONS,
|
||||||
|
DATA_KEY_OS,
|
||||||
|
)
|
||||||
from .entity import HassioAddonEntity, HassioOSEntity
|
from .entity import HassioAddonEntity, HassioOSEntity
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,7 +43,7 @@ ENTITY_DESCRIPTIONS = (
|
||||||
entity_registry_enabled_default=False,
|
entity_registry_enabled_default=False,
|
||||||
key=ATTR_STATE,
|
key=ATTR_STATE,
|
||||||
name="Running",
|
name="Running",
|
||||||
target="started",
|
target=ATTR_STARTED,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ ATTR_CPU_PERCENT = "cpu_percent"
|
||||||
ATTR_MEMORY_PERCENT = "memory_percent"
|
ATTR_MEMORY_PERCENT = "memory_percent"
|
||||||
ATTR_SLUG = "slug"
|
ATTR_SLUG = "slug"
|
||||||
ATTR_STATE = "state"
|
ATTR_STATE = "state"
|
||||||
|
ATTR_STARTED = "started"
|
||||||
ATTR_URL = "url"
|
ATTR_URL = "url"
|
||||||
ATTR_REPOSITORY = "repository"
|
ATTR_REPOSITORY = "repository"
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ from homeassistant.helpers.entity import DeviceInfo, EntityDescription
|
||||||
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||||
|
|
||||||
from . import DOMAIN, HassioDataUpdateCoordinator
|
from . import DOMAIN, HassioDataUpdateCoordinator
|
||||||
from .const import ATTR_SLUG
|
from .const import ATTR_SLUG, DATA_KEY_ADDONS, DATA_KEY_OS
|
||||||
|
|
||||||
|
|
||||||
class HassioAddonEntity(CoordinatorEntity):
|
class HassioAddonEntity(CoordinatorEntity):
|
||||||
|
@ -28,6 +28,15 @@ class HassioAddonEntity(CoordinatorEntity):
|
||||||
self._attr_unique_id = f"{addon[ATTR_SLUG]}_{entity_description.key}"
|
self._attr_unique_id = f"{addon[ATTR_SLUG]}_{entity_description.key}"
|
||||||
self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, addon[ATTR_SLUG])})
|
self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, addon[ATTR_SLUG])})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def available(self) -> bool:
|
||||||
|
"""Return True if entity is available."""
|
||||||
|
return (
|
||||||
|
super().available
|
||||||
|
and self.entity_description.key
|
||||||
|
in self.coordinator.data[DATA_KEY_ADDONS][self._addon_slug]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class HassioOSEntity(CoordinatorEntity):
|
class HassioOSEntity(CoordinatorEntity):
|
||||||
"""Base Entity for Hass.io OS."""
|
"""Base Entity for Hass.io OS."""
|
||||||
|
@ -43,3 +52,11 @@ class HassioOSEntity(CoordinatorEntity):
|
||||||
self._attr_name = f"Home Assistant Operating System: {entity_description.name}"
|
self._attr_name = f"Home Assistant Operating System: {entity_description.name}"
|
||||||
self._attr_unique_id = f"home_assistant_os_{entity_description.key}"
|
self._attr_unique_id = f"home_assistant_os_{entity_description.key}"
|
||||||
self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, "OS")})
|
self._attr_device_info = DeviceInfo(identifiers={(DOMAIN, "OS")})
|
||||||
|
|
||||||
|
@property
|
||||||
|
def available(self) -> bool:
|
||||||
|
"""Return True if entity is available."""
|
||||||
|
return (
|
||||||
|
super().available
|
||||||
|
and self.entity_description.key in self.coordinator.data[DATA_KEY_OS]
|
||||||
|
)
|
||||||
|
|
|
@ -493,6 +493,7 @@ async def test_device_registry_calls(hass):
|
||||||
"addons": [
|
"addons": [
|
||||||
{
|
{
|
||||||
"name": "test",
|
"name": "test",
|
||||||
|
"state": "started",
|
||||||
"slug": "test",
|
"slug": "test",
|
||||||
"installed": True,
|
"installed": True,
|
||||||
"update_available": False,
|
"update_available": False,
|
||||||
|
@ -503,6 +504,7 @@ async def test_device_registry_calls(hass):
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "test2",
|
"name": "test2",
|
||||||
|
"state": "started",
|
||||||
"slug": "test2",
|
"slug": "test2",
|
||||||
"installed": True,
|
"installed": True,
|
||||||
"update_available": False,
|
"update_available": False,
|
||||||
|
@ -537,6 +539,7 @@ async def test_device_registry_calls(hass):
|
||||||
"addons": [
|
"addons": [
|
||||||
{
|
{
|
||||||
"name": "test2",
|
"name": "test2",
|
||||||
|
"state": "started",
|
||||||
"slug": "test2",
|
"slug": "test2",
|
||||||
"installed": True,
|
"installed": True,
|
||||||
"update_available": False,
|
"update_available": False,
|
||||||
|
@ -568,6 +571,7 @@ async def test_device_registry_calls(hass):
|
||||||
{
|
{
|
||||||
"name": "test2",
|
"name": "test2",
|
||||||
"slug": "test2",
|
"slug": "test2",
|
||||||
|
"state": "started",
|
||||||
"installed": True,
|
"installed": True,
|
||||||
"update_available": False,
|
"update_available": False,
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
@ -577,6 +581,7 @@ async def test_device_registry_calls(hass):
|
||||||
{
|
{
|
||||||
"name": "test3",
|
"name": "test3",
|
||||||
"slug": "test3",
|
"slug": "test3",
|
||||||
|
"state": "stopped",
|
||||||
"installed": True,
|
"installed": True,
|
||||||
"update_available": False,
|
"update_available": False,
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
|
|
@ -66,6 +66,7 @@ def mock_all(aioclient_mock, request):
|
||||||
"addons": [
|
"addons": [
|
||||||
{
|
{
|
||||||
"name": "test",
|
"name": "test",
|
||||||
|
"state": "started",
|
||||||
"slug": "test",
|
"slug": "test",
|
||||||
"installed": True,
|
"installed": True,
|
||||||
"update_available": False,
|
"update_available": False,
|
||||||
|
@ -76,6 +77,7 @@ def mock_all(aioclient_mock, request):
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "test2",
|
"name": "test2",
|
||||||
|
"state": "stopped",
|
||||||
"slug": "test2",
|
"slug": "test2",
|
||||||
"installed": True,
|
"installed": True,
|
||||||
"update_available": False,
|
"update_available": False,
|
||||||
|
@ -104,22 +106,6 @@ def mock_all(aioclient_mock, request):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
aioclient_mock.get(
|
|
||||||
"http://127.0.0.1/addons/test2/stats",
|
|
||||||
json={
|
|
||||||
"result": "ok",
|
|
||||||
"data": {
|
|
||||||
"cpu_percent": 0.8,
|
|
||||||
"memory_usage": 51941376,
|
|
||||||
"memory_limit": 3977146368,
|
|
||||||
"memory_percent": 1.31,
|
|
||||||
"network_rx": 31338284,
|
|
||||||
"network_tx": 15692900,
|
|
||||||
"blk_read": 740077568,
|
|
||||||
"blk_write": 6004736,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
|
||||||
aioclient_mock.get(
|
aioclient_mock.get(
|
||||||
"http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}}
|
"http://127.0.0.1/ingress/panels", json={"result": "ok", "data": {"panels": {}}}
|
||||||
)
|
)
|
||||||
|
@ -149,9 +135,9 @@ async def test_sensors(hass, aioclient_mock):
|
||||||
"sensor.test2_version": "3.1.0",
|
"sensor.test2_version": "3.1.0",
|
||||||
"sensor.test2_newest_version": "3.2.0",
|
"sensor.test2_newest_version": "3.2.0",
|
||||||
"sensor.test_cpu_percent": "0.99",
|
"sensor.test_cpu_percent": "0.99",
|
||||||
"sensor.test2_cpu_percent": "0.8",
|
"sensor.test2_cpu_percent": "unavailable",
|
||||||
"sensor.test_memory_percent": "4.59",
|
"sensor.test_memory_percent": "4.59",
|
||||||
"sensor.test2_memory_percent": "1.31",
|
"sensor.test2_memory_percent": "unavailable",
|
||||||
}
|
}
|
||||||
|
|
||||||
"""Check that entities are disabled by default."""
|
"""Check that entities are disabled by default."""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue