mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Add NetdataAlarms sensor to additionally collect alarm information (#34339)
This commit is contained in:
parent
3f427602ba
commit
93f9f1b320
@ -2,6 +2,6 @@
|
|||||||
"domain": "netdata",
|
"domain": "netdata",
|
||||||
"name": "Netdata",
|
"name": "Netdata",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/netdata",
|
"documentation": "https://www.home-assistant.io/integrations/netdata",
|
||||||
"requirements": ["netdata==0.1.2"],
|
"requirements": ["netdata==0.2.0"],
|
||||||
"codeowners": ["@fabaff"]
|
"codeowners": ["@fabaff"]
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dev.append(NetdataAlarms(netdata, name, host, port))
|
||||||
async_add_entities(dev, True)
|
async_add_entities(dev, True)
|
||||||
|
|
||||||
|
|
||||||
@ -145,6 +146,62 @@ class NetdataSensor(Entity):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class NetdataAlarms(Entity):
|
||||||
|
"""Implementation of a Netdata alarm sensor."""
|
||||||
|
|
||||||
|
def __init__(self, netdata, name, host, port):
|
||||||
|
"""Initialize the Netdata alarm sensor."""
|
||||||
|
self.netdata = netdata
|
||||||
|
self._state = None
|
||||||
|
self._name = name
|
||||||
|
self._host = host
|
||||||
|
self._port = port
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
"""Return the name of the sensor."""
|
||||||
|
return f"{self._name} Alarms"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def state(self):
|
||||||
|
"""Return the state of the resources."""
|
||||||
|
return self._state
|
||||||
|
|
||||||
|
@property
|
||||||
|
def icon(self):
|
||||||
|
"""Status symbol if type is symbol."""
|
||||||
|
if self._state == "ok":
|
||||||
|
return "mdi:check"
|
||||||
|
if self._state == "warning":
|
||||||
|
return "mdi:alert-outline"
|
||||||
|
if self._state == "critical":
|
||||||
|
return "mdi:alert"
|
||||||
|
return "mdi:crosshairs-question"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def available(self):
|
||||||
|
"""Could the resource be accessed during the last update call."""
|
||||||
|
return self.netdata.available
|
||||||
|
|
||||||
|
async def async_update(self):
|
||||||
|
"""Get the latest alarms from Netdata REST API."""
|
||||||
|
await self.netdata.async_update()
|
||||||
|
alarms = self.netdata.api.alarms["alarms"]
|
||||||
|
self._state = None
|
||||||
|
number_of_alarms = len(alarms)
|
||||||
|
number_of_relevant_alarms = number_of_alarms
|
||||||
|
|
||||||
|
_LOGGER.debug("Host %s has %s alarms", self.name, number_of_alarms)
|
||||||
|
|
||||||
|
for alarm in alarms:
|
||||||
|
if alarms[alarm]["recipient"] == "silent":
|
||||||
|
number_of_relevant_alarms = number_of_relevant_alarms - 1
|
||||||
|
elif alarms[alarm]["status"] == "CRITICAL":
|
||||||
|
self._state = "critical"
|
||||||
|
return
|
||||||
|
self._state = "ok" if number_of_relevant_alarms == 0 else "warning"
|
||||||
|
|
||||||
|
|
||||||
class NetdataData:
|
class NetdataData:
|
||||||
"""The class for handling the data retrieval."""
|
"""The class for handling the data retrieval."""
|
||||||
|
|
||||||
@ -159,6 +216,7 @@ class NetdataData:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
await self.api.get_allmetrics()
|
await self.api.get_allmetrics()
|
||||||
|
await self.api.get_alarms()
|
||||||
self.available = True
|
self.available = True
|
||||||
except NetdataError:
|
except NetdataError:
|
||||||
_LOGGER.error("Unable to retrieve data from Netdata")
|
_LOGGER.error("Unable to retrieve data from Netdata")
|
||||||
|
@ -952,7 +952,7 @@ ndms2_client==0.0.11
|
|||||||
nessclient==0.9.15
|
nessclient==0.9.15
|
||||||
|
|
||||||
# homeassistant.components.netdata
|
# homeassistant.components.netdata
|
||||||
netdata==0.1.2
|
netdata==0.2.0
|
||||||
|
|
||||||
# homeassistant.components.discovery
|
# homeassistant.components.discovery
|
||||||
# homeassistant.components.ssdp
|
# homeassistant.components.ssdp
|
||||||
|
Loading…
x
Reference in New Issue
Block a user