Home | History | Annotate | Download | only in scheduler
      1 # Copyright (c) 2012 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 import logging
      5 
      6 from autotest_lib.client.common_lib import global_config, error
      7 from autotest_lib.client.common_lib.cros.graphite import autotest_stats
      8 from autotest_lib.scheduler import drones, scheduler_config
      9 
     10 HOSTS_JOB_SUBDIR = 'hosts/'
     11 PARSE_LOG = '.parse.log'
     12 ENABLE_ARCHIVING =  global_config.global_config.get_config_value(
     13         scheduler_config.CONFIG_SECTION, 'enable_archiving', type=bool)
     14 
     15 
     16 class SiteDroneManager(object):
     17 
     18 
     19     _timer = autotest_stats.Timer('drone_manager')
     20 
     21 
     22     def copy_to_results_repository(self, process, source_path,
     23                                    destination_path=None):
     24         """
     25         Copy results from the given process at source_path to destination_path
     26         in the results repository.
     27 
     28         This site subclassed version will only copy the results back for Special
     29         Agent Tasks (Cleanup, Verify, Repair) that reside in the hosts/
     30         subdirectory of results if the copy_task_results_back flag has been set
     31         to True inside global_config.ini
     32 
     33         It will also only copy .parse.log files back to the scheduler if the
     34         copy_parse_log_back flag in global_config.ini has been set to True.
     35         """
     36         if not ENABLE_ARCHIVING:
     37             return
     38         copy_task_results_back = global_config.global_config.get_config_value(
     39                 scheduler_config.CONFIG_SECTION, 'copy_task_results_back',
     40                 type=bool)
     41         copy_parse_log_back = global_config.global_config.get_config_value(
     42                 scheduler_config.CONFIG_SECTION, 'copy_parse_log_back',
     43                 type=bool)
     44         special_task = source_path.startswith(HOSTS_JOB_SUBDIR)
     45         parse_log = source_path.endswith(PARSE_LOG)
     46         if (copy_task_results_back or not special_task) and (
     47                 copy_parse_log_back or not parse_log):
     48             super(SiteDroneManager, self).copy_to_results_repository(process,
     49                     source_path, destination_path)
     50 
     51 
     52     def kill_process(self, process):
     53         """
     54         Kill the given process.
     55         """
     56         logging.info('killing %s', process)
     57         drone = self._get_drone_for_process(process)
     58         drone.queue_kill_process(process)
     59 
     60 
     61     def _add_drone(self, hostname):
     62         """
     63         Forked from drone_manager.py
     64 
     65         Catches AutoservRunError if the drone fails initialization and does not
     66         add it to the list of usable drones.
     67 
     68         @param hostname: Hostname of the drone we are trying to add.
     69         """
     70         logging.info('Adding drone %s' % hostname)
     71         drone = drones.get_drone(hostname)
     72         if drone:
     73             try:
     74                 drone.call('initialize', self.absolute_path(''))
     75             except error.AutoservRunError as e:
     76                 logging.error('Failed to initialize drone %s with error: %s',
     77                               hostname, e)
     78                 return
     79             self._drones[drone.hostname] = drone
     80 
     81 
     82     @_timer.decorate
     83     def refresh(self):
     84        super(SiteDroneManager, self).refresh()
     85 
     86 
     87     @_timer.decorate
     88     def execute_actions(self):
     89        super(SiteDroneManager, self).execute_actions()
     90