Home | History | Annotate | Download | only in clique_lib
      1 # Copyright 2015 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging
      6 import multiprocessing
      7 
      8 import common
      9 from autotest_lib.server import test
     10 from autotest_lib.server import hosts
     11 from autotest_lib.server import crashcollect
     12 
     13 
     14 def log_collector_dut_worker(dut, job):
     15     """Worker function to collect logs from each DUT in the pool.
     16 
     17     The method called by multiprocessing worker pool for collecting DUT
     18     logs. This function is the function which is repeatedly scheduled for each
     19     DUT through the multiprocessing worker. This has to be defined outside
     20     the class because it needs to be pickleable.
     21 
     22     @param dut: DUTObject representing the DUT.
     23     @param job: Autotest job object.
     24     """
     25     host = dut.host
     26     # Set the job on the host object for log collection.
     27     host.job = job
     28     logging.info("Collecting logs from: %s", host.hostname)
     29     crashcollect.get_crashinfo(host, 0)
     30 
     31 
     32 class CliqueDUTLogCollector(object):
     33     """CliqueDUTLogCollector is responsible for collecting the relevant logs
     34     from all the DUT's in the DUT pool after the test is executed.
     35     """
     36 
     37     def collect_logs(self, dut_objects, job):
     38         """Collects logs from all tall the DUT's in the pool to a provided
     39         folder.
     40 
     41         @param dut_objects: An array of DUTObjects corresponding to all the
     42                             DUT's in the DUT pool.
     43         @param job: Autotest job object.
     44         """
     45         tasks = []
     46         for dut in dut_objects:
     47             # Schedule the log collection for this DUT to the log process
     48             # pool.
     49             task = multiprocessing.Process(
     50                     target=log_collector_dut_worker,
     51                     args=(dut, job))
     52             tasks.append(task)
     53         # Run the log collections in parallel.
     54         for task in tasks:
     55             task.start()
     56         for task in tasks:
     57             task.join()
     58