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 |
old mode 100755 |
new mode 100644 |
index fbe4849c2a0ed704cba5da9f58d1da5fb99a6bc9..7e9355778afae505270a11f0ff0d2a2b10920366 |
--- a/build/android/buildbot/bb_device_status_check.py |
+++ b/build/android/buildbot/bb_device_status_check.py |
@@ -17,6 +17,7 @@ import bb_annotations |
sys.path.append(os.path.join(os.path.dirname(__file__), '..')) |
from pylib import android_commands |
from pylib import constants |
+from pylib import perf_tests_helper |
from pylib.cmd_helper import GetCmdOutput |
@@ -31,21 +32,16 @@ def DeviceInfo(serial, options): |
boolean indicating whether or not device can be used for testing. |
""" |
- def AdbShellCmd(cmd): |
- return GetCmdOutput('adb -s %s shell %s' % (serial, cmd), |
- shell=True).strip() |
- |
device_adb = android_commands.AndroidCommands(serial) |
# TODO(navabi): Replace AdbShellCmd with device_adb. |
- device_type = AdbShellCmd('getprop ro.build.product') |
- device_build = AdbShellCmd('getprop ro.build.id') |
- device_build_type = AdbShellCmd('getprop ro.build.type') |
- device_product_name = AdbShellCmd('getprop ro.product.name') |
- |
- setup_wizard_disabled = AdbShellCmd( |
- 'getprop ro.setupwizard.mode') == 'DISABLED' |
- battery = AdbShellCmd('dumpsys battery') |
+ device_type = device_adb.GetBuildProduct() |
+ device_build = device_adb.GetBuildId() |
+ device_build_type = device_adb.GetBuildType() |
+ device_product_name = device_adb.GetProductName() |
+ |
+ setup_wizard_disabled = device_adb.GetSetupWizardStatus() == 'DISABLED' |
+ battery = device_adb.GetBatteryInfo() |
install_output = GetCmdOutput( |
['%s/build/android/adb_install_apk.py' % constants.DIR_SOURCE_ROOT, '--apk', |
'%s/build/android/CheckInstallApk-debug.apk' % constants.DIR_SOURCE_ROOT]) |
@@ -62,15 +58,15 @@ def DeviceInfo(serial, options): |
ac_power = re.findall('AC powered: (\w+)', battery)[0] |
battery_level = int(re.findall('level: (\d+)', battery)[0]) |
battery_temp = float(re.findall('temperature: (\d+)', battery)[0]) / 10 |
+ sub_info = device_adb.GetSubscriberInfo() |
+ imei_slice = re.findall('Device ID = (\d+)', sub_info)[0][-6:] |
report = ['Device %s (%s)' % (serial, device_type), |
- ' Build: %s (%s)' % (device_build, |
- AdbShellCmd('getprop ro.build.fingerprint')), |
+ ' Build: %s (%s)' % |
+ (device_build, device_adb.GetBuildFingerprint()), |
' Battery: %s%%' % battery_level, |
' Battery temp: %s' % battery_temp, |
- ' IMEI slice: %s' % AdbShellCmd('dumpsys iphonesubinfo ' |
- '| grep Device' |
- "| awk '{print $4}'")[-6:], |
- ' Wifi IP: %s' % AdbShellCmd('getprop dhcp.wlan0.ipaddress'), |
+ ' IMEI slice: %s' % imei_slice, |
+ ' Wifi IP: %s' % device_adb.GetWifiIP(), |
' Install Speed: %s KB/s' % install_speed, |
''] |
@@ -92,8 +88,9 @@ def DeviceInfo(serial, options): |
# Turn off devices with low battery and the step does not fail. |
if battery_level < 15: |
device_adb.EnableAdbRoot() |
- AdbShellCmd('reboot -p') |
- return device_type, device_build, '\n'.join(report), errors, True |
+ device_adb.Shutdown() |
+ full_report = '\n'.join(report) |
+ return device_type, device_build, battery_level, full_report, errors, True |
def CheckForMissingDevices(options, adb_online_devs): |
@@ -189,15 +186,21 @@ def main(): |
default=os.path.join(constants.DIR_SOURCE_ROOT, 'out')) |
parser.add_option('--no-provisioning-check', |
help='Will not check if devices are provisioned properly.') |
- |
+ parser.add_option('--device-status-dashboard', |
+ help='Output device status data for dashboard.') |
options, args = parser.parse_args() |
if args: |
parser.error('Unknown options %s' % args) |
devices = android_commands.GetAttachedDevices() |
- types, builds, reports, errors = [], [], [], [] |
+ # TODO(navabi): Test to make sure this fails and then fix call |
+ offline_devices = android_commands.GetAttachedDevices(hardware=False, |
+ emulator=False, |
+ offline=True) |
+ |
+ types, builds, batteries, reports, errors = [], [], [], [], [] |
fail_step_lst = [] |
if devices: |
- types, builds, reports, errors, fail_step_lst = ( |
+ types, builds, batteries, reports, errors, fail_step_lst = ( |
zip(*[DeviceInfo(dev, options) for dev in devices])) |
err_msg = CheckForMissingDevices(options, devices) or [] |
@@ -220,6 +223,16 @@ def main(): |
print msg |
SendDeviceStatusAlert(msg) |
+ if options.device_status_dashboard: |
+ perf_tests_helper.PrintPerfResult('BotDevices', 'OnlineDevices', |
+ [len(devices)], 'devices') |
+ perf_tests_helper.PrintPerfResult('BotDevices', 'OfflineDevices', |
+ [len(offline_devices)], 'devices', |
+ 'unimportant') |
+ for serial, battery in zip(devices, batteries): |
+ perf_tests_helper.PrintPerfResult('DeviceBattery', serial, [battery], '%', |
+ 'unimportant') |
+ |
if False in fail_step_lst: |
# TODO(navabi): Build fails on device status check step if there exists any |
# devices with critically low battery or install speed. Remove those devices |