def fetch_all_data()

in mozperftest_tools/mozperftest_tools/lull_scheduler.py [0:0]


    def fetch_all_data(self):
        """Performs all the requests required to get all data for decisions.
        
        :return tuple: A tuple containing the following (in order):
            1. Average time a task takes to run.
            2. Average time it takes for a task to run on a platform.
            3. Number of tasks currently scheduled per platform.
            4. Number of machines that are currently available to use.
            5. Last time a given task was run (days elapsed since).
        """
        # Get information for requests
        provision_ids = list(
            set([d["provisionerId"] for k, d in self.platform_to_worker_type.items()])
        )

        # Make the requests, and reformat the data into dicts
        avg_task_time_data = {}
        avg_task_time = fetch_data(AVG_TASK_TIME_URL)["query_result"]["data"]["rows"]
        for task_time in avg_task_time:
            avg_task_time_data[task_time["name"]] = task_time

        avg_platform_time_data = {}
        avg_platform_time = fetch_data(AVG_PLATFORM_TIME_URL)["query_result"]["data"][
            "rows"
        ]
        for platform_time in avg_platform_time:
            avg_platform_time_data[platform_time["platform"]] = platform_time

        last_task_run_dates_data = {}
        last_task_run_dates = fetch_data(LAST_TASK_RUN_DATES)["query_result"]["data"][
            "rows"
        ]
        for last_task_run_date in last_task_run_dates:
            last_task_run_dates_data[last_task_run_date["name"]] = last_task_run_date

        number_tasks_scheduled = {}
        for provision_id in provision_ids:
            NUMBER_TASKS_SCHEDULED_POST_DATA["variables"][
                "provisionerId"
            ] = provision_id
            number_tasks_scheduled[provision_id] = fetch_post_data(
                NUMBER_TASKS_SCHEDULED_URL, NUMBER_TASKS_SCHEDULED_POST_DATA
            )["data"]["workerTypes"]["edges"]

        number_machines_available = {}
        for platform, info in self.platform_to_worker_type.items():
            NUMBER_MACHINES_AVAILABLE_POST_DATA["variables"]["provisionerId"] = info[
                "provisionerId"
            ]
            NUMBER_MACHINES_AVAILABLE_POST_DATA["variables"]["workerType"] = info[
                "workerType"
            ]
            number_machines_available[platform] = fetch_post_data(
                NUMBER_MACHINES_AVAILABLE_URL, NUMBER_MACHINES_AVAILABLE_POST_DATA
            )["data"]["workers"]["edges"]

        return (
            avg_task_time_data,
            avg_platform_time_data,
            number_tasks_scheduled,
            number_machines_available,
            last_task_run_dates_data,
        )