mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-04-21 19:57:15 +00:00

* Add initial for hass interface * For better compatibility, remove extra options for cleanup old stuff * Add new functions to api * Add api proxy to home-assistant * use const * fix lint * fix lint * Add check_api_state function * Add api watchdog * Fix lint * update output * fix url * Fix API call * fix API documentation * remove password * fix api call to hass api only * fix problem with config missmatch * test * Detect wrong ssl settings * disable watchdog & add options * Update API
116 lines
3.7 KiB
Python
116 lines
3.7 KiB
Python
"""Multible tasks."""
|
|
import asyncio
|
|
from datetime import datetime
|
|
import logging
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
def api_sessions_cleanup(config):
|
|
"""Create scheduler task for cleanup api sessions."""
|
|
async def _api_sessions_cleanup():
|
|
"""Cleanup old api sessions."""
|
|
now = datetime.now()
|
|
for session, until_valid in config.security_sessions.items():
|
|
if now >= until_valid:
|
|
config.drop_security_session(session)
|
|
|
|
return _api_sessions_cleanup
|
|
|
|
|
|
def addons_update(loop, addons):
|
|
"""Create scheduler task for auto update addons."""
|
|
async def _addons_update():
|
|
"""Check if a update is available of a addon and update it."""
|
|
tasks = []
|
|
for addon in addons.list_addons:
|
|
if not addon.is_installed or not addon.auto_update:
|
|
continue
|
|
|
|
if addon.version_installed == addon.last_version:
|
|
continue
|
|
|
|
if addon.test_udpate_schema():
|
|
tasks.append(addon.update())
|
|
else:
|
|
_LOGGER.warning(
|
|
"Addon %s will be ignore, schema tests fails", addon.slug)
|
|
|
|
if tasks:
|
|
_LOGGER.info("Addon auto update process %d tasks", len(tasks))
|
|
await asyncio.wait(tasks, loop=loop)
|
|
|
|
return _addons_update
|
|
|
|
|
|
def hassio_update(supervisor, updater):
|
|
"""Create scheduler task for update of supervisor hassio."""
|
|
async def _hassio_update():
|
|
"""Check and run update of supervisor hassio."""
|
|
await updater.fetch_data()
|
|
if updater.version_hassio == supervisor.version:
|
|
return
|
|
|
|
# don't perform a update on beta/dev channel
|
|
if updater.beta_channel:
|
|
_LOGGER.warning("Ignore Hass.IO update on beta upstream!")
|
|
return
|
|
|
|
_LOGGER.info("Found new HassIO version %s.", updater.version_hassio)
|
|
await supervisor.update(updater.version_hassio)
|
|
|
|
return _hassio_update
|
|
|
|
|
|
def homeassistant_watchdog_docker(loop, homeassistant):
|
|
"""Create scheduler task for montoring running state of docker."""
|
|
async def _homeassistant_watchdog_docker():
|
|
"""Check running state of docker and start if they is close."""
|
|
# if Home-Assistant is active
|
|
if not await homeassistant.is_initialize() or \
|
|
not homeassistant.watchdog:
|
|
return
|
|
|
|
# if Home-Assistant is running
|
|
if homeassistant.in_progress or await homeassistant.is_running():
|
|
return
|
|
|
|
loop.create_task(homeassistant.run())
|
|
_LOGGER.error("Watchdog found a problem with Home-Assistant docker!")
|
|
|
|
return _homeassistant_watchdog_docker
|
|
|
|
|
|
def homeassistant_watchdog_api(loop, homeassistant):
|
|
"""Create scheduler task for montoring running state of API.
|
|
|
|
Try 2 times to call API before we restart Home-Assistant. Maybe we had a
|
|
delay in our system.
|
|
"""
|
|
retry_scan = 0
|
|
|
|
async def _homeassistant_watchdog_api():
|
|
"""Check running state of API and start if they is close."""
|
|
nonlocal retry_scan
|
|
|
|
# if Home-Assistant is active
|
|
if not await homeassistant.is_initialize() or \
|
|
not homeassistant.watchdog:
|
|
return
|
|
|
|
# if Home-Assistant API is up
|
|
if homeassistant.in_progress or await homeassistant.check_api_state():
|
|
return
|
|
retry_scan += 1
|
|
|
|
# Retry active
|
|
if retry_scan == 1:
|
|
_LOGGER.warning("Watchdog miss API response from Home-Assistant")
|
|
return
|
|
|
|
loop.create_task(homeassistant.restart())
|
|
_LOGGER.error("Watchdog found a problem with Home-Assistant API!")
|
|
retry_scan = 0
|
|
|
|
return _homeassistant_watchdog_api
|