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