1+ import asyncio
2+ import os
3+
4+ import aiohttp
5+ from apscheduler .events import EVENT_JOB_ERROR
16from apscheduler .schedulers .asyncio import AsyncIOScheduler
27from tortoise import Tortoise
3- import aiohttp
4- import os
5- from shared .http_requests import HTTPRequester
6- from watcher .jobs .objective import check_sessions , get_positions , update_map , check_town_blocks , clean_dead_sessions
7- import asyncio
8+
89from shared .database import Active
10+ from shared .http_requests import HTTPRequester
911from watcher .jobs .objective import Session
12+ from watcher .jobs .objective import check_sessions , get_positions , update_map , check_town_blocks , clean_dead_sessions
1013from watcher .jobs .snapshots import take_player_snapshot , take_town_snapshot
11- from apscheduler . events import EVENT_JOB_ERROR
14+ from tenacity import retry , stop_after_attempt , wait_exponential
1215
1316scheduler = AsyncIOScheduler ()
1417
@@ -22,6 +25,12 @@ async def load_sessions(tracker):
2225 tracker .sessions [session .player ] = await Session .load (session )
2326 print (f"Loaded { len (active_sessions )} active sessions" )
2427
28+ @retry (stop = stop_after_attempt (3 ), wait = wait_exponential (multiplier = 1 , min = 1 , max = 60 ))
29+ async def attempt_connection (url ):
30+ await Tortoise .init (db_url = url , modules = {"models" : ["shared.database" ]})
31+ print ("DB initialized successfully" )
32+ return 0
33+
2534async def main ():
2635 await Tortoise .close_connections ()
2736
@@ -32,8 +41,7 @@ async def main():
3241
3342 tracker = Tracker ()
3443
35- await Tortoise .init (db_url = database_url , modules = {"models" : ["shared.database" ]})
36- print ("DB initialized successfully" )
44+ await attempt_connection (database_url )
3745
3846 scheduler .add_job (
3947 check_sessions , "interval" , minutes = 5 ,
0 commit comments