diff --git a/swh/web/misc/coverage.py b/swh/web/misc/coverage.py --- a/swh/web/misc/coverage.py +++ b/swh/web/misc/coverage.py @@ -18,7 +18,7 @@ from swh.scheduler.model import SchedulerMetrics from swh.web.common import archive from swh.web.common.origin_save import get_savable_visit_types -from swh.web.common.utils import get_deposits_list, reverse +from swh.web.common.utils import get_deposits_list, is_swh_web_production, reverse from swh.web.config import scheduler _swh_arch_overview_doc = ( @@ -287,6 +287,15 @@ return 0 +def _bypass_lru_cache_if_not_production(request, func, *args): + if is_swh_web_production(request): + # use cached version of function call + return func(*args) + else: + # call uncached wrapped function directly + return func.__wrapped__(*args) + + def _search_url(query: str, visit_type: str) -> str: return reverse( "browse-search", @@ -302,7 +311,7 @@ @xframe_options_exempt @never_cache def _swh_coverage(request): - listers_metrics = _get_listers_metrics() + listers_metrics = _bypass_lru_cache_if_not_production(request, _get_listers_metrics) for origins in listed_origins["origins"]: origins["instances"] = {} origins_type = origins["type"] @@ -310,7 +319,9 @@ # special processing for nixos/guix origins as there is no # scheduler metrics for those if origins_type in ("nixos", "guix"): - count = _get_nixguix_origins_count(origins["search_pattern"]) + count = _bypass_lru_cache_if_not_production( + request, _get_nixguix_origins_count, origins["search_pattern"] + ) origins["count"] = f"{count:,}" if count else "" origins["instances"][origins_type] = {"nixguix": {"count": count}} @@ -371,7 +382,9 @@ origins["search_pattern"], visit_type ) - deposits_counts = _get_deposits_netloc_counts() + deposits_counts = _bypass_lru_cache_if_not_production( + request, _get_deposits_netloc_counts + ) for origins in deposited_origins["origins"]: if origins["search_pattern"] in deposits_counts: origins["count"] = f"{deposits_counts[origins['search_pattern']]:,}" diff --git a/swh/web/tests/misc/test_coverage.py b/swh/web/tests/misc/test_coverage.py --- a/swh/web/tests/misc/test_coverage.py +++ b/swh/web/tests/misc/test_coverage.py @@ -16,6 +16,7 @@ from swh.scheduler.model import LastVisitStatus, ListedOrigin, OriginVisitStats from swh.web.common.utils import reverse +from swh.web.config import SWH_WEB_SERVER_NAME from swh.web.misc.coverage import ( _get_deposits_netloc_counts, _get_listers_metrics, @@ -24,7 +25,7 @@ listed_origins, ) from swh.web.tests.django_asserts import assert_contains -from swh.web.tests.utils import check_html_get_response +from swh.web.tests.utils import check_html_get_response, check_http_get_response @pytest.fixture(autouse=True) @@ -50,9 +51,12 @@ that will be consumed by the archive coverage view, then check the HTML page gets rendered without errors. """ - mocker.patch( - "swh.web.misc.coverage._get_nixguix_origins_count" - ).return_value = 30095 + + # mock calls to get nixguix origin counts + mock_archive = mocker.patch("swh.web.misc.coverage.archive") + mock_archive.lookup_latest_origin_snapshot.return_value = {"id": "some-snapshot"} + mock_archive.lookup_snapshot_sizes.return_value = {"release": 30095} + listers = [] visit_types = ["git", "hg", "svn", "bzr", "svn"] for origins in listed_origins["origins"]: @@ -134,3 +138,8 @@ for visit_type in visit_types: assert_contains(resp, f"