refactor DB health-check
This commit is contained in:
parent
1ca7db6427
commit
eb7d94d46c
@ -4,12 +4,18 @@ from typing import * # type: ignore
|
|||||||
|
|
||||||
from rio import Component, event, Spacer, Card, Container, Column, Row, TextStyle, Color, Text
|
from rio import Component, event, Spacer, Card, Container, Column, Row, TextStyle, Color, Text
|
||||||
|
|
||||||
from src.ez_lan_manager import ConfigurationService
|
from src.ez_lan_manager import ConfigurationService, DatabaseService
|
||||||
from src.ez_lan_manager.components.DesktopNavigation import DesktopNavigation
|
from src.ez_lan_manager.components.DesktopNavigation import DesktopNavigation
|
||||||
|
|
||||||
class BasePage(Component):
|
class BasePage(Component):
|
||||||
content: Component
|
content: Component
|
||||||
|
|
||||||
|
@event.periodic(5)
|
||||||
|
async def check_db_conn(self) -> None:
|
||||||
|
is_healthy = await self.session[DatabaseService].is_healthy()
|
||||||
|
if not is_healthy:
|
||||||
|
self.session.navigate_to("./db-error")
|
||||||
|
|
||||||
@event.on_window_size_change
|
@event.on_window_size_change
|
||||||
async def on_window_size_change(self):
|
async def on_window_size_change(self):
|
||||||
await self.force_refresh()
|
await self.force_refresh()
|
||||||
|
|||||||
@ -15,12 +15,12 @@ class DbErrorPage(Component):
|
|||||||
async def on_window_size_change(self) -> None:
|
async def on_window_size_change(self) -> None:
|
||||||
await self.force_refresh()
|
await self.force_refresh()
|
||||||
|
|
||||||
# @event.on_mount
|
@event.on_mount
|
||||||
# async def retry_db_connect(self) -> None:
|
async def retry_db_connect(self) -> None:
|
||||||
# await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Fehler")
|
await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Fehler")
|
||||||
# while not self.session[DatabaseService].is_connected:
|
while not await self.session[DatabaseService].is_healthy():
|
||||||
# await sleep(2)
|
await sleep(2)
|
||||||
# self.session.navigate_to("./")
|
self.session.navigate_to("./")
|
||||||
|
|
||||||
def build(self) -> Component:
|
def build(self) -> Component:
|
||||||
content = Card(
|
content = Card(
|
||||||
|
|||||||
@ -29,6 +29,17 @@ class DatabaseService:
|
|||||||
self._database_config = database_config
|
self._database_config = database_config
|
||||||
self._connection_pool: Optional[aiomysql.Pool] = None
|
self._connection_pool: Optional[aiomysql.Pool] = None
|
||||||
|
|
||||||
|
async def is_healthy(self) -> bool:
|
||||||
|
try:
|
||||||
|
async with self._connection_pool.acquire() as conn:
|
||||||
|
async with conn.cursor() as _:
|
||||||
|
return True
|
||||||
|
except aiomysql.OperationalError:
|
||||||
|
return False
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to acquire a connection: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
async def init_db_pool(self) -> bool:
|
async def init_db_pool(self) -> bool:
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Connecting to database '{self._database_config.db_name}' on "
|
f"Connecting to database '{self._database_config.db_name}' on "
|
||||||
@ -42,7 +53,7 @@ class DatabaseService:
|
|||||||
password=self._database_config.db_password,
|
password=self._database_config.db_password,
|
||||||
db=self._database_config.db_name,
|
db=self._database_config.db_name,
|
||||||
minsize=1,
|
minsize=1,
|
||||||
maxsize=20
|
maxsize=40
|
||||||
)
|
)
|
||||||
except aiomysql.OperationalError:
|
except aiomysql.OperationalError:
|
||||||
return False
|
return False
|
||||||
@ -215,6 +226,7 @@ class DatabaseService:
|
|||||||
except aiomysql.InterfaceError:
|
except aiomysql.InterfaceError:
|
||||||
pool_init_result = await self.init_db_pool()
|
pool_init_result = await self.init_db_pool()
|
||||||
if not pool_init_result:
|
if not pool_init_result:
|
||||||
|
print(self._connection_pool)
|
||||||
raise NoDatabaseConnectionError
|
raise NoDatabaseConnectionError
|
||||||
return await self.get_news(dt_start, dt_end)
|
return await self.get_news(dt_start, dt_end)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user