diff --git a/API.md b/API.md
index 65e619a29..5123745bf 100644
--- a/API.md
+++ b/API.md
@@ -86,6 +86,19 @@ Reload addons/version.
Output is the raw docker log.
+- GET `/supervisor/stats`
+```json
+{
+ "cpu_percent": 0.0,
+ "memory_usage": 283123,
+ "memory_limit": 329392,
+ "network_tx": 0,
+ "network_rx": 0,
+ "blk_read": 0,
+ "blk_write": 0
+}
+```
+
### Security
- GET `/security/info`
@@ -334,6 +347,19 @@ Proxy to real home-assistant instance.
Proxy to real websocket instance.
+- GET `/homeassistant/stats`
+```json
+{
+ "cpu_percent": 0.0,
+ "memory_usage": 283123,
+ "memory_limit": 329392,
+ "network_tx": 0,
+ "network_rx": 0,
+ "blk_read": 0,
+ "blk_write": 0
+}
+```
+
### RESTful for API addons
- GET `/addons`
@@ -452,6 +478,19 @@ Only supported for local build addons
Write data to add-on stdin
+- GET `/addons/{addon}/stats`
+```json
+{
+ "cpu_percent": 0.0,
+ "memory_usage": 283123,
+ "memory_limit": 329392,
+ "network_tx": 0,
+ "network_rx": 0,
+ "blk_read": 0,
+ "blk_write": 0
+}
+```
+
## Host Control
Communicate over UNIX socket with a host daemon.
diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py
index 9dabb94a9..032a2ec56 100644
--- a/hassio/addons/addon.py
+++ b/hassio/addons/addon.py
@@ -568,7 +568,7 @@ class Addon(CoreSysAttributes):
last_state = await self.state()
if self.last_version == self.version_installed:
- _LOGGER.info("No update available for Addon %s", self._id)
+ _LOGGER.warning("No update available for Addon %s", self._id)
return False
if not await self.instance.update(self.last_version):
@@ -596,6 +596,14 @@ class Addon(CoreSysAttributes):
"""
return self.instance.logs()
+ @check_installed
+ def stats(self):
+ """Return stats of container.
+
+ Return a coroutine.
+ """
+ return self.instance.stats()
+
@check_installed
async def rebuild(self):
"""Performe a rebuild of local build addon."""
diff --git a/hassio/api/__init__.py b/hassio/api/__init__.py
index a9aa6dd76..5601d469d 100644
--- a/hassio/api/__init__.py
+++ b/hassio/api/__init__.py
@@ -69,6 +69,7 @@ class RestAPI(CoreSysAttributes):
self.webapp.router.add_get('/supervisor/ping', api_supervisor.ping)
self.webapp.router.add_get('/supervisor/info', api_supervisor.info)
+ self.webapp.router.add_get('/supervisor/stats', api_supervisor.stats)
self.webapp.router.add_post(
'/supervisor/update', api_supervisor.update)
self.webapp.router.add_post(
@@ -84,6 +85,7 @@ class RestAPI(CoreSysAttributes):
self.webapp.router.add_get('/homeassistant/info', api_hass.info)
self.webapp.router.add_get('/homeassistant/logs', api_hass.logs)
+ self.webapp.router.add_get('/homeassistant/stats', api_hass.stats)
self.webapp.router.add_post('/homeassistant/options', api_hass.options)
self.webapp.router.add_post('/homeassistant/update', api_hass.update)
self.webapp.router.add_post('/homeassistant/restart', api_hass.restart)
@@ -114,7 +116,6 @@ class RestAPI(CoreSysAttributes):
self.webapp.router.add_get('/addons', api_addons.list)
self.webapp.router.add_post('/addons/reload', api_addons.reload)
-
self.webapp.router.add_get('/addons/{addon}/info', api_addons.info)
self.webapp.router.add_post(
'/addons/{addon}/install', api_addons.install)
@@ -135,6 +136,7 @@ class RestAPI(CoreSysAttributes):
self.webapp.router.add_get(
'/addons/{addon}/changelog', api_addons.changelog)
self.webapp.router.add_post('/addons/{addon}/stdin', api_addons.stdin)
+ self.webapp.router.add_get('/addons/{addon}/stats', api_addons.stats)
def _register_security(self):
"""Register security function."""
diff --git a/hassio/api/addons.py b/hassio/api/addons.py
index 73d3a5ccf..bf670dd74 100644
--- a/hassio/api/addons.py
+++ b/hassio/api/addons.py
@@ -15,6 +15,8 @@ from ..const import (
ATTR_AUDIO, ATTR_AUDIO_INPUT, ATTR_AUDIO_OUTPUT, ATTR_HASSIO_API,
ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, BOOT_AUTO, BOOT_MANUAL,
ATTR_CHANGELOG, ATTR_HOST_IPC, ATTR_HOST_DBUS, ATTR_LONG_DESCRIPTION,
+ ATTR_CPU_PERCENT, ATTR_MEMORY_LIMIT, ATTR_MEMORY_USAGE, ATTR_NETWORK_TX,
+ ATTR_NETWORK_RX, ATTR_BLK_READ, ATTR_BLK_WRITE,
CONTENT_TYPE_PNG, CONTENT_TYPE_BINARY, CONTENT_TYPE_TEXT)
from ..coresys import CoreSysAttributes
from ..validate import DOCKER_PORTS
@@ -158,6 +160,25 @@ class APIAddons(CoreSysAttributes):
return True
+ @api_process
+ async def stats(self, request):
+ """Return resource information."""
+ addon = self._extract_addon(request)
+ stats = await addon.stats()
+
+ if not stats:
+ raise RuntimeError("No stats available")
+
+ return {
+ ATTR_CPU_PERCENT: stats.cpu_percent,
+ ATTR_MEMORY_USAGE: stats.memory_usage,
+ ATTR_MEMORY_LIMIT: stats.memory_limit,
+ ATTR_NETWORK_RX: stats.network_rx,
+ ATTR_NETWORK_TX: stats.network_tx,
+ ATTR_BLK_READ: stats.blk_read,
+ ATTR_BLK_WRITE: stats.blk_write,
+ }
+
@api_process
def install(self, request):
"""Install addon."""
diff --git a/hassio/api/homeassistant.py b/hassio/api/homeassistant.py
index d12a108bc..2fb8216bf 100644
--- a/hassio/api/homeassistant.py
+++ b/hassio/api/homeassistant.py
@@ -7,7 +7,9 @@ import voluptuous as vol
from .utils import api_process, api_process_raw, api_validate
from ..const import (
ATTR_VERSION, ATTR_LAST_VERSION, ATTR_IMAGE, ATTR_CUSTOM, ATTR_BOOT,
- ATTR_PORT, ATTR_PASSWORD, ATTR_SSL, ATTR_WATCHDOG, CONTENT_TYPE_BINARY)
+ ATTR_PORT, ATTR_PASSWORD, ATTR_SSL, ATTR_WATCHDOG, ATTR_CPU_PERCENT,
+ ATTR_MEMORY_USAGE, ATTR_MEMORY_LIMIT, ATTR_NETWORK_RX, ATTR_NETWORK_TX,
+ ATTR_BLK_READ, ATTR_BLK_WRITE, CONTENT_TYPE_BINARY)
from ..coresys import CoreSysAttributes
from ..validate import NETWORK_PORT
@@ -76,6 +78,23 @@ class APIHomeAssistant(CoreSysAttributes):
self._homeassistant.save()
return True
+ @api_process
+ async def stats(self, request):
+ """Return resource information."""
+ stats = await self._homeassistant.stats()
+ if not stats:
+ raise RuntimeError("No stats available")
+
+ return {
+ ATTR_CPU_PERCENT: stats.cpu_percent,
+ ATTR_MEMORY_USAGE: stats.memory_usage,
+ ATTR_MEMORY_LIMIT: stats.memory_limit,
+ ATTR_NETWORK_RX: stats.network_rx,
+ ATTR_NETWORK_TX: stats.network_tx,
+ ATTR_BLK_READ: stats.blk_read,
+ ATTR_BLK_WRITE: stats.blk_write,
+ }
+
@api_process
async def update(self, request):
"""Update homeassistant."""
diff --git a/hassio/api/panel/hassio-main-es5.html b/hassio/api/panel/hassio-main-es5.html
index 8668928e7..54fc052e5 100644
--- a/hassio/api/panel/hassio-main-es5.html
+++ b/hassio/api/panel/hassio-main-es5.html
@@ -34,7 +34,7 @@
0 6px 30px 5px rgba(0, 0, 0, 0.12),
0 8px 10px -5px rgba(0, 0, 0, 0.4);};--shadow-elevation-24dp:{box-shadow:0 24px 38px 3px rgba(0, 0, 0, 0.14),
0 9px 46px 8px rgba(0, 0, 0, 0.12),
- 0 11px 15px -7px rgba(0, 0, 0, 0.4);};}