aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/bot.py21
-rw-r--r--bot/constants.py2
-rw-r--r--config-default.yml2
3 files changed, 25 insertions, 0 deletions
diff --git a/bot/bot.py b/bot/bot.py
index df80868ee..cd8e26325 100644
--- a/bot/bot.py
+++ b/bot/bot.py
@@ -89,6 +89,22 @@ class Bot(commands.Bot):
for item in full_cache:
self.insert_item_into_filter_list_cache(item)
+ async def ping_services(self) -> None:
+ """A helper to make sure all the services the bot relies on are available on startup."""
+ # Connect Site/API
+ attempts = 0
+ while True:
+ try:
+ log.info(f"Attempting site connection: {attempts + 1}/{constants.URLs.connect_max_retries}")
+ await self.api_client.get("healthcheck")
+ break
+
+ except aiohttp.ClientConnectorError as e:
+ attempts += 1
+ if attempts == constants.URLs.connect_max_retries:
+ raise e
+ await asyncio.sleep(constants.URLs.connect_cooldown)
+
@classmethod
def create(cls) -> "Bot":
"""Create and return an instance of a Bot."""
@@ -231,6 +247,11 @@ class Bot(commands.Bot):
# here. Normally, this shouldn't happen.
await self.redis_session.connect()
+ try:
+ await self.ping_services()
+ except Exception as e:
+ raise StartupError(e)
+
# Build the FilterList cache
await self.cache_filter_list_data()
diff --git a/bot/constants.py b/bot/constants.py
index 69bc82b89..7cf31e835 100644
--- a/bot/constants.py
+++ b/bot/constants.py
@@ -531,6 +531,8 @@ class URLs(metaclass=YAMLGetter):
github_bot_repo: str
# Base site vars
+ connect_max_retries: int
+ connect_cooldown: int
site: str
site_api: str
site_schema: str
diff --git a/config-default.yml b/config-default.yml
index 7d9afaa0e..a9fb2262e 100644
--- a/config-default.yml
+++ b/config-default.yml
@@ -338,6 +338,8 @@ keys:
urls:
# PyDis site vars
+ connect_max_retries: 3
+ connect_cooldown: 5
site: &DOMAIN "pythondiscord.com"
site_api: &API "pydis-api.default.svc.cluster.local"
site_api_schema: "http://"