blob: c41d8d7c48cb857e21114cf65fa02c5e27b63b22 [file] [log] [blame]
Simran Basicced3092012-08-02 15:09:23 -07001# 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.
4import logging
5
Chris Sosab838a0c2013-02-17 16:58:33 -08006from autotest_lib.client.common_lib import global_config, error
Simran Basi695e2d32013-01-04 14:59:19 -08007from autotest_lib.scheduler import drones, scheduler_config
Fang Deng1d6c2a02013-04-17 15:25:45 -07008from autotest_lib.site_utils.graphite import stats
Simran Basicced3092012-08-02 15:09:23 -07009
10HOSTS_JOB_SUBDIR = 'hosts/'
Simran Basi8f858d02012-08-03 15:28:55 -070011PARSE_LOG = '.parse.log'
Simran Basi882f15b2013-10-29 14:59:34 -070012ENABLE_ARCHIVING = global_config.global_config.get_config_value(
13 scheduler_config.CONFIG_SECTION, 'enable_archiving', type=bool)
Simran Basicced3092012-08-02 15:09:23 -070014
15
16class SiteDroneManager(object):
17
18
Fang Deng1d6c2a02013-04-17 15:25:45 -070019 _timer = stats.Timer('drone_manager')
20
21
Simran Basicced3092012-08-02 15:09:23 -070022 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
Simran Basi8f858d02012-08-03 15:28:55 -070032
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.
Simran Basicced3092012-08-02 15:09:23 -070035 """
Simran Basi882f15b2013-10-29 14:59:34 -070036 if not ENABLE_ARCHIVING:
37 return
Simran Basicced3092012-08-02 15:09:23 -070038 copy_task_results_back = global_config.global_config.get_config_value(
39 scheduler_config.CONFIG_SECTION, 'copy_task_results_back',
40 type=bool)
Simran Basi8f858d02012-08-03 15:28:55 -070041 copy_parse_log_back = global_config.global_config.get_config_value(
42 scheduler_config.CONFIG_SECTION, 'copy_parse_log_back',
43 type=bool)
Simran Basicced3092012-08-02 15:09:23 -070044 special_task = source_path.startswith(HOSTS_JOB_SUBDIR)
Simran Basi8f858d02012-08-03 15:28:55 -070045 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):
Simran Basicced3092012-08-02 15:09:23 -070048 super(SiteDroneManager, self).copy_to_results_repository(process,
Simran Basi8f858d02012-08-03 15:28:55 -070049 source_path, destination_path)
Simran Basiaf9b8e72012-10-12 15:02:36 -070050
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)
Simran Basi695e2d32013-01-04 14:59:19 -080058 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
Fang Deng1d6c2a02013-04-17 15:25:45 -070079 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()