OLD | NEW |
1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Defines the task controller library.""" | 5 """Defines the task controller library.""" |
6 | 6 |
7 import argparse | 7 import argparse |
8 import datetime | 8 import datetime |
9 import logging | 9 import logging |
10 import os | 10 import os |
11 import socket | 11 import socket |
12 import subprocess | 12 import subprocess |
13 import sys | 13 import sys |
14 import tempfile | 14 import tempfile |
15 import threading | 15 import threading |
16 import xmlrpclib | 16 import xmlrpclib |
17 | 17 |
18 #pylint: disable=relative-import | 18 #pylint: disable=relative-import |
19 import common_lib | 19 import common_lib |
| 20 import process |
20 | 21 |
21 ISOLATE_PY = os.path.join(common_lib.SWARMING_DIR, 'isolate.py') | 22 ISOLATE_PY = os.path.join(common_lib.SWARMING_DIR, 'isolate.py') |
22 SWARMING_PY = os.path.join(common_lib.SWARMING_DIR, 'swarming.py') | 23 SWARMING_PY = os.path.join(common_lib.SWARMING_DIR, 'swarming.py') |
23 | 24 |
24 | 25 |
25 class Error(Exception): | 26 class Error(Exception): |
26 pass | 27 pass |
27 | 28 |
28 | 29 |
29 class ConnectionTimeoutError(Error): | 30 class ConnectionTimeoutError(Error): |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 assert isinstance(level, (str, int)) | 119 assert isinstance(level, (str, int)) |
119 if isinstance(level, int): | 120 if isinstance(level, int): |
120 level = logging.getLevelName(level) | 121 level = logging.getLevelName(level) |
121 self._verbosity = level #pylint: disable=attribute-defined-outside-init | 122 self._verbosity = level #pylint: disable=attribute-defined-outside-init |
122 | 123 |
123 @classmethod | 124 @classmethod |
124 def ReleaseAllTasks(cls): | 125 def ReleaseAllTasks(cls): |
125 for task in cls._tasks: | 126 for task in cls._tasks: |
126 task.Release() | 127 task.Release() |
127 | 128 |
| 129 def Process(self, cmd, verbose=False, detached=False, cwd=None): |
| 130 return process.ControllerProcessWrapper( |
| 131 self.rpc, cmd, verbose, detached, cwd) |
| 132 |
128 def _CreateOTP(self): | 133 def _CreateOTP(self): |
129 """Creates the OTP.""" | 134 """Creates the OTP.""" |
130 controller_name = socket.gethostname() | 135 controller_name = socket.gethostname() |
131 test_name = os.path.basename(sys.argv[0]) | 136 test_name = os.path.basename(sys.argv[0]) |
132 creation_time = datetime.datetime.utcnow() | 137 creation_time = datetime.datetime.utcnow() |
133 otp = 'task:%s controller:%s test:%s creation:%s' % ( | 138 otp = 'task:%s controller:%s test:%s creation:%s' % ( |
134 self._name, controller_name, test_name, creation_time) | 139 self._name, controller_name, test_name, creation_time) |
135 return otp | 140 return otp |
136 | 141 |
137 def Create(self): | 142 def Create(self): |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 if p.returncode != 0: | 204 if p.returncode != 0: |
200 raise Error(stderr) | 205 raise Error(stderr) |
201 | 206 |
202 def OnConnect(self, ip_address): | 207 def OnConnect(self, ip_address): |
203 """Receives task ip address on connection.""" | 208 """Receives task ip address on connection.""" |
204 self._ip_address = ip_address | 209 self._ip_address = ip_address |
205 self._connected = True | 210 self._connected = True |
206 self._rpc = common_lib.ConnectToServer(self._ip_address) | 211 self._rpc = common_lib.ConnectToServer(self._ip_address) |
207 logging.info('%s connected from %s', self._name, ip_address) | 212 logging.info('%s connected from %s', self._name, ip_address) |
208 self._connect_event.set() | 213 self._connect_event.set() |
OLD | NEW |