Commit f68d112a authored by Martin Juhas's avatar Martin Juhas
Browse files

count cache hits and misses

parent 470da5f8
Loading
Loading
Loading
Loading
+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

@@ -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
@@ -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}
@@ -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
@@ -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
+3 −0
Original line number Diff line number Diff line
@@ -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


@@ -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(),