Simran Basi | cced309 | 2012-08-02 15:09:23 -0700 | [diff] [blame] | 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 | |
Chris Sosa | b838a0c | 2013-02-17 16:58:33 -0800 | [diff] [blame] | 6 | from autotest_lib.client.common_lib import global_config, error |
Simran Basi | 695e2d3 | 2013-01-04 14:59:19 -0800 | [diff] [blame] | 7 | from autotest_lib.scheduler import drones, scheduler_config |
Simran Basi | cced309 | 2012-08-02 15:09:23 -0700 | [diff] [blame] | 8 | |
| 9 | HOSTS_JOB_SUBDIR = 'hosts/' |
Simran Basi | 8f858d0 | 2012-08-03 15:28:55 -0700 | [diff] [blame] | 10 | PARSE_LOG = '.parse.log' |
Simran Basi | 882f15b | 2013-10-29 14:59:34 -0700 | [diff] [blame] | 11 | ENABLE_ARCHIVING = global_config.global_config.get_config_value( |
| 12 | scheduler_config.CONFIG_SECTION, 'enable_archiving', type=bool) |
Simran Basi | cced309 | 2012-08-02 15:09:23 -0700 | [diff] [blame] | 13 | |
| 14 | |
| 15 | class SiteDroneManager(object): |
Prathmesh Prabhu | 3623862 | 2016-11-22 18:41:06 -0800 | [diff] [blame] | 16 | """ |
| 17 | Site specific DroneManager extensions. |
Simran Basi | cced309 | 2012-08-02 15:09:23 -0700 | [diff] [blame] | 18 | |
Prathmesh Prabhu | 3623862 | 2016-11-22 18:41:06 -0800 | [diff] [blame] | 19 | When importing this class gains BaseDroneManager as a base class. |
| 20 | """ |
Simran Basi | cced309 | 2012-08-02 15:09:23 -0700 | [diff] [blame] | 21 | def copy_to_results_repository(self, process, source_path, |
| 22 | destination_path=None): |
| 23 | """ |
| 24 | Copy results from the given process at source_path to destination_path |
| 25 | in the results repository. |
| 26 | |
| 27 | This site subclassed version will only copy the results back for Special |
| 28 | Agent Tasks (Cleanup, Verify, Repair) that reside in the hosts/ |
| 29 | subdirectory of results if the copy_task_results_back flag has been set |
| 30 | to True inside global_config.ini |
Simran Basi | 8f858d0 | 2012-08-03 15:28:55 -0700 | [diff] [blame] | 31 | |
| 32 | It will also only copy .parse.log files back to the scheduler if the |
| 33 | copy_parse_log_back flag in global_config.ini has been set to True. |
Simran Basi | cced309 | 2012-08-02 15:09:23 -0700 | [diff] [blame] | 34 | """ |
Simran Basi | 882f15b | 2013-10-29 14:59:34 -0700 | [diff] [blame] | 35 | if not ENABLE_ARCHIVING: |
| 36 | return |
Simran Basi | cced309 | 2012-08-02 15:09:23 -0700 | [diff] [blame] | 37 | copy_task_results_back = global_config.global_config.get_config_value( |
| 38 | scheduler_config.CONFIG_SECTION, 'copy_task_results_back', |
| 39 | type=bool) |
Simran Basi | 8f858d0 | 2012-08-03 15:28:55 -0700 | [diff] [blame] | 40 | copy_parse_log_back = global_config.global_config.get_config_value( |
| 41 | scheduler_config.CONFIG_SECTION, 'copy_parse_log_back', |
| 42 | type=bool) |
Simran Basi | cced309 | 2012-08-02 15:09:23 -0700 | [diff] [blame] | 43 | special_task = source_path.startswith(HOSTS_JOB_SUBDIR) |
Simran Basi | 8f858d0 | 2012-08-03 15:28:55 -0700 | [diff] [blame] | 44 | parse_log = source_path.endswith(PARSE_LOG) |
| 45 | if (copy_task_results_back or not special_task) and ( |
| 46 | copy_parse_log_back or not parse_log): |
Simran Basi | cced309 | 2012-08-02 15:09:23 -0700 | [diff] [blame] | 47 | super(SiteDroneManager, self).copy_to_results_repository(process, |
Simran Basi | 8f858d0 | 2012-08-03 15:28:55 -0700 | [diff] [blame] | 48 | source_path, destination_path) |
Simran Basi | af9b8e7 | 2012-10-12 15:02:36 -0700 | [diff] [blame] | 49 | |
| 50 | |
| 51 | def kill_process(self, process): |
| 52 | """ |
| 53 | Kill the given process. |
| 54 | """ |
| 55 | logging.info('killing %s', process) |
| 56 | drone = self._get_drone_for_process(process) |
Simran Basi | 695e2d3 | 2013-01-04 14:59:19 -0800 | [diff] [blame] | 57 | drone.queue_kill_process(process) |
| 58 | |
| 59 | |
| 60 | def _add_drone(self, hostname): |
| 61 | """ |
| 62 | Forked from drone_manager.py |
| 63 | |
| 64 | Catches AutoservRunError if the drone fails initialization and does not |
| 65 | add it to the list of usable drones. |
| 66 | |
| 67 | @param hostname: Hostname of the drone we are trying to add. |
| 68 | """ |
| 69 | logging.info('Adding drone %s' % hostname) |
| 70 | drone = drones.get_drone(hostname) |
| 71 | if drone: |
| 72 | try: |
| 73 | drone.call('initialize', self.absolute_path('')) |
| 74 | except error.AutoservRunError as e: |
| 75 | logging.error('Failed to initialize drone %s with error: %s', |
| 76 | hostname, e) |
| 77 | return |
Fang Deng | 1d6c2a0 | 2013-04-17 15:25:45 -0700 | [diff] [blame] | 78 | self._drones[drone.hostname] = drone |