| Index: testing/scripts/host_info.py
|
| diff --git a/testing/scripts/host_info.py b/testing/scripts/host_info.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..b3131d8fb5c7ffd1ad077e24a20f55ee2c1ce5d1
|
| --- /dev/null
|
| +++ b/testing/scripts/host_info.py
|
| @@ -0,0 +1,136 @@
|
| +#!/usr/bin/env python
|
| +# Copyright 2015 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.
|
| +
|
| +import json
|
| +import multiprocessing
|
| +import os
|
| +import platform
|
| +import subprocess
|
| +import sys
|
| +
|
| +
|
| +import common
|
| +
|
| +
|
| +def is_linux():
|
| + return sys.platform.startswith('linux')
|
| +
|
| +
|
| +def get_free_disk_space(failures):
|
| + """Returns the amount of free space on the current disk, in GiB.
|
| +
|
| + Returns:
|
| + The amount of free space on the current disk, measured in GiB.
|
| + """
|
| + if os.name == 'posix':
|
| + # Stat the current path for info on the current disk.
|
| + stat_result = os.statvfs('.')
|
| + # Multiply block size by number of free blocks, express in GiB.
|
| + return stat_result.f_frsize * stat_result.f_bavail / (
|
| + 1024.0 / 1024.0 / 1024.0)
|
| +
|
| + failures.append('get_free_disk_space: OS %s not supported.' % os.name)
|
| + return 0
|
| +
|
| +
|
| +def get_num_cpus(failures):
|
| + """Returns the number of logical CPUs on this machine.
|
| +
|
| + Returns:
|
| + The number of logical CPUs on this machine, or 'unknown' if indeterminate.
|
| + """
|
| + try:
|
| + return multiprocessing.cpu_count()
|
| + except NotImplementedError:
|
| + failures.append('get_num_cpus')
|
| + return 'unknown'
|
| +
|
| +
|
| +def get_device_info(args, failures):
|
| + """Parses the device info for each attached device, and returns a summary
|
| + of the device info and any mismatches.
|
| +
|
| + Returns:
|
| + A dict indicating the result.
|
| + """
|
| + if not is_linux():
|
| + return {}
|
| +
|
| + with common.temporary_file() as tempfile_path:
|
| + rc = common.run_command([
|
| + sys.executable,
|
| + os.path.join(args.paths['checkout'],
|
| + 'build',
|
| + 'android',
|
| + 'buildbot',
|
| + 'bb_device_status_check.py'),
|
| + '--json-output', tempfile_path])
|
| +
|
| + if rc:
|
| + failures.append('bb_device_status_check')
|
| + return {}
|
| +
|
| + with open(tempfile_path, 'r') as src:
|
| + device_info = json.load(src)
|
| +
|
| + results = {}
|
| + results['devices'] = sorted(v['serial'] for v in device_info)
|
| +
|
| + details = [v['build_detail'] for v in device_info]
|
| +
|
| + def unique_build_details(index):
|
| + return sorted(list(set([v.split(':')[index] for v in details])))
|
| +
|
| + parsed_details = {
|
| + 'device_names': unique_build_details(0),
|
| + 'build_versions': unique_build_details(1),
|
| + 'build_types': unique_build_details(2),
|
| + }
|
| +
|
| + for k, v in parsed_details.iteritems():
|
| + if len(v) == 1:
|
| + results[k] = v[0]
|
| + else:
|
| + results[k] = 'MISMATCH'
|
| + results['%s_list' % k] = v
|
| + failures.append(k)
|
| +
|
| + return results
|
| +
|
| +
|
| +def main_run(args):
|
| + failures = []
|
| + host_info = {}
|
| + host_info['os_system'] = platform.system()
|
| + host_info['os_release'] = platform.release()
|
| +
|
| + host_info['processor'] = platform.processor()
|
| + host_info['num_cpus'] = get_num_cpus(failures)
|
| + host_info['free_disk_space'] = get_free_disk_space(failures)
|
| +
|
| + host_info['python_version'] = platform.python_version()
|
| + host_info['python_path'] = sys.executable
|
| +
|
| + host_info['devices'] = get_device_info(args, failures)
|
| +
|
| + json.dump({
|
| + 'valid': True,
|
| + 'failures': failures,
|
| + '_host_info': host_info,
|
| + }, args.output)
|
| +
|
| + return len(failures) != 0
|
| +
|
| +
|
| +def main_compile_targets(args):
|
| + json.dump([], args.output)
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + funcs = {
|
| + 'run': main_run,
|
| + 'compile_targets': main_compile_targets,
|
| + }
|
| + sys.exit(common.run_script(sys.argv[1:], funcs))
|
|
|