Skip to content

Commit f905bc0

Browse files
committed
error handling
1 parent 213d78d commit f905bc0

4 files changed

Lines changed: 35 additions & 16 deletions

File tree

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,5 @@ yarl==1.23.0
3333

3434
apscheduler
3535
scipy
36-
matplotlib
36+
matplotlib
37+
tenacity

watcher/jobs/objective.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -171,17 +171,26 @@ async def check_sessions(requester, tracker):
171171
print(f"Error in check_sessions: {e}")
172172
traceback.print_exc()
173173

174+
def format_uuid(uuid: str) -> str:
175+
if "-" in uuid:
176+
return uuid
177+
return f"{uuid[:8]}-{uuid[8:12]}-{uuid[12:16]}-{uuid[16:20]}-{uuid[20:]}"
178+
179+
async def append_position(player: str, position: tuple, tracker):
180+
try:
181+
if player in tracker.sessions:
182+
if position is None:
183+
await tracker.sessions[player].append_position([None, None, None])
184+
else:
185+
await tracker.sessions[player].append_position(position)
186+
except Exception as e:
187+
print(f"Error in append_position: {e}")
188+
174189
async def get_positions(requester, tracker):
175190
print("Getting positions...")
176191
online_data = await requester.map_request()
177192

178-
def format_uuid(uuid: str) -> str:
179-
return f"{uuid[:8]}-{uuid[8:12]}-{uuid[12:16]}-{uuid[16:20]}-{uuid[20:]}"
180-
181-
tasks = [
182-
tracker.sessions[format_uuid(player["uuid"])].append_position((player["x"], player["y"], player["z"]) if (format_uuid(player["uuid"])) in tracker.sessions else [None, None, None])
183-
for player in online_data["players"]
184-
]
193+
tasks = [append_position(format_uuid(player["uuid"]), (player["x"], player["y"], player["z"]), tracker) for player in online_data["players"]]
185194

186195
await asyncio.gather(*tasks)
187196

watcher/jobs/snapshots.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ async def take_player_snapshot():
44
snapshot_objects = []
55
print("Taking player snapshots...")
66
for player in await Players.all():
7+
78
sessions = await Sessions.filter(player=player.id)
89

910
player_town = await Towns.filter(id=player.town).first()

watcher/main.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1+
import asyncio
2+
import os
3+
4+
import aiohttp
5+
from apscheduler.events import EVENT_JOB_ERROR
16
from apscheduler.schedulers.asyncio import AsyncIOScheduler
27
from 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+
89
from shared.database import Active
10+
from shared.http_requests import HTTPRequester
911
from watcher.jobs.objective import Session
12+
from watcher.jobs.objective import check_sessions, get_positions, update_map, check_town_blocks, clean_dead_sessions
1013
from 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

1316
scheduler = 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+
2534
async 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

Comments
 (0)