Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(657)

Unified Diff: build/android/buildbot/bb_device_status_check.py

Issue 1281923003: [Android] Add --blacklist-file as a command-line option. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix telemetry_unittests Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/adb_reverse_forwarder.py ('k') | build/android/buildbot/bb_device_steps.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/buildbot/bb_device_status_check.py
diff --git a/build/android/buildbot/bb_device_status_check.py b/build/android/buildbot/bb_device_status_check.py
index 52261ac549031b4d197cbde1c5a0a23918fc6976..65fc5fed30f6c07a5d4098979ea6b9a854e3b241 100755
--- a/build/android/buildbot/bb_device_status_check.py
+++ b/build/android/buildbot/bb_device_status_check.py
@@ -5,9 +5,9 @@
# found in the LICENSE file.
"""A class to keep track of devices across builds and report state."""
+import argparse
import json
import logging
-import optparse
import os
import psutil
import re
@@ -41,7 +41,7 @@ from pylib.utils import timeout_retry
_RE_DEVICE_ID = re.compile('Device ID = (\d+)')
-def DeviceInfo(device, options):
+def DeviceInfo(device, args):
"""Gathers info on a device via various adb calls.
Args:
@@ -96,7 +96,7 @@ def DeviceInfo(device, options):
dev_good = False
if not battery.GetCharging():
battery.SetCharging(True)
- if not options.no_provisioning_check:
+ if not args.no_provisioning_check:
setup_wizard_disabled = (
device.GetProp('ro.setupwizard.mode') == 'DISABLED')
if not setup_wizard_disabled and device.build_type != 'user':
@@ -114,16 +114,16 @@ def DeviceInfo(device, options):
return (build_product, build_id, battery_level, errors, dev_good, json_data)
-def CheckForMissingDevices(options, devices):
+def CheckForMissingDevices(args, devices):
"""Uses file of previous online devices to detect broken phones.
Args:
- options: out_dir parameter of options argument is used as the base
+ args: out_dir parameter of args argument is used as the base
directory to load and update the cache file.
devices: A list of DeviceUtils instance for the currently visible and
online attached devices.
"""
- out_dir = os.path.abspath(options.out_dir)
+ out_dir = os.path.abspath(args.out_dir)
device_serials = set(d.adb.GetDeviceSerial() for d in devices)
# last_devices denotes all known devices prior to this run
@@ -224,9 +224,9 @@ def KillAllAdb():
pass
-def RecoverDevices(args):
+def RecoverDevices(blacklist, output_directory):
# Remove the last build's "bad devices" before checking device statuses.
- device_blacklist.ResetBlacklist()
+ blacklist.Reset()
previous_devices = set(a.GetDeviceSerial()
for a in adb_wrapper.AdbWrapper.Devices())
@@ -236,7 +236,7 @@ def RecoverDevices(args):
try:
expected_devices = set(device_list.GetPersistentDeviceList(
- os.path.join(args.out_dir, device_list.LAST_DEVICES_FILENAME)))
+ os.path.join(output_directory, device_list.LAST_DEVICES_FILENAME)))
except IOError:
expected_devices = set()
@@ -249,15 +249,15 @@ def RecoverDevices(args):
except device_errors.CommandFailedError:
logging.exception('Failure while waiting for %s. Adding to blacklist.',
str(device))
- device_blacklist.ExtendBlacklist([str(device)])
+ blacklist.Extend([str(device)])
except device_errors.CommandTimeoutError:
logging.exception('Timed out while waiting for %s. Adding to blacklist.',
str(device))
- device_blacklist.ExtendBlacklist([str(device)])
+ blacklist.Extend([str(device)])
device_utils.DeviceUtils.parallel(all_devices).pMap(blacklisting_recovery)
- devices = device_utils.DeviceUtils.HealthyDevices()
+ devices = device_utils.DeviceUtils.HealthyDevices(blacklist)
device_serials = set(d.adb.GetDeviceSerial() for d in devices)
missing_devices = expected_devices.difference(device_serials)
@@ -275,35 +275,41 @@ def RecoverDevices(args):
def main():
- parser = optparse.OptionParser()
- parser.add_option('', '--out-dir',
- help='Directory where the device path is stored',
- default=os.path.join(constants.DIR_SOURCE_ROOT, 'out'))
- parser.add_option('--no-provisioning-check', action='store_true',
- help='Will not check if devices are provisioned properly.')
- parser.add_option('--device-status-dashboard', action='store_true',
- help='Output device status data for dashboard.')
- parser.add_option('--restart-usb', action='store_true',
- help='DEPRECATED. '
- 'This script now always tries to reset USB.')
- parser.add_option('--json-output',
- help='Output JSON information into a specified file.')
- parser.add_option('-v', '--verbose', action='count', default=1,
- help='Log more information.')
-
- options, args = parser.parse_args()
- if args:
- parser.error('Unknown options %s' % args)
-
- run_tests_helper.SetLogLevel(options.verbose)
-
- devices = RecoverDevices(options)
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--out-dir',
+ help='Directory where the device path is stored',
+ default=os.path.join(constants.DIR_SOURCE_ROOT, 'out'))
+ parser.add_argument('--no-provisioning-check', action='store_true',
+ help='Will not check if devices are provisioned '
+ 'properly.')
+ parser.add_argument('--device-status-dashboard', action='store_true',
+ help='Output device status data for dashboard.')
+ parser.add_argument('--restart-usb', action='store_true',
+ help='DEPRECATED. '
+ 'This script now always tries to reset USB.')
+ parser.add_argument('--json-output',
+ help='Output JSON information into a specified file.')
+ parser.add_argument('--blacklist-file', help='Device blacklist JSON file.')
+ parser.add_argument('-v', '--verbose', action='count', default=1,
+ help='Log more information.')
+
+ args = parser.parse_args()
+
+ run_tests_helper.SetLogLevel(args.verbose)
+
+ if args.blacklist_file:
+ blacklist = device_blacklist.Blacklist(args.blacklist_file)
+ else:
+ # TODO(jbudorick): Remove this once bots pass the blacklist file.
+ blacklist = device_blacklist.Blacklist(device_blacklist.BLACKLIST_JSON)
+
+ devices = RecoverDevices(blacklist, args.out_dir)
types, builds, batteries, errors, devices_ok, json_data = (
[], [], [], [], [], [])
if devices:
types, builds, batteries, errors, devices_ok, json_data = (
- zip(*[DeviceInfo(dev, options) for dev in devices]))
+ zip(*[DeviceInfo(dev, args) for dev in devices]))
# Write device info to file for buildbot info display.
if os.path.exists('/home/chrome-bot'):
@@ -316,7 +322,7 @@ def main():
except Exception:
pass
- err_msg = CheckForMissingDevices(options, devices) or []
+ err_msg = CheckForMissingDevices(args, devices) or []
unique_types = list(set(types))
unique_builds = list(set(builds))
@@ -350,7 +356,7 @@ def main():
subject = 'Device status check errors on %s, %s.' % (slave_name, bot_name)
SendEmail(from_address, to_addresses, [], subject, '\n'.join(err_msg))
- if options.device_status_dashboard:
+ if args.device_status_dashboard:
offline_devices = [
device_utils.DeviceUtils(a)
for a in adb_wrapper.AdbWrapper.Devices(is_ready=False)
@@ -366,15 +372,15 @@ def main():
[battery], '%',
'unimportant')
- if options.json_output:
- with open(options.json_output, 'wb') as f:
+ if args.json_output:
+ with open(args.json_output, 'wb') as f:
f.write(json.dumps(json_data, indent=4))
num_failed_devs = 0
for device_ok, device in zip(devices_ok, devices):
if not device_ok:
logging.warning('Blacklisting %s', str(device))
- device_blacklist.ExtendBlacklist([str(device)])
+ blacklist.Extend([str(device)])
num_failed_devs += 1
if num_failed_devs == len(devices):
« no previous file with comments | « build/android/adb_reverse_forwarder.py ('k') | build/android/buildbot/bb_device_steps.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698