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

Unified Diff: testing/scripts/host_info.py

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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 | « testing/legion/examples/subprocess/subprocess_test.py ('k') | testing/scripts/webview_licenses.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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))
« no previous file with comments | « testing/legion/examples/subprocess/subprocess_test.py ('k') | testing/scripts/webview_licenses.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698