def identify_vacant_components()

in bugbot/rules/vacant_triage_owner.py [0:0]


    def identify_vacant_components(self):
        # Filter out products and components that are not active
        products = [
            {
                **product,
                "components": [
                    component
                    for component in product["components"]
                    if component["is_active"]
                ],
            }
            for product in self.fetch_products()
            if product["is_active"]
        ]

        triage_owners = set()
        for product in products:
            for component in product["components"]:
                triage_owners.add(component["triage_owner"])

        user_activity = UserActivity(self.activity_weeks_count, self.absent_weeks_count)
        inactive_users = user_activity.check_users(triage_owners)

        team_managers = TeamManagers()
        vacant_components = []
        for product in products:
            for component in product["components"]:
                triage_owner = component["triage_owner"]
                if triage_owner not in inactive_users:
                    continue

                manager = team_managers.get_team_manager(component["team_name"])

                info = {
                    "id": component["id"],
                    "manager": manager["name"],
                    "team": component["team_name"],
                    "product": product["name"],
                    "component": component["name"],
                    "triage_owner": triage_owner,
                    "status": user_activity.get_string_status(
                        inactive_users[triage_owner]["status"]
                    ),
                }

                vacant_components.append(info)
                self.add(manager["mozilla_email"], info)

        return vacant_components