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

Unified Diff: build/android/device_status_check.py

Issue 19684002: Removes device_status_check and buildbot_report (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 5 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 | « no previous file | build/android/pylib/buildbot_report.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/device_status_check.py
diff --git a/build/android/device_status_check.py b/build/android/device_status_check.py
deleted file mode 100755
index cd8415378bb5ce6388978dec86cd62aafd74f71d..0000000000000000000000000000000000000000
--- a/build/android/device_status_check.py
+++ /dev/null
@@ -1,233 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A class to keep track of devices across builds and report state."""
-import logging
-import optparse
-import os
-import smtplib
-import sys
-import re
-
-from pylib import android_commands
-from pylib import buildbot_report
-from pylib import constants
-from pylib.cmd_helper import GetCmdOutput
-
-
-def DeviceInfo(serial, options):
- """Gathers info on a device via various adb calls.
-
- Args:
- serial: The serial of the attached device to construct info about.
-
- Returns:
- Tuple of device type, build id, report as a string, error messages, and
- 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')
- 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])
- install_speed_found = re.findall('(\d+) KB/s', install_output)
- if install_speed_found:
- install_speed = int(install_speed_found[0])
- else:
- install_speed = 'Unknown'
- if 'Error' in battery:
- ac_power = 'Unknown'
- battery_level = 'Unknown'
- battery_temp = 'Unknown'
- else:
- 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
- report = ['Device %s (%s)' % (serial, device_type),
- ' Build: %s (%s)' % (device_build,
- AdbShellCmd('getprop ro.build.fingerprint')),
- ' 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'),
- ' Install Speed: %s KB/s' % install_speed,
- '']
-
- errors = []
- if battery_level < 15:
- errors += ['Device critically low in battery. Turning off device.']
- if (not setup_wizard_disabled and device_build_type != 'user' and
- not options.no_provisioning_check):
- errors += ['Setup wizard not disabled. Was it provisioned correctly?']
- if device_product_name == 'mantaray' and ac_power != 'true':
- errors += ['Mantaray device not connected to AC power.']
- # TODO(navabi): Insert warning once we have a better handle of what install
- # speeds to expect. The following lines were causing too many alerts.
- # if install_speed < 500:
- # errors += ['Device install speed too low. Do not use for testing.']
-
- # Causing the device status check step fail for slow install speed or low
- # battery currently is too disruptive to the bots (especially try bots).
- # 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
-
-
-def CheckForMissingDevices(options, adb_online_devs):
- """Uses file of previous online devices to detect broken phones.
-
- Args:
- options: out_dir parameter of options argument is used as the base
- directory to load and update the cache file.
- adb_online_devs: A list of serial numbers of the currently visible
- and online attached devices.
- """
- # TODO(navabi): remove this once the bug that causes different number
- # of devices to be detected between calls is fixed.
- logger = logging.getLogger()
- logger.setLevel(logging.INFO)
-
- out_dir = os.path.abspath(options.out_dir)
-
- def ReadDeviceList(file_name):
- devices_path = os.path.join(out_dir, file_name)
- devices = []
- try:
- with open(devices_path) as f:
- devices = f.read().splitlines()
- except IOError:
- # Ignore error, file might not exist
- pass
- return devices
-
- def WriteDeviceList(file_name, device_list):
- path = os.path.join(out_dir, file_name)
- if not os.path.exists(out_dir):
- os.makedirs(out_dir)
- with open(path, 'w') as f:
- # Write devices currently visible plus devices previously seen.
- f.write('\n'.join(set(device_list)))
-
- last_devices_path = os.path.join(out_dir, '.last_devices')
- last_devices = ReadDeviceList('.last_devices')
- missing_devs = list(set(last_devices) - set(adb_online_devs))
-
- all_known_devices = list(set(adb_online_devs) | set(last_devices))
- WriteDeviceList('.last_devices', all_known_devices)
- WriteDeviceList('.last_missing', missing_devs)
-
- if not all_known_devices:
- # This can happen if for some reason the .last_devices file is not
- # present or if it was empty.
- return ['No online devices. Have any devices been plugged in?']
- if missing_devs:
- devices_missing_msg = '%d devices not detected.' % len(missing_devs)
- buildbot_report.PrintSummaryText(devices_missing_msg)
-
- # TODO(navabi): Debug by printing both output from GetCmdOutput and
- # GetAttachedDevices to compare results.
- return ['Current online devices: %s' % adb_online_devs,
- '%s are no longer visible. Were they removed?\n' % missing_devs,
- 'SHERIFF: See go/chrome_device_monitor',
- 'Cache file: %s\n\n' % last_devices_path,
- 'adb devices: %s' % GetCmdOutput(['adb', 'devices']),
- 'adb devices(GetAttachedDevices): %s' %
- android_commands.GetAttachedDevices()]
- else:
- new_devs = set(adb_online_devs) - set(last_devices)
- if new_devs and os.path.exists(last_devices_path):
- buildbot_report.PrintWarning()
- buildbot_report.PrintSummaryText(
- '%d new devices detected' % len(new_devs))
- print ('New devices detected %s. And now back to your '
- 'regularly scheduled program.' % list(new_devs))
-
-
-def SendDeviceStatusAlert(msg):
- from_address = 'buildbot@chromium.org'
- to_address = 'chromium-android-device-alerts@google.com'
- bot_name = os.environ.get('BUILDBOT_BUILDERNAME')
- slave_name = os.environ.get('BUILDBOT_SLAVENAME')
- subject = 'Device status check errors on %s, %s.' % (slave_name, bot_name)
- msg_body = '\r\n'.join(['From: %s' % from_address, 'To: %s' % to_address,
- 'Subject: %s' % subject, '', msg])
- try:
- server = smtplib.SMTP('localhost')
- server.sendmail(from_address, [to_address], msg_body)
- server.quit()
- except Exception as e:
- print 'Failed to send alert email. Error: %s' % e
-
-
-def main():
- parser = optparse.OptionParser()
- parser.add_option('', '--out-dir',
- help='Directory where the device path is stored',
- default=os.path.join(os.path.dirname(__file__), '..',
- '..', 'out'))
- parser.add_option('--no-provisioning-check',
- help='Will not check if devices are provisioned properly.')
-
- options, args = parser.parse_args()
- if args:
- parser.error('Unknown options %s' % args)
- devices = android_commands.GetAttachedDevices()
- types, builds, reports, errors = [], [], [], []
- fail_step_lst = []
- if devices:
- types, builds, reports, errors, fail_step_lst = (
- zip(*[DeviceInfo(dev, options) for dev in devices]))
-
- err_msg = CheckForMissingDevices(options, devices) or []
-
- unique_types = list(set(types))
- unique_builds = list(set(builds))
-
- buildbot_report.PrintMsg('Online devices: %d. Device types %s, builds %s'
- % (len(devices), unique_types, unique_builds))
- print '\n'.join(reports)
-
- for serial, dev_errors in zip(devices, errors):
- if dev_errors:
- err_msg += ['%s errors:' % serial]
- err_msg += [' %s' % error for error in dev_errors]
-
- if err_msg:
- buildbot_report.PrintWarning()
- msg = '\n'.join(err_msg)
- print msg
- SendDeviceStatusAlert(msg)
-
- 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
- # from testing, allowing build to continue with good devices.
- return 1
-
- if not devices:
- return 1
-
-
-if __name__ == '__main__':
- sys.exit(main())
« no previous file with comments | « no previous file | build/android/pylib/buildbot_report.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698