From 311c981d1aebb8fc8ab76e4541478972e262fab3 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 7 Aug 2020 21:43:03 +0200 Subject: [PATCH] Small cleanup to be more robust (#1876) --- supervisor/coresys.py | 5 +++++ supervisor/docker/interface.py | 4 ++-- supervisor/homeassistant.py | 10 +++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/supervisor/coresys.py b/supervisor/coresys.py index 57c908dd0..4aa26943d 100644 --- a/supervisor/coresys.py +++ b/supervisor/coresys.py @@ -5,6 +5,7 @@ import asyncio from typing import TYPE_CHECKING, Any, Callable, Coroutine, Optional, TypeVar import aiohttp +import sentry_sdk from .config import CoreConfig from .const import UpdateChannels @@ -612,3 +613,7 @@ class CoreSysAttributes: def sys_create_task(self, coroutine: Coroutine) -> asyncio.Task: """Create an async task.""" return self.sys_loop.create_task(coroutine) + + def sys_capture_exception(self, err: Exception) -> None: + """Capture a exception.""" + sentry_sdk.capture_exception(err) diff --git a/supervisor/docker/interface.py b/supervisor/docker/interface.py index c84ecbdfa..0a7711ed0 100644 --- a/supervisor/docker/interface.py +++ b/supervisor/docker/interface.py @@ -217,11 +217,11 @@ class DockerInterface(CoreSysAttributes): except docker.errors.DockerException: raise DockerAPIError() from None - _LOGGER.info("Start %s", self.image) + _LOGGER.info("Start %s", self.name) try: docker_container.start() except docker.errors.DockerException as err: - _LOGGER.error("Can't start %s: %s", self.image, err) + _LOGGER.error("Can't start %s: %s", self.name, err) raise DockerAPIError() from None @process_lock diff --git a/supervisor/homeassistant.py b/supervisor/homeassistant.py index cdf4f3300..2cc080519 100644 --- a/supervisor/homeassistant.py +++ b/supervisor/homeassistant.py @@ -268,6 +268,8 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): except DockerAPIError: _LOGGER.warning("Fails install landingpage, retry after 30sec") await asyncio.sleep(30) + except Exception as err: # pylint: disable=broad-except + self.sys_capture_exception(err) else: self.version = self.instance.version self.image = self.sys_updater.image_homeassistant @@ -290,11 +292,16 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): tag = self.latest_version if tag: - with suppress(DockerAPIError): + try: await self.instance.update( tag, image=self.sys_updater.image_homeassistant ) break + except DockerAPIError: + pass + except Exception as err: # pylint: disable=broad-except + self.sys_capture_exception(err) + _LOGGER.warning("Error on install Home Assistant. Retry in 30sec") await asyncio.sleep(30) @@ -596,6 +603,7 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): # Skip landingpage if version == LANDINGPAGE: return + _LOGGER.info("Wait until Home Assistant is ready") # Manage timeouts timeout: bool = True