diff --git a/.coveragerc b/.coveragerc index 07de825e839..02752a9a361 100644 --- a/.coveragerc +++ b/.coveragerc @@ -166,6 +166,7 @@ omit = homeassistant/components/sensor/sabnzbd.py homeassistant/components/sensor/speedtest.py homeassistant/components/sensor/steam_online.py + homeassistant/components/sensor/supervisord.py homeassistant/components/sensor/swiss_public_transport.py homeassistant/components/sensor/systemmonitor.py homeassistant/components/sensor/temper.py diff --git a/homeassistant/components/sensor/supervisord.py b/homeassistant/components/sensor/supervisord.py new file mode 100644 index 00000000000..cebdfb83f14 --- /dev/null +++ b/homeassistant/components/sensor/supervisord.py @@ -0,0 +1,61 @@ +""" +Sensor for Supervisord process status. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/sensor.supervisord/ +""" +import logging +import xmlrpc.client + +from homeassistant.helpers.entity import Entity + +_LOGGER = logging.getLogger(__name__) + + +# pylint: disable=unused-argument +def setup_platform(hass, config, add_devices, discovery_info=None): + """Setup the Supervisord platform.""" + try: + supervisor_server = xmlrpc.client.ServerProxy( + config.get('url', 'http://localhost:9001/RPC2')) + except ConnectionRefusedError: + _LOGGER.error('Could not connect to Supervisord') + return + processes = supervisor_server.supervisor.getAllProcessInfo() + add_devices( + [SupervisorProcessSensor(info, supervisor_server) + for info in processes]) + + +class SupervisorProcessSensor(Entity): + """Represent a supervisor-monitored process.""" + + # pylint: disable=abstract-method + def __init__(self, info, server): + """Initialize the sensor.""" + self._info = info + self._server = server + self.update() + + @property + def name(self): + """Return the name of the sensor.""" + return self._info.get('name') + + @property + def state(self): + """Return the state of the sensor.""" + return self._info.get('statename') + + def update(self): + """Update device state.""" + self._info = self._server.supervisor.getProcessInfo( + self._info.get('name')) + + @property + def device_state_attributes(self): + """Return the state attributes.""" + return { + 'group': self._info.get('group'), + 'description': self._info.get('description') + }