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 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 logging.error('Unable to obtain battery info for %s, %s', serial, e) | 57 logging.error('Unable to obtain battery info for %s, %s', serial, e) |
58 | 58 |
59 def _GetData(re_expression, line, lambda_function=lambda x:x): | 59 def _GetData(re_expression, line, lambda_function=lambda x:x): |
60 if not line: | 60 if not line: |
61 return 'Unknown' | 61 return 'Unknown' |
62 found = re.findall(re_expression, line) | 62 found = re.findall(re_expression, line) |
63 if found and len(found): | 63 if found and len(found): |
64 return lambda_function(found[0]) | 64 return lambda_function(found[0]) |
65 return 'Unknown' | 65 return 'Unknown' |
66 | 66 |
67 if options.device_status_dashboard: | |
68 # Dashboard does not track install speed. Do not unnecessarily install. | |
69 install_speed = 'Unknown' | |
70 else: | |
71 install_output = GetCmdOutput( | |
72 ['%s/build/android/adb_install_apk.py' % constants.DIR_SOURCE_ROOT, | |
73 '--apk', | |
74 '%s/build/android/CheckInstallApk-debug.apk' % constants.DIR_SOURCE_ROOT | |
75 ]) | |
76 install_speed = _GetData('(\d+) KB/s', install_output) | |
77 | |
78 ac_power = _GetData('AC powered: (\w+)', battery) | 67 ac_power = _GetData('AC powered: (\w+)', battery) |
79 battery_level = _GetData('level: (\d+)', battery) | 68 battery_level = _GetData('level: (\d+)', battery) |
80 battery_temp = _GetData('temperature: (\d+)', battery, | 69 battery_temp = _GetData('temperature: (\d+)', battery, |
81 lambda x: float(x) / 10.0) | 70 lambda x: float(x) / 10.0) |
82 imei_slice = _GetData('Device ID = (\d+)', | 71 imei_slice = _GetData('Device ID = (\d+)', |
83 device_adb.GetSubscriberInfo(), | 72 device_adb.GetSubscriberInfo(), |
84 lambda x: x[-6:]) | 73 lambda x: x[-6:]) |
85 report = ['Device %s (%s)' % (serial, device_type), | 74 report = ['Device %s (%s)' % (serial, device_type), |
86 ' Build: %s (%s)' % | 75 ' Build: %s (%s)' % |
87 (device_build, device_adb.GetBuildFingerprint()), | 76 (device_build, device_adb.GetBuildFingerprint()), |
88 ' Battery: %s%%' % battery_level, | 77 ' Battery: %s%%' % battery_level, |
89 ' Battery temp: %s' % battery_temp, | 78 ' Battery temp: %s' % battery_temp, |
90 ' IMEI slice: %s' % imei_slice, | 79 ' IMEI slice: %s' % imei_slice, |
91 ' Wifi IP: %s' % device_adb.GetWifiIP(), | 80 ' Wifi IP: %s' % device_adb.GetWifiIP(), |
92 ' Install Speed: %s KB/s' % install_speed, | |
93 ''] | 81 ''] |
94 | 82 |
95 errors = [] | 83 errors = [] |
96 if battery_level < 15: | 84 if battery_level < 15: |
97 errors += ['Device critically low in battery. Turning off device.'] | 85 errors += ['Device critically low in battery. Turning off device.'] |
98 if not options.no_provisioning_check: | 86 if not options.no_provisioning_check: |
99 setup_wizard_disabled = device_adb.GetSetupWizardStatus() == 'DISABLED' | 87 setup_wizard_disabled = device_adb.GetSetupWizardStatus() == 'DISABLED' |
100 if not setup_wizard_disabled and device_build_type != 'user': | 88 if not setup_wizard_disabled and device_build_type != 'user': |
101 errors += ['Setup wizard not disabled. Was it provisioned correctly?'] | 89 errors += ['Setup wizard not disabled. Was it provisioned correctly?'] |
102 if device_product_name == 'mantaray' and ac_power != 'true': | 90 if device_product_name == 'mantaray' and ac_power != 'true': |
103 errors += ['Mantaray device not connected to AC power.'] | 91 errors += ['Mantaray device not connected to AC power.'] |
104 # TODO(navabi): Insert warning once we have a better handle of what install | |
105 # speeds to expect. The following lines were causing too many alerts. | |
106 # if install_speed < 500: | |
107 # errors += ['Device install speed too low. Do not use for testing.'] | |
108 | 92 |
109 # Causing the device status check step fail for slow install speed or low | 93 # Turn off devices with low battery. |
110 # battery currently is too disruptive to the bots (especially try bots). | |
111 # Turn off devices with low battery and the step does not fail. | |
112 if battery_level < 15: | 94 if battery_level < 15: |
113 device_adb.EnableAdbRoot() | 95 device_adb.EnableAdbRoot() |
114 device_adb.Shutdown() | 96 device_adb.Shutdown() |
115 full_report = '\n'.join(report) | 97 full_report = '\n'.join(report) |
116 return device_type, device_build, battery_level, full_report, errors, True | 98 return device_type, device_build, battery_level, full_report, errors, True |
117 | 99 |
118 | 100 |
119 def GetLastDevices(out_dir): | 101 def GetLastDevices(out_dir): |
120 """Returns a list of devices that have been seen on the bot. | 102 """Returns a list of devices that have been seen on the bot. |
121 | 103 |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 perf_tests_results_helper.PrintPerfResult('BotDevices', 'OfflineDevices', | 340 perf_tests_results_helper.PrintPerfResult('BotDevices', 'OfflineDevices', |
359 [len(offline_devices)], 'devices', | 341 [len(offline_devices)], 'devices', |
360 'unimportant') | 342 'unimportant') |
361 for serial, battery in zip(devices, batteries): | 343 for serial, battery in zip(devices, batteries): |
362 perf_tests_results_helper.PrintPerfResult('DeviceBattery', serial, | 344 perf_tests_results_helper.PrintPerfResult('DeviceBattery', serial, |
363 [battery], '%', | 345 [battery], '%', |
364 'unimportant') | 346 'unimportant') |
365 | 347 |
366 if False in fail_step_lst: | 348 if False in fail_step_lst: |
367 # TODO(navabi): Build fails on device status check step if there exists any | 349 # TODO(navabi): Build fails on device status check step if there exists any |
368 # devices with critically low battery or install speed. Remove those devices | 350 # devices with critically low battery. Remove those devices from testing, |
369 # from testing, allowing build to continue with good devices. | 351 # allowing build to continue with good devices. |
370 return 1 | 352 return 1 |
371 | 353 |
372 if not devices: | 354 if not devices: |
373 return 1 | 355 return 1 |
374 | 356 |
375 | 357 |
376 if __name__ == '__main__': | 358 if __name__ == '__main__': |
377 sys.exit(main()) | 359 sys.exit(main()) |
OLD | NEW |