# Copyright 2015 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import logging import multiprocessing import common from autotest_lib.server import test from autotest_lib.server import hosts from autotest_lib.server import crashcollect def log_collector_dut_worker(dut, job): """Worker function to collect logs from each DUT in the pool. The method called by multiprocessing worker pool for collecting DUT logs. This function is the function which is repeatedly scheduled for each DUT through the multiprocessing worker. This has to be defined outside the class because it needs to be pickleable. @param dut: DUTObject representing the DUT. @param job: Autotest job object. """ host = dut.host # Set the job on the host object for log collection. host.job = job logging.info("Collecting logs from: %s", host.hostname) crashcollect.get_crashinfo(host, 0) class CliqueDUTLogCollector(object): """CliqueDUTLogCollector is responsible for collecting the relevant logs from all the DUT's in the DUT pool after the test is executed. """ def collect_logs(self, dut_objects, job): """Collects logs from all tall the DUT's in the pool to a provided folder. @param dut_objects: An array of DUTObjects corresponding to all the DUT's in the DUT pool. @param job: Autotest job object. """ tasks = [] for dut in dut_objects: # Schedule the log collection for this DUT to the log process # pool. task = multiprocessing.Process( target=log_collector_dut_worker, args=(dut, job)) tasks.append(task) # Run the log collections in parallel. for task in tasks: task.start() for task in tasks: task.join()