From c14cfd1b281438f7c98bf46d4142e6e8c659cf95 Mon Sep 17 00:00:00 2001 From: Antoine Lambert <anlambert@softwareheritage.org> Date: Tue, 22 Feb 2022 14:58:11 +0100 Subject: [PATCH] misc/coverage: Display counters for bzr/cvs visit types conditionally When loading task types are available for these visit types in the swh deployment environment (currently staging and docker), display the associated counters in the coverage widget. Related to T3945 Related to T3835 --- swh/web/misc/coverage.py | 10 +++++++--- swh/web/tests/misc/test_coverage.py | 17 ++++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/swh/web/misc/coverage.py b/swh/web/misc/coverage.py index d1649a4f4..742e8e6d6 100644 --- a/swh/web/misc/coverage.py +++ b/swh/web/misc/coverage.py @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2021 The Software Heritage developers +# Copyright (C) 2018-2022 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU Affero General Public License version 3, or any later version # See top-level LICENSE file for more information @@ -17,6 +17,7 @@ from django.views.decorators.clickjacking import xframe_options_exempt 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.config import scheduler @@ -330,8 +331,11 @@ def _swh_coverage(request): origins["count"] = f"{count:,}" origins["instances"] = defaultdict(dict) for instance, metrics in listers_metrics[origins_type]: - # not yet in production - if metrics.visit_type in ("bzr", "cvs"): + # these types are available in staging/docker but not yet in production + if ( + metrics.visit_type in ("bzr", "cvs") + and metrics.visit_type not in get_savable_visit_types() + ): continue instance_count = metrics.origins_known - metrics.origins_never_visited origins["instances"][instance].update( diff --git a/swh/web/tests/misc/test_coverage.py b/swh/web/tests/misc/test_coverage.py index 1de2b2c75..fe345f74e 100644 --- a/swh/web/tests/misc/test_coverage.py +++ b/swh/web/tests/misc/test_coverage.py @@ -1,4 +1,4 @@ -# Copyright (C) 2021 The Software Heritage developers +# Copyright (C) 2021-2022 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU Affero General Public License version 3, or any later version # See top-level LICENSE file for more information @@ -6,7 +6,7 @@ from datetime import datetime, timezone from itertools import chain import os -from random import choice, randint +from random import randint import uuid import pytest @@ -33,7 +33,7 @@ def clear_lru_caches(): _get_deposits_netloc_counts.cache_clear() -def test_coverage_view_no_metrics(client): +def test_coverage_view_no_metrics(client, swh_scheduler): """ Check coverage view can be rendered when scheduler metrics and deposits data are not available. @@ -54,6 +54,7 @@ def test_coverage_view_with_metrics(client, swh_scheduler, mocker): "swh.web.misc.coverage._get_nixguix_origins_count" ).return_value = 30095 listers = [] + visit_types = ["git", "hg", "svn", "bzr", "svn"] for origins in listed_origins["origins"]: # create some instances for each lister for instance in range(randint(1, 5)): @@ -64,9 +65,8 @@ def test_coverage_view_with_metrics(client, swh_scheduler, mocker): # record some sample listed origins _origins = [] origin_visit_stats = [] - for i in range(randint(3, 10)): + for i, visit_type in enumerate(visit_types): url = str(uuid.uuid4()) - visit_type = choice(["git", "hg", "svn"]) _origins.append( ListedOrigin( lister_id=lister.id, @@ -124,10 +124,13 @@ def test_coverage_view_with_metrics(client, swh_scheduler, mocker): assert_contains(resp, f'src="{logo_url}"') if "instances" in origins: - for visit_types in origins["instances"].values(): - for data in visit_types.values(): + for visit_types_ in origins["instances"].values(): + for data in visit_types_.values(): if data["count"]: assert_contains(resp, f'<a href="{escape(data["search_url"])}"') else: for search_url in origins["search_urls"].values(): assert_contains(resp, f'<a href="{escape(search_url)}"') + + for visit_type in visit_types: + assert_contains(resp, f"<td>{visit_type}</td>") -- GitLab