From cd4fbe7bbf27b17a7d6bd1161c9f7c2431ae9a2f Mon Sep 17 00:00:00 2001 From: Gagan Date: Tue, 13 Aug 2024 15:37:56 +0530 Subject: [PATCH] feat: make pg usage cache timeout configurable (#4485) --- api/app/settings/common.py | 1 + api/app_analytics/cache.py | 6 +++--- .../test_unit_app_analytics_cache.py | 15 ++++++++------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/api/app/settings/common.py b/api/app/settings/common.py index 9eec2514f3fd..c925ef9344fd 100644 --- a/api/app/settings/common.py +++ b/api/app/settings/common.py @@ -330,6 +330,7 @@ USE_POSTGRES_FOR_ANALYTICS = env.bool("USE_POSTGRES_FOR_ANALYTICS", default=False) USE_CACHE_FOR_USAGE_DATA = env.bool("USE_CACHE_FOR_USAGE_DATA", default=False) +PG_API_USAGE_CACHE_SECONDS = env.int("PG_API_USAGE_CACHE_SECONDS", default=60) FEATURE_EVALUATION_CACHE_SECONDS = env.int( "FEATURE_EVALUATION_CACHE_SECONDS", default=60 diff --git a/api/app_analytics/cache.py b/api/app_analytics/cache.py index 5e5da9e5b370..f3f2a74416d7 100644 --- a/api/app_analytics/cache.py +++ b/api/app_analytics/cache.py @@ -5,8 +5,6 @@ from django.conf import settings from django.utils import timezone -CACHE_FLUSH_INTERVAL = 60 # seconds - class APIUsageCache: def __init__(self): @@ -33,7 +31,9 @@ def track_request(self, resource: int, host: str, environment_key: str): self._cache[key] = 1 else: self._cache[key] += 1 - if (timezone.now() - self._last_flushed_at).seconds > CACHE_FLUSH_INTERVAL: + if ( + timezone.now() - self._last_flushed_at + ).seconds > settings.PG_API_USAGE_CACHE_SECONDS: self._flush() diff --git a/api/tests/unit/app_analytics/test_unit_app_analytics_cache.py b/api/tests/unit/app_analytics/test_unit_app_analytics_cache.py index e6e6cde9b042..88ccc0cbe852 100644 --- a/api/tests/unit/app_analytics/test_unit_app_analytics_cache.py +++ b/api/tests/unit/app_analytics/test_unit_app_analytics_cache.py @@ -1,8 +1,4 @@ -from app_analytics.cache import ( - CACHE_FLUSH_INTERVAL, - APIUsageCache, - FeatureEvaluationCache, -) +from app_analytics.cache import APIUsageCache, FeatureEvaluationCache from app_analytics.models import Resource from django.utils import timezone from freezegun import freeze_time @@ -10,8 +6,13 @@ from pytest_mock import MockerFixture -def test_api_usage_cache(mocker: MockerFixture) -> None: +def test_api_usage_cache( + mocker: MockerFixture, + settings: SettingsWrapper, +) -> None: # Given + settings.PG_API_USAGE_CACHE_SECONDS = 60 + cache = APIUsageCache() now = timezone.now() mocked_track_request_task = mocker.patch("app_analytics.cache.track_request") @@ -30,7 +31,7 @@ def test_api_usage_cache(mocker: MockerFixture) -> None: assert not mocked_track_request_task.called # Now, let's move the time forward - frozen_time.tick(CACHE_FLUSH_INTERVAL + 1) + frozen_time.tick(settings.PG_API_USAGE_CACHE_SECONDS + 1) # let's track another request(to trigger flush) cache.track_request(