blob: a24dbbfebed9f9da18a31aad7f09d98fa753fcc9 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import print_function
import subprocess
import argparse
from collections import namedtuple
import json
import os
import re
# This script collects all the necessary system information and outputs it in JSON format
SYSINFO_REPORT_VERSION = '1'
def default_parser(s):
return s
def package_list_parser(s):
res = re.findall(r'(.*)\#\#(.*)', s)
if len(res) == 1:
return { res[0][0] : res[0][1] }
return s
cmd_data_sources = {
'linux_version' : {
'cmd' :'uname -a'
},
'packages' : {
'cmd' : 'dpkg-query -f \'${binary:Package}##${source:Version}\n\' -W \'*\'',
'parser' : package_list_parser
},
'sources_list' : {
'cmd' : 'cat /etc/apt/sources.list'
},
'sources_list_d' : {
'cmd' : 'cat /etc/apt/sources.list.d/*'
},
'glx_device' : {
'cmd' : 'glxinfo -B | grep Device: | cut -f2- -d:'
}
}
def run_app(cmd_line, parser):
return list(map(parser, subprocess.run(cmd_line, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8').stdout.splitlines()))
data_results = {}
data_results['report_version'] = SYSINFO_REPORT_VERSION
for key in cmd_data_sources:
parser = cmd_data_sources[key].get('parser', default_parser)
data_results[key] = run_app(cmd_data_sources[key]['cmd'], parser)
print(json.dumps(data_results, indent=2, sort_keys=True))