Various fixes

- Improved pipeline performance
- Improver importer progress
- Steam API slow down to not get 429-ed
(but still allow bursts on smaller steam libraries)
This commit is contained in:
GeoffreyCoulaud
2023-06-04 02:45:52 +02:00
parent 7d8a7a894f
commit ebd22e27da
3 changed files with 18 additions and 5 deletions

View File

@@ -39,8 +39,9 @@ class Importer:
@property @property
def pipelines_progress(self): def pipelines_progress(self):
progress = sum([pipeline.progress for pipeline in self.game_pipelines])
try: try:
progress = self.n_pipelines_done / len(self.game_pipelines) progress = progress / len(self.game_pipelines)
except ZeroDivisionError: except ZeroDivisionError:
progress = 1 progress = 1
return progress return progress

View File

@@ -30,7 +30,7 @@ class Pipeline(GObject.Object):
@property @property
def is_done(self) -> bool: def is_done(self) -> bool:
return len(self.not_done) == 0 return len(self.waiting) == 0 and len(self.running) == 0
@property @property
def blocked(self) -> set[Manager]: def blocked(self) -> set[Manager]:
@@ -49,6 +49,17 @@ class Pipeline(GObject.Object):
"""Get the managers that can be run""" """Get the managers that can be run"""
return self.waiting - self.blocked return self.waiting - self.blocked
@property
def progress(self) -> float:
"""Get the pipeline progress. Should only be a rough idea."""
n_done = len(self.done)
n_total = len(self.waiting) + len(self.running) + n_done
try:
progress = n_done / n_total
except ZeroDivisionError:
progress = 1
return progress
def advance(self): def advance(self):
"""Spawn tasks for managers that are able to run for a game""" """Spawn tasks for managers that are able to run for a game"""

View File

@@ -48,8 +48,8 @@ class SteamRateLimiter(TokenBucketRateLimiter):
# 200 requests per 5 min seems to be the limit # 200 requests per 5 min seems to be the limit
# https://stackoverflow.com/questions/76047820/how-am-i-exceeding-steam-apis-rate-limit # https://stackoverflow.com/questions/76047820/how-am-i-exceeding-steam-apis-rate-limit
# https://stackoverflow.com/questions/51795457/avoiding-error-429-too-many-requests-steam-web-api # https://stackoverflow.com/questions/51795457/avoiding-error-429-too-many-requests-steam-web-api
REFILL_SPACING_SECONDS = 1.5 REFILL_SPACING_SECONDS = 5 * 60 / 100
MAX_TOKENS = 200 MAX_TOKENS = 100
def __init__(self) -> None: def __init__(self) -> None:
# Load initial tokens from schema # Load initial tokens from schema
@@ -98,8 +98,9 @@ class SteamHelper:
def get_api_data(self, appid) -> SteamAPIData: def get_api_data(self, appid) -> SteamAPIData:
""" """
Get online data for a game from its appid. Get online data for a game from its appid.
May block to satisfy the Steam web API limitations. May block to satisfy the Steam web API limitations.
See https://wiki.teamfortress.com/wiki/User:RJackson/StorefrontAPI#appdetails
""" """
# Get data from the API (way block to satisfy its limits) # Get data from the API (way block to satisfy its limits)