def build_bug_map()

in treeherder/intermittents_commenter/commenter.py [0:0]


    def build_bug_map(self, bugs, option_collection_map):
        """Build bug_map
         eg:
        {
            "1206327": {
                "total": 5,
                "per_repository": {
                    "fx-team": 2,
                    "autoland": 3
                },
                "test_variants": {'no-variant', 'swr', ...},
                "data_table": {
                    "windows10-64/ccov": {
                        "mochitest-browser-chrome": 0,
                        "mochitest-browser-chrome-swr": 2,
                    },
                    "windows10-64/debug": {
                         "mochitest-browser-chrome-swr": 2,
                    },
                    "osx-10-10/debug": {
                         "mochitest-browser-chrome": 2,
                         "mochitest-browser-chrome-swr": 0,
                    },
                },
            },
        }
        """
        bug_map = {}
        bug_ids = [b["bug__bugzilla_id"] for b in bugs]
        bug_summaries = Bugscache.objects.filter(bugzilla_id__in=bug_ids).values(
            "summary", "bugzilla_id"
        )
        all_variants = set()
        for bug, bug_id in zip(bugs, bug_ids):
            manifest = self.get_test_manifest(bug_summaries.filter(bugzilla_id=bug_id))
            bug_testrun_matrix = []
            if manifest:
                testrun_matrix = (
                    fetch.fetch_testrun_matrix()
                    if self.testrun_matrix is None
                    else self.testrun_matrix
                )
                self.testrun_matrix = testrun_matrix
                bug_testrun_matrix = testrun_matrix[manifest]
            bug_run_info = self.get_bug_run_info(bug)
            all_variants = bug_run_info.variants
            if bug_testrun_matrix and bug_run_info.os_name in bug_testrun_matrix:
                testrun_os_matrix = bug_testrun_matrix[bug_run_info.os_name]
                all_variants |= self.get_all_test_variants(bug_run_info, testrun_os_matrix)
            repo = bug["job__repository__name"]
            test_variant = bug_run_info.current_variant
            if bug_run_info.arch:
                platform_and_build = (
                    f"{bug_run_info.platform}-{bug_run_info.arch}/{bug_run_info.build_type}"
                )
            else:
                platform_and_build = f"{bug_run_info.platform}/{bug_run_info.build_type}"
            if bug_id not in bug_map:
                bug_infos = BugsDetails()
                bug_infos.total = 1
                bug_infos.test_variants |= all_variants
                bug_infos.per_repositories[repo] = 1
                bug_infos.data_table[platform_and_build] = {test_variant: 1}
                bug_map[bug_id] = bug_infos
            else:
                bug_infos = bug_map[bug_id]
                bug_infos.total += 1
                bug_infos.test_variants |= all_variants
                bug_infos.per_repositories.setdefault(repo, 0)
                bug_infos.per_repositories[repo] += 1
                # data_table
                data_table = bug_infos.data_table
                platform_and_build_data = data_table.get(platform_and_build, {})
                data_table[platform_and_build] = platform_and_build_data
                data_table[platform_and_build][test_variant] = (
                    platform_and_build_data.get(test_variant, 0) + 1
                )
        return bug_map