mirror of
https://github.com/encounter/engine.git
synced 2026-03-30 11:09:55 -07:00
137 lines
3.3 KiB
Python
Executable File
137 lines
3.3 KiB
Python
Executable File
#!/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))
|