Loading running_exercise/lib/exercise_cache.py +13 −2 Original line number Diff line number Diff line from typing import Dict, TypeVar, Optional from typing import Dict, TypeVar, Optional, Tuple from django.db.models import QuerySet Loading @@ -23,12 +23,15 @@ class ExerciseCache: __teams: Dict[int, Team] = {} __tools: Dict[int, Tool] = {} __channels: Dict[InjectTypes, Channel] = {} __cache_hits: int = 0 __cache_misses: int = 0 @staticmethod def get_tool(tool_id: int) -> Tool: if (tool := ExerciseCache.__tools.get(tool_id, None)) is not None: ExerciseCache.__cache_hits += 1 return tool ExerciseCache.__cache_misses += 1 tool = get_model(Tool, id=tool_id) all_tools = Tool.objects.filter( definition_id=tool.definition_id Loading @@ -39,8 +42,10 @@ class ExerciseCache: @staticmethod def get_team(team_id: int) -> Team: if (team := ExerciseCache.__teams.get(team_id, None)) is not None: ExerciseCache.__cache_hits += 1 return team ExerciseCache.__cache_misses += 1 team = get_model(Team, id=team_id) all_teams = Team.objects.filter(exercise_id=team.exercise_id) ExerciseCache.__teams = {team.id: team for team in all_teams} Loading @@ -55,8 +60,10 @@ class ExerciseCache: raise ModelNotFoundException( f"Channel for type `{channel_type}` not found" ) ExerciseCache.__cache_hits += 1 return channel ExerciseCache.__cache_misses += 1 channels = Channel.objects.filter(definition_id=definition_id) ExerciseCache.__channels = { channel.type: channel for channel in channels Loading @@ -75,3 +82,7 @@ class ExerciseCache: ExerciseCache.__channels = {} ExerciseCache.__teams = {} ExerciseCache.__tools = {} @staticmethod def data() -> Tuple[int, int]: return ExerciseCache.__cache_hits, ExerciseCache.__cache_misses running_exercise/lib/loop_thread.py +3 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ from common_lib.schema.enums import ExerciseEventTypeEnum from common_lib.subscription_handler import SubscriptionHandler from common_lib.utils import get_model from exercise.models import Exercise from running_exercise.lib.exercise_cache import ExerciseCache from running_exercise.lib.exercise_updater import ExerciseUpdater Loading Loading @@ -75,6 +76,8 @@ class LoopThread(Thread): f"loop thread exception {type(ex).__name__}: {str(ex)}" ) finally: hits, misses = ExerciseCache.data() logger.info(f"cache hits: {hits} | cache misses: {misses}") SubscriptionHandler.broadcast_exercises( get_model(Exercise, id=self.updater.exercise.id), ExerciseEventTypeEnum.modify(), Loading Loading
running_exercise/lib/exercise_cache.py +13 −2 Original line number Diff line number Diff line from typing import Dict, TypeVar, Optional from typing import Dict, TypeVar, Optional, Tuple from django.db.models import QuerySet Loading @@ -23,12 +23,15 @@ class ExerciseCache: __teams: Dict[int, Team] = {} __tools: Dict[int, Tool] = {} __channels: Dict[InjectTypes, Channel] = {} __cache_hits: int = 0 __cache_misses: int = 0 @staticmethod def get_tool(tool_id: int) -> Tool: if (tool := ExerciseCache.__tools.get(tool_id, None)) is not None: ExerciseCache.__cache_hits += 1 return tool ExerciseCache.__cache_misses += 1 tool = get_model(Tool, id=tool_id) all_tools = Tool.objects.filter( definition_id=tool.definition_id Loading @@ -39,8 +42,10 @@ class ExerciseCache: @staticmethod def get_team(team_id: int) -> Team: if (team := ExerciseCache.__teams.get(team_id, None)) is not None: ExerciseCache.__cache_hits += 1 return team ExerciseCache.__cache_misses += 1 team = get_model(Team, id=team_id) all_teams = Team.objects.filter(exercise_id=team.exercise_id) ExerciseCache.__teams = {team.id: team for team in all_teams} Loading @@ -55,8 +60,10 @@ class ExerciseCache: raise ModelNotFoundException( f"Channel for type `{channel_type}` not found" ) ExerciseCache.__cache_hits += 1 return channel ExerciseCache.__cache_misses += 1 channels = Channel.objects.filter(definition_id=definition_id) ExerciseCache.__channels = { channel.type: channel for channel in channels Loading @@ -75,3 +82,7 @@ class ExerciseCache: ExerciseCache.__channels = {} ExerciseCache.__teams = {} ExerciseCache.__tools = {} @staticmethod def data() -> Tuple[int, int]: return ExerciseCache.__cache_hits, ExerciseCache.__cache_misses
running_exercise/lib/loop_thread.py +3 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ from common_lib.schema.enums import ExerciseEventTypeEnum from common_lib.subscription_handler import SubscriptionHandler from common_lib.utils import get_model from exercise.models import Exercise from running_exercise.lib.exercise_cache import ExerciseCache from running_exercise.lib.exercise_updater import ExerciseUpdater Loading Loading @@ -75,6 +76,8 @@ class LoopThread(Thread): f"loop thread exception {type(ex).__name__}: {str(ex)}" ) finally: hits, misses = ExerciseCache.data() logger.info(f"cache hits: {hits} | cache misses: {misses}") SubscriptionHandler.broadcast_exercises( get_model(Exercise, id=self.updater.exercise.id), ExerciseEventTypeEnum.modify(), Loading