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

Side by Side Diff: build/android/buildbot/bb_device_status_check.py

Issue 792183002: Put more information into device status json output. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase master Created 6 years 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 json 8 import json
9 import logging 9 import logging
10 import optparse 10 import optparse
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 return 'Unknown' 62 return 'Unknown'
63 found = re.findall(re_expression, line) 63 found = re.findall(re_expression, line)
64 if found and len(found): 64 if found and len(found):
65 return lambda_function(found[0]) 65 return lambda_function(found[0])
66 return 'Unknown' 66 return 'Unknown'
67 67
68 battery_level = int(battery_info.get('level', 100)) 68 battery_level = int(battery_info.get('level', 100))
69 imei_slice = _GetData(r'Device ID = (\d+)', 69 imei_slice = _GetData(r'Device ID = (\d+)',
70 device_adb.old_interface.GetSubscriberInfo(), 70 device_adb.old_interface.GetSubscriberInfo(),
71 lambda x: x[-6:]) 71 lambda x: x[-6:])
72 json_data = {
73 'serial': serial,
74 'type': device_type,
75 'build': device_build,
76 'build_detail': device_adb.GetProp('ro.build.fingerprint'),
77 'battery': battery_info,
78 'imei_slice': imei_slice,
79 'wifi_ip': device_adb.GetProp('dhcp.wlan0.ipaddress'),
80 }
72 report = ['Device %s (%s)' % (serial, device_type), 81 report = ['Device %s (%s)' % (serial, device_type),
73 ' Build: %s (%s)' % 82 ' Build: %s (%s)' %
74 (device_build, device_adb.build_fingerprint), 83 (device_build, json_data['build_detail']),
75 ' Current Battery Service state: ', 84 ' Current Battery Service state: ',
76 '\n'.join([' %s: %s' % (k, v) 85 '\n'.join([' %s: %s' % (k, v)
77 for k, v in battery_info.iteritems()]), 86 for k, v in battery_info.iteritems()]),
78 ' IMEI slice: %s' % imei_slice, 87 ' IMEI slice: %s' % imei_slice,
79 ' Wifi IP: %s' % device_adb.GetProp('dhcp.wlan0.ipaddress'), 88 ' Wifi IP: %s' % json_data['wifi_ip'],
80 ''] 89 '']
81 90
82 errors = [] 91 errors = []
83 dev_good = True 92 dev_good = True
84 if battery_level < 15: 93 if battery_level < 15:
85 errors += ['Device critically low in battery. Will add to blacklist.'] 94 errors += ['Device critically low in battery. Will add to blacklist.']
86 dev_good = False 95 dev_good = False
87 if not device_adb.old_interface.IsDeviceCharging(): 96 if not device_adb.old_interface.IsDeviceCharging():
88 if device_adb.old_interface.CanControlUsbCharging(): 97 if device_adb.old_interface.CanControlUsbCharging():
89 device_adb.old_interface.EnableUsbCharging() 98 device_adb.old_interface.EnableUsbCharging()
90 else: 99 else:
91 logging.error('Device %s is not charging' % serial) 100 logging.error('Device %s is not charging' % serial)
92 if not options.no_provisioning_check: 101 if not options.no_provisioning_check:
93 setup_wizard_disabled = ( 102 setup_wizard_disabled = (
94 device_adb.GetProp('ro.setupwizard.mode') == 'DISABLED') 103 device_adb.GetProp('ro.setupwizard.mode') == 'DISABLED')
95 if not setup_wizard_disabled and device_build_type != 'user': 104 if not setup_wizard_disabled and device_build_type != 'user':
96 errors += ['Setup wizard not disabled. Was it provisioned correctly?'] 105 errors += ['Setup wizard not disabled. Was it provisioned correctly?']
97 if (device_product_name == 'mantaray' and 106 if (device_product_name == 'mantaray' and
98 battery_info.get('AC powered', None) != 'true'): 107 battery_info.get('AC powered', None) != 'true'):
99 errors += ['Mantaray device not connected to AC power.'] 108 errors += ['Mantaray device not connected to AC power.']
100 109
101 full_report = '\n'.join(report) 110 full_report = '\n'.join(report)
102 return device_type, device_build, battery_level, full_report, errors, dev_good 111
112 return (device_type, device_build, battery_level, full_report, errors,
113 dev_good, json_data)
103 114
104 115
105 def CheckForMissingDevices(options, adb_online_devs): 116 def CheckForMissingDevices(options, adb_online_devs):
106 """Uses file of previous online devices to detect broken phones. 117 """Uses file of previous online devices to detect broken phones.
107 118
108 Args: 119 Args:
109 options: out_dir parameter of options argument is used as the base 120 options: out_dir parameter of options argument is used as the base
110 directory to load and update the cache file. 121 directory to load and update the cache file.
111 adb_online_devs: A list of serial numbers of the currently visible 122 adb_online_devs: A list of serial numbers of the currently visible
112 and online attached devices. 123 and online attached devices.
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 if not usb_restarted and devices: 323 if not usb_restarted and devices:
313 # The USB wasn't restarted, but there's at least one device online. 324 # The USB wasn't restarted, but there's at least one device online.
314 # No point in trying to wait for all devices. 325 # No point in trying to wait for all devices.
315 break 326 break
316 retries -= 1 327 retries -= 1
317 328
318 # TODO(navabi): Test to make sure this fails and then fix call 329 # TODO(navabi): Test to make sure this fails and then fix call
319 offline_devices = android_commands.GetAttachedDevices( 330 offline_devices = android_commands.GetAttachedDevices(
320 hardware=False, emulator=False, offline=True) 331 hardware=False, emulator=False, offline=True)
321 332
322 types, builds, batteries, reports, errors = [], [], [], [], [] 333 types, builds, batteries, reports, errors, json_data = [], [], [], [], [], []
323 fail_step_lst = [] 334 fail_step_lst = []
324 if devices: 335 if devices:
325 types, builds, batteries, reports, errors, fail_step_lst = ( 336 types, builds, batteries, reports, errors, fail_step_lst, json_data = (
326 zip(*[DeviceInfo(dev, options) for dev in devices])) 337 zip(*[DeviceInfo(dev, options) for dev in devices]))
327 338
328 err_msg = CheckForMissingDevices(options, devices) or [] 339 err_msg = CheckForMissingDevices(options, devices) or []
329 340
330 unique_types = list(set(types)) 341 unique_types = list(set(types))
331 unique_builds = list(set(builds)) 342 unique_builds = list(set(builds))
332 343
333 bb_annotations.PrintMsg('Online devices: %d. Device types %s, builds %s' 344 bb_annotations.PrintMsg('Online devices: %d. Device types %s, builds %s'
334 % (len(devices), unique_types, unique_builds)) 345 % (len(devices), unique_types, unique_builds))
335 print '\n'.join(reports) 346 print '\n'.join(reports)
(...skipping 20 matching lines...) Expand all
356 perf_tests_results_helper.PrintPerfResult('BotDevices', 'OfflineDevices', 367 perf_tests_results_helper.PrintPerfResult('BotDevices', 'OfflineDevices',
357 [len(offline_devices)], 'devices', 368 [len(offline_devices)], 'devices',
358 'unimportant') 369 'unimportant')
359 for serial, battery in zip(devices, batteries): 370 for serial, battery in zip(devices, batteries):
360 perf_tests_results_helper.PrintPerfResult('DeviceBattery', serial, 371 perf_tests_results_helper.PrintPerfResult('DeviceBattery', serial,
361 [battery], '%', 372 [battery], '%',
362 'unimportant') 373 'unimportant')
363 374
364 if options.json_output: 375 if options.json_output:
365 with open(options.json_output, 'wb') as f: 376 with open(options.json_output, 'wb') as f:
366 f.write(json.dumps({ 377 f.write(json.dumps(json_data, indent=4))
367 'online_devices': devices,
368 'offline_devices': offline_devices,
369 'expected_devices': expected_devices,
370 'unique_types': unique_types,
371 'unique_builds': unique_builds,
372 }))
373 378
374 num_failed_devs = 0 379 num_failed_devs = 0
375 for fail_status, device in zip(fail_step_lst, devices): 380 for fail_status, device in zip(fail_step_lst, devices):
376 if not fail_status: 381 if not fail_status:
377 device_blacklist.ExtendBlacklist([str(device)]) 382 device_blacklist.ExtendBlacklist([str(device)])
378 num_failed_devs += 1 383 num_failed_devs += 1
379 384
380 if num_failed_devs == len(devices): 385 if num_failed_devs == len(devices):
381 return 2 386 return 2
382 387
383 if not devices: 388 if not devices:
384 return 1 389 return 1
385 390
386 391
387 if __name__ == '__main__': 392 if __name__ == '__main__':
388 sys.exit(main()) 393 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698