| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # | 2 # |
| 3 # Copyright 2013 The Chromium Authors. All rights reserved. | 3 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
| 6 | 6 |
| 7 """A class to keep track of devices across builds and report state.""" | 7 """A class to keep track of devices across builds and report state.""" |
| 8 import logging | 8 import logging |
| 9 import optparse | 9 import optparse |
| 10 import os | 10 import os |
| 11 import psutil |
| 12 import signal |
| 11 import smtplib | 13 import smtplib |
| 12 import subprocess | 14 import subprocess |
| 13 import sys | 15 import sys |
| 14 import re | 16 import re |
| 15 import urllib | 17 import urllib |
| 16 | 18 |
| 17 import bb_annotations | 19 import bb_annotations |
| 18 import bb_utils | 20 import bb_utils |
| 19 | 21 |
| 20 sys.path.append(os.path.join(os.path.dirname(__file__), | 22 sys.path.append(os.path.join(os.path.dirname(__file__), |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 failed_restart = True | 236 failed_restart = True |
| 235 else: | 237 else: |
| 236 print 'Restarted USB device /dev/bus/usb/%s/%s' % (bus, dev) | 238 print 'Restarted USB device /dev/bus/usb/%s/%s' % (bus, dev) |
| 237 | 239 |
| 238 if failed_restart: | 240 if failed_restart: |
| 239 return 1 | 241 return 1 |
| 240 | 242 |
| 241 return 0 | 243 return 0 |
| 242 | 244 |
| 243 | 245 |
| 246 def KillAllAdb(): |
| 247 def GetAllAdb(): |
| 248 for p in psutil.process_iter(): |
| 249 if 'adb' in p.name or 'adb' in ' '.join(p.cmdline): |
| 250 yield p |
| 251 |
| 252 for sig in [signal.SIGTERM, signal.SIGQUIT, signal.SIGKILL]: |
| 253 for p in GetAllAdb(): |
| 254 try: |
| 255 print 'kill %d %d (%s [%s])' % (sig, p.pid, p.name, |
| 256 ' '.join(p.cmdline)) |
| 257 p.send_signal(sig) |
| 258 except psutil.error.NoSuchProcess: |
| 259 pass |
| 260 for p in GetAllAdb(): |
| 261 print 'Unable to kill %d (%s [%s])' % (p.pid, p.name, ' '.join(p.cmdline)) |
| 262 |
| 263 |
| 244 def main(): | 264 def main(): |
| 245 parser = optparse.OptionParser() | 265 parser = optparse.OptionParser() |
| 246 parser.add_option('', '--out-dir', | 266 parser.add_option('', '--out-dir', |
| 247 help='Directory where the device path is stored', | 267 help='Directory where the device path is stored', |
| 248 default=os.path.join(constants.DIR_SOURCE_ROOT, 'out')) | 268 default=os.path.join(constants.DIR_SOURCE_ROOT, 'out')) |
| 249 parser.add_option('--no-provisioning-check', action='store_true', | 269 parser.add_option('--no-provisioning-check', action='store_true', |
| 250 help='Will not check if devices are provisioned properly.') | 270 help='Will not check if devices are provisioned properly.') |
| 251 parser.add_option('--device-status-dashboard', action='store_true', | 271 parser.add_option('--device-status-dashboard', action='store_true', |
| 252 help='Output device status data for dashboard.') | 272 help='Output device status data for dashboard.') |
| 253 parser.add_option('--restart-usb', action='store_true', | 273 parser.add_option('--restart-usb', action='store_true', |
| 254 help='Restart USB ports before running device check.') | 274 help='Restart USB ports before running device check.') |
| 255 options, args = parser.parse_args() | 275 options, args = parser.parse_args() |
| 256 if args: | 276 if args: |
| 257 parser.error('Unknown options %s' % args) | 277 parser.error('Unknown options %s' % args) |
| 258 | 278 |
| 259 if options.restart_usb: | 279 if options.restart_usb: |
| 280 KillAllAdb() |
| 260 rc = RestartUsb() | 281 rc = RestartUsb() |
| 261 if rc: | 282 if rc: |
| 262 return 1 | 283 return 1 |
| 263 | 284 |
| 264 devices = android_commands.GetAttachedDevices() | 285 devices = android_commands.GetAttachedDevices() |
| 265 # TODO(navabi): Test to make sure this fails and then fix call | 286 # TODO(navabi): Test to make sure this fails and then fix call |
| 266 offline_devices = android_commands.GetAttachedDevices(hardware=False, | 287 offline_devices = android_commands.GetAttachedDevices(hardware=False, |
| 267 emulator=False, | 288 emulator=False, |
| 268 offline=True) | 289 offline=True) |
| 269 | 290 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 # devices with critically low battery or install speed. Remove those devices | 330 # devices with critically low battery or install speed. Remove those devices |
| 310 # from testing, allowing build to continue with good devices. | 331 # from testing, allowing build to continue with good devices. |
| 311 return 1 | 332 return 1 |
| 312 | 333 |
| 313 if not devices: | 334 if not devices: |
| 314 return 1 | 335 return 1 |
| 315 | 336 |
| 316 | 337 |
| 317 if __name__ == '__main__': | 338 if __name__ == '__main__': |
| 318 sys.exit(main()) | 339 sys.exit(main()) |
| OLD | NEW |