blob: c7ec34b1ca30ac63e8a1153aea3f020410714dac [file] [log] [blame]
# 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()