89 lines
3.2 KiB
Python
89 lines
3.2 KiB
Python
# Copyright (c) 2012 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
|
|
|
|
from autotest_lib.client.common_lib import global_config, error
|
|
from autotest_lib.client.common_lib.cros.graphite import autotest_stats
|
|
from autotest_lib.scheduler import drones, scheduler_config
|
|
|
|
HOSTS_JOB_SUBDIR = 'hosts/'
|
|
PARSE_LOG = '.parse.log'
|
|
ENABLE_ARCHIVING = global_config.global_config.get_config_value(
|
|
scheduler_config.CONFIG_SECTION, 'enable_archiving', type=bool)
|
|
|
|
|
|
class SiteDroneManager(object):
|
|
|
|
|
|
_timer = autotest_stats.Timer('drone_manager')
|
|
|
|
|
|
def copy_to_results_repository(self, process, source_path,
|
|
destination_path=None):
|
|
"""
|
|
Copy results from the given process at source_path to destination_path
|
|
in the results repository.
|
|
|
|
This site subclassed version will only copy the results back for Special
|
|
Agent Tasks (Cleanup, Verify, Repair) that reside in the hosts/
|
|
subdirectory of results if the copy_task_results_back flag has been set
|
|
to True inside global_config.ini
|
|
|
|
It will also only copy .parse.log files back to the scheduler if the
|
|
copy_parse_log_back flag in global_config.ini has been set to True.
|
|
"""
|
|
if not ENABLE_ARCHIVING:
|
|
return
|
|
copy_task_results_back = global_config.global_config.get_config_value(
|
|
scheduler_config.CONFIG_SECTION, 'copy_task_results_back',
|
|
type=bool)
|
|
copy_parse_log_back = global_config.global_config.get_config_value(
|
|
scheduler_config.CONFIG_SECTION, 'copy_parse_log_back',
|
|
type=bool)
|
|
special_task = source_path.startswith(HOSTS_JOB_SUBDIR)
|
|
parse_log = source_path.endswith(PARSE_LOG)
|
|
if (copy_task_results_back or not special_task) and (
|
|
copy_parse_log_back or not parse_log):
|
|
super(SiteDroneManager, self).copy_to_results_repository(process,
|
|
source_path, destination_path)
|
|
|
|
|
|
def kill_process(self, process):
|
|
"""
|
|
Kill the given process.
|
|
"""
|
|
logging.info('killing %s', process)
|
|
drone = self._get_drone_for_process(process)
|
|
drone.queue_kill_process(process)
|
|
|
|
|
|
def _add_drone(self, hostname):
|
|
"""
|
|
Forked from drone_manager.py
|
|
|
|
Catches AutoservRunError if the drone fails initialization and does not
|
|
add it to the list of usable drones.
|
|
|
|
@param hostname: Hostname of the drone we are trying to add.
|
|
"""
|
|
logging.info('Adding drone %s' % hostname)
|
|
drone = drones.get_drone(hostname)
|
|
if drone:
|
|
try:
|
|
drone.call('initialize', self.absolute_path(''))
|
|
except error.AutoservRunError as e:
|
|
logging.error('Failed to initialize drone %s with error: %s',
|
|
hostname, e)
|
|
return
|
|
self._drones[drone.hostname] = drone
|
|
|
|
|
|
@_timer.decorate
|
|
def refresh(self):
|
|
super(SiteDroneManager, self).refresh()
|
|
|
|
|
|
@_timer.decorate
|
|
def execute_actions(self):
|
|
super(SiteDroneManager, self).execute_actions()
|